虚拟机的结构
一共有虚拟机栈,本地方法栈,堆,方法区(永久区),直接内存
一、虚拟机栈:也叫作局部变量表,包含:八种基本数字类型,对象的引用,以及指向一条字节码指令
注意:
1. 对象的应用可能是指向对象,同时也可能指向一个代表对象的句柄或者与此对象相关的位置;
2. 八种基本数据类型,只有double跟long会占据两个slot,且占据的内存空间在编译期间已经完全确定,方法运行期间不会改变局部变量表的大小;
二、堆:各个线程的共享内存区域,唯一目的就是存储对象
三、方法区:各个线程的共享内存区域,用于存储已被加载的类信息,常量,静态变量,即时编译器编译后的代码。
方法区比较难进行垃圾回收,回收的对象是针对常量池以及对类型的卸载。
四、运行时常量池:是方法区的一部分,存放各种编译期产生的字面量跟符号引用,相比较于class文件,常量池的要求没有那么严格,且是可以动态改变的,即不强要求一定要在编译时期才能改变。
五、直接内存:直接内存并不是虚拟机运行时数据区的一部分,所以并不受Java堆大小的限制,在对比NIO中直接内存与堆内存IO的效率的时候,发现,直接内存的读写效率大概在两倍左右,但是创建及销毁的耗费远远超过堆内存。
网友评论