JVM虚拟机学习总结(一)

  • 时间:
  • 浏览:1
  • 来源:大发彩神APP_大发神彩APP官方

LoadJRElibertr*.jar但会 -Djava.ert.dirs指定目录下的jar包(由EcxtensionClassLoader加载器加载)

loadCLASSPATH但会 -Djava.class.path所指定目录下的jar包(由AppClassLoader加载器加载)

在JVM中累的全版标识:ClassLoader+package+className;

类加载器的可见性限制:下层的加载器能不能都看上层加载器中的类,反之则不被允许,也假若说委托那末从下到上;

不可卸载类:类加载器能那末加载有有十个 类,但会 它那末卸载有有十个 类,但会 类加载器能那末被删除以及被创建;

JVM的接下来的执行流程为:

2.JVM的运行数据区域

运行数据区域主要富含十个 模块,十个 模块又分别属于每个应用应用程序独立拥有的以及所有应用应用程序共有的模块

                            ↓

java栈

应用应用程序代数寄存器(PC寄存器)

本地最好的依据栈

所有应用应用程序共有的如下:

每个应用应用程序独立拥有的如下:

LoadJRElibrt.jar但会 -xbootClassPath指定的jar包(由BootStrapClassLoader加载器加载)

通过java.lang.ClassLoader的自定义加载器加载class(由CustomClassLoader加载器加载)。

注释1:JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和一些语言的通信(主假若C&C++)。从Java1.1结束了了,JNI标准成为java平台的一帕累托图,它允许Java代码和一些语言写的代码进行交互。JNI一结束了了是为了本地已编译语言,尤其是C和C++而设计的,但会 它无须妨碍你使用一些编程语言,假若调用约定受支持就能那末了。使用java与本地已编译的代码交互,通常会丧失平台可移植性。但会 ,一些请况下从前做是能那末接受的,甚至是那末的。例如,使用一些旧的库,与硬件、操作系统进行交互,但会 为了提高应用应用程序的性能。JNI标准相当于要保证本地代码能工作在任何Java 虚拟机环境。

                         ↓

                         ↓

preparing(为类分配内存,选折 类的属性、最好的依据以及数据形状)

                         ↓

BootStrapClassLoader(最顶层加载器)

尝试加载类的顺序为:

                            ↓

每有有十个 类加载器就有同有有十个 最终的父类BootStrapClassLoader,在类加载器检查类是与否已地处在加载器的类库中时,类加载器的执行顺序为:

resolving(将该类常量池中的符号引用改为直接引用)

CustomClassLoader(用户自定义的类加载器)

java堆

最好的依据区域

运行常量池

Java栈:java栈是每个应用应用程序单独拥有的,应用应用程序启动时创建,java栈中存放着一系列的栈帧,JVM那末进行压入(push)和弹出(Pop)栈帧这四种 操作,每调用有有十个 最好的依据JVM就向Java栈中压入有有十个 栈帧,最好的依据结束了了返回时弹出栈帧,但会 最好的依据执行时出现异常能那末调用printStackTrace最好的依据查看栈的请况。

PC计数器:每个应用应用程序就有有有十个 PC计数器,当应用应用程序启动时PC计数器被创建,你这一计数器存放当前正在被执行的字节码指令。

本地最好的依据栈:应用应用程序通过JNI(注释1)调用本地代码,就根据本地最好的依据语言类型建立相同的栈。

Java堆:Java堆中存放的是应用应用程序创建的对象但会 实例,你这一区域对JVM的性能影响很大,垃圾回收机制出理 正是指的你这一块区域。

最好的依据区域:最好的依据区域是JVM中所有应用应用程序共享的,当启动有有十个 JVM实例时最好的依据区域被创建用来存放常量池、有关域和最好的依据的信息,静态变量、类和最好的依据的字节码。

运行常量池:存放类和接口的常量除此之外还存放最好的依据和域所有的引用,当有有十个 最好的依据或域被引用时JVM就通过运行常量池中的哪几个引用来查找它们的实际地址。

initialing(初始化类的局部变量,为静态域赋值,同時 执行静态初始化块)

                         ↓

AppClassLoader(系统类加载器)

借鉴:http://blog.csdn.net/bingduanlbd/article/details/8363734

在加载器执行的过程中但会 CustomClassLoader加载器在当时人的库中找那末对应的类文件,就会委托给AppClassLoader继续查找,同理但会 AppClassLoader在当时人的库中也找那末对应的类文件就会继续委托它的上一层EcxtensionClassLoader类加载器去查找,以此类推最终但会 BootStrapClassLoader加载器也找那末对应的类文件,就会尝试去加载你这一类。

loading(加载类)

                         ↓

verifying(验证java以及JVM规范)

                         ↓

                            ↓

                            ↓

EcxtensionClassLoader(扩展类加载器)

1.JVM类加载器原理

JVM的工作流程是.java文件通过javac编译成.class文件,但会 利用类加载器将字节码文件加载到内存中,但会 通过解释器来编译成机器代码,但会 执行。