从最开始学习java的时候,老师就讲过,java主要分为堆和栈两个内存区域,随着不断的学习和深入,也对java的内存有了更细致的了解。本文是个人通过以前老师所讲知识、查看各位大牛的博客,总结而来,纯属个人学习总结体会,不喜勿喷。
如上图所示,java内存主要分五个部分:
这里细分主要涉及到垃圾回收机制时,后面有GC的详细介绍;
通过句柄访问的实现方式中,JVM堆中会专门有一块区域用来作为句柄池,存储相关句柄所执行的实例数据地址(包括在堆中地址和在方法区中的地址)。这种实现方法由于用句柄表示地址,因此十分稳定。 2.通过直接指针访问:(图来自于《深入理解Java虚拟机:JVM高级特效与最佳实现》)(一般学习java基础的时候,老师都是讲的这种)
通过直接指针访问的方式中,reference中存储的就是对象在堆中的实际地址,在堆中存储的对象信息中包含了在方法区中的相应类型数据。这种方法最大的优势是速度快,在HotSpot虚拟机中用的就是这种方式。
至此,就对java中内存有了一个详细的了解,对后面的垃圾回收机制和性能优化打下基础。
参考博文: