注意:
1. 本文讨论均为JDK官方版本, 默认采用的HotSpot虚拟机;
2. 图片为本人绘制, 转载请标明出处;
3.本博均为个人理解, 如有分歧, 欢迎指正和讨论
从JDK1.6到1.8, 运行时内存分配简图分别如下:
在JDK1.7中的HotSpot中,已经把原本放在方法区的字符串常量池移出。
从JDK7开始永久代的移除工作,贮存在永久代的一部分数据已经转移到了Java Heap或者是Native Heap。但永久代仍然存在于JDK7,并没有完全的移除:符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。
随着JDK8的到来:
JVM不再有PermGen。但类的元数据信息(metadata)还在,只不过不再是存储在连续的堆空间上,而是移动到叫做“Metaspace”的本地内存(Native memory)中。
参考:
1. <深入理解JAVA虚拟机-周志明-第二版>
2. https://www.cnblogs.com/dennyzhangdd/p/6770188.html#_label3
3. https://blog.csdn.net/tophawk/article/details/78704074#commentsedit
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_42711325/article/details/86533192