首页 > 其他 > 详细

jvm 中的 ”永生代“

时间:2015-12-20 14:29:48      阅读:251      评论:0      收藏:0      [点我收藏+]

“方法区” 主要存储的信息包括:常量信息,类信息,方法信息,而且是全局共享的(多线程共享);

 

 

jvm 有多种实现方式(不同的厂商); 并不是所有的jvm 都有永生代的概念;

通常情况下, 很多人把 “方法区” 和“永生代”  对等;  换句话说,是利用“永生代”

去实现“方法区”, 这样可能导致OOM (因为“永生代”的大小是可以通过-XX:PermSize  -XX:MaxPermSize)

设置的; 但是在J9 和JRockit jvm中,方法区使用的内存上限是4G(32位系统可表示的最大范围),不

会存在该问题。

 

如果利用“永生代”实现“方法区”的垃圾收集, 主要是收集常量池和对类型进行卸载; 通常情况下,这个区域的

收集效率比较低。

一: 常量的回收比较容易

二: 类信息的回收需要满足的条件:

     1 . 该类所有的实例已经被回收,JVM中没有任何类的实例;

     2.  加载该类的ClassLoader被回收;

     3.  该类对应的java.lang.class没有地方引用

 

Note: 可以使用-verbose:class以及-XX:TraceClassLoading和-XX:TraceClassUnLoading来查看类的加载和卸载情况。

 

 

参考:

深入理解jvm

 

jvm 中的 ”永生代“

原文:http://www.cnblogs.com/simk/p/5060701.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!