实战Java虚拟机笔记-第二章(1)

2.1 java虚拟机的基本结构

由于是从头开始打算看书,就是先最基本的先说明一下各个结构的作用(没有多余的话,到时候翻过来几分钟看一下也无妨),后面各章会有最详细的解释。

基本结构:


1.类加载子系统 :

负责加载Class信息,装入内存,使JVM可以实例化或以其它方式使用加载后的类。JVM的类加载子系统支持在运行时的动态加载。

2.方法区:

加载的类信息存放在此,类型信息和类的静态变量都存储在方法区中,还会存放运行时常量池信息。

常量池中存储了如字符串、final变量值、类名和方法名常量。常量池在编译期间就被确定,并保存在已编译的.class文件中。一般分为两类:字面量和应用量。字面量就是字符串、final变量等。

方法区是所有线程共享的,考虑到数据的线程安全。要加载一个类只应该有一个线程去加载,而另一个线程等待。

3.java堆:

java堆在虚拟机启动的时候建立的,他是Java程序最主要的内存工作区域,几乎所有的对象实例都存放于java堆中。

堆空间也是所有线程共享的,不是线程安全的。

4.直接内存:

java的NIO库,允许程序使用直接内存,直接内存是在java堆外的,直接向系统申请的内存空间,因此他不会直接受限于Xmx指定的最大堆大小。但是系统内存是有限的,肯定综合还是受限于系统给的内存的。

直接内存的速度由于java堆。

5.垃圾回收系统:

垃圾回收器可以对方法区,java堆和直接内存进行回收。对于不在使用的垃圾对象。会在后台默默工作,默默查找,标识,并释放垃圾对象。完成自动化管理。

6.java栈:

每个java虚拟机线程都有一个私有的java栈,java栈中存着局部变量,方法参数。同事和java方法的调用,返回密切相关。

7.本地方法栈:

本地方法栈用于本地方法调用,允许直接调用本地方法(通常C编写)

8.PC寄存器:

寄存器是每个线程私有的空间,会为每一个java线程创建。 PC寄存器会指向当前正在被执行的指令。假如当前方法是本地方法,寄存器的值就是undefined。

9.执行引擎:

负责执行虚拟机的字节码。现代虚拟机为了提高执行效率,会使用及时编译技术将方法编译成机器码后再执行。后详解。

还是要好好的看看书,做做笔记,动手写写代码,不能整天忙于业务代码,加油加油。话不多说。

你可能感兴趣的:(实战Java虚拟机笔记-第二章(1))