JVM基本结构
JVM之运行时常量池(Runtime Constant Pool)
基本特性:
- l 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区。
- l class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式,
- l 包括编译期的数值字面量和运行期的方法或者字段引用
ref:class文件结构
JVM之PC寄存器(Program Counter Register)
基本特性:
- l 当前线程执行的字节码的行号指示器。
- l Java虚拟机支持多个线程同时执行,每一个线程都有自己的pc寄存器。
- l 任意时刻,一个线程都只会执行一个方法的代码,称为该线程的当前方法,对于非native方法,保存正在执行的字节码的指令地址,native方法,则为undifine
- l 容量大小至少需要能够存储一个returnAddress类型的数据或者与平台相关的本地指针的值
JVM之方法区(Method Area)
基本特性:
- l 线程共享区域,存储被JVM加载的类信息、常量、静态变量、即时编译器编译的代码等
- l 堆的逻辑部分,不限定方法去内的内存位置和编译代码的管理策略,不限定实现垃圾回收
- l 容量可不定也可动态扩展,不要求物理连续
- l 回收主要针对常量池的回收,和类型的卸载
HotSpot虚拟机方法区:
使用永久代实现方法区。不包含字符串常量池。
JVM之堆(Heap)
基本特性:
- l 虚拟机启动时创建的线程共享的内存区域,所有实例对象和数组对象分配内存的区域
- l GC垃圾手机管理器管理的主要区域,GC堆
- l 容量可以固定,也可以动态扩展,自动收缩 -Xmx最大堆大小 -Xms最小、初始堆大小
- l 所使用的内存不需要保证连续性,即不需要物理上的连续性,只需要逻辑上的连续性。
- l 分配需要的容量超过提供的容量,或者扩展也无法满足的时候,抛出OutOfMemoryError
Java堆根据automatic storage management system自动内存管理系统gc的管理方式进行内存划分。一般采用分代收集算法(新生代(Eden,From Survivor, To Survivor),老年代,永久代)。
JVM之栈(Stacks)
https://www.cnblogs.com/niejunlei/p/5987611.html