Java虚拟机:Jvm概念和原理详解以及GC机制的分析( 二 )


(3.永久存储区是一个常驻内存区域,用于存放JDK自身所携带的 Class,Interface 的元数据,
也就是说它存储的是运行环境必须的类信息,被装载进此区域的数据是不会被垃圾回收器回收掉的,关闭 JVM 才会释放此区域所占用的内存 。
11. 出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够 。
原因有二:
(a.Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整 。
(b.代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用) 。
12.双亲委派机制:
JVM在加载类时默认采用的是双亲委派机制 。通俗的讲:
就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,(bootStrap、extclassLoader、Appclassloader三个是父子类加载器)
如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载 。
13. 什么时候会发生Full GC?
(1)调用System.gc()方法的
(2)老年代空间不足 。【老年代空间只有在新生代对象转入及创建大对象、大数组时才会出现不足的现象】
(3)永生区空间不足 。
(4)堆中分配很大的对象 。【例如很长的数组,此种对象会直接进入老年代】
(5)CMS GC时出现promotion failed和concurrent mode failure
14. gc回收的内容:
gc的主要作用是回收堆中的对象 。通过分析一个对象的引用是否存在,如果不存在,就可以被回收了 。
15.gc的具体过程:
这个主要看是用的哪一种回收算法以及用的什么垃圾回收集了 。回收算法主要有:
(1)标记-清除算法
(2)标记-整理算法
(3)复制算法
(4)分代收集算法
16. 常用的垃圾回收器:
(1)Serial收集器【串行收集器】
(2)ParNew收集器【串行收集器的多线程版本】
(3)Parallel Scavenge收集器【PS收集器】
(4)CMS【老年代收集器】
(5)G1收集器
关于垃圾回收器的使用,这里也有一个组合建议共大家参考:

Java虚拟机:Jvm概念和原理详解以及GC机制的分析

文章插图
 




推荐阅读