zoukankan      html  css  js  c++  java
  • Java虚拟机知识 总结 记录

    总结了自己这两天掌握的一些JVM相关的知识。方便自己复习。

    jvm全称是Java Virtual Machine(java虚拟机)。它之所以被称之为是“虚拟”的,就是因为它仅仅是由一个规范来定义的抽象计算机。当启动一个Java程序时,一个虚拟机实例也就诞生了。当该程序关闭退出是,这个虚拟机实例也就随之消亡。如果在同一个计算机上同时运行三个程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。

    我们在写Java代码的时候通常是生成一个.java文件,之后通过javac来对.java文件进行编译,编译成功生成一个.class文件(字节码文件),然后通过java file 来执行java程序。

    而执行这个程序,我们就需要java虚拟机来帮我们。

    JVM主要包括以下几下部分:

    1)Class Loader 类加载器

    所有的class文件必须被加载后才能在JVM中执行。它是一个层级的结构,分为以下几种结构:

    1.bootstrap class loader :用来加载Java的一些基本的API

    2.extension class loader :用来加载Java的扩展库,Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载Java 类

    3.system class loader : 它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类

    4.user defined class loader : 用来加载一些用户自己实现的类

    类加载器在工作的时候采用的是向上委派的模式,即当classloader有类需要加载的时候,如果这个类没有被装载过,则调用父classloader去装载,一层一层向上委派直到找到bootstrap class loader,如果仍然不能装载,则跑出ClassNotFoundException异常。

    2)Runtime Data Areas 运行数据区

    运行数据区主要分为: Java 栈,PC register,本地方法栈,堆,方法区,常量池六个部分,前面三个部分是每个线程都具有的,而后面三个部分是所有线程所共有的。

    1.Java 栈 : 用来为被执行每个方法创建一个栈帧(Stack Frame)用于存储局部变量表,操作栈,动态链接,方法出口等信息。

    2.堆(heap):所有线程共享这个堆。所有的类对象实例和数组都分配在堆上。Jvm堆在Jvm启动的时候被创建。Jvm提供一个垃圾收集者来管理堆。堆上的对象不需要程序员显式地销毁(gc管理)。

    3.本地方法栈 : 本地方法栈与虚拟机栈所发挥的作用是非常相似的,其区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。任何本地方法接口都        会使用某种本地方法栈。当线程调用Java方法时,虚拟机会创建一个新的栈帧并压入Java栈。然而当它调用的是本地方法时,虚拟机会保持Java栈不变,不再在线程的Java栈中压入新的帧,虚拟机只        是简单地动态链接并直接调用指定的本地方法。

    4.PC register :  JVM支持多线程,每个线程都有自己的pc寄存器。如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址,如果是native的,这个计数器值则为空(Undefined)。

    5.方法区:它用于存储已被虚拟机加载的类信息,常量,静态变量,即使编译器编译后的代码等数据。

    6.常量池:运行时常量池是方法区的一部分。Class文件中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放到方      法区的运行时常量池。

    具体的可以看看这篇博客(http://boy00fly.iteye.com/blog/1096637)写的很详细.

  • 相关阅读:
    diary and html 文本颜色编辑,行距和其它编辑总汇
    bash coding to changeNames
    virtualbox ubuntu 网络连接 以及 连接 secureCRT
    linux 学习6 软件包安装
    linux 学习8 权限管理
    vim 使用2 转载 为了打开方便
    ubuntu
    linux 学习15 16 启动管理,备份和恢复
    linux 学习 14 日志管理
    linux 学习 13 系统管理
  • 原文地址:https://www.cnblogs.com/hfczgo/p/4037304.html
Copyright © 2011-2022 走看看