垃圾回收
-XmsJVM启动的时候设置初始堆的大小
-Xmx设置最大堆的大小
-Xmn设置年轻代的大小
-XX:PermSize设置持久代的初始的大小
-XX:MaxPermSize设置持久代的最大值
堆被分成三个代:新生代,老年代,持久代
年轻代:所有创建的新对象都是在年轻代分配堆空间
老年代:老年代用于存储较长生命周期的对象,当年轻代被填满的时候,
随着时间的推移,老年代也会被填满,最终导致老年代也要进行垃圾回收。这个事件叫做大收集。
大收集也是全局暂停事件。通常大收集比较慢
全局暂停事件:所有的小收集都是一个个全局暂停事件。这意味着所有的应用线程都会停止,直到收集操作完成。小回收总会导致全局暂停事件。
持久代:持久代存储了描述应用程序类和方法的元数据。
回收方法:可达性分析算法
方法区中静态属性引用的对象;方法区中常量引用的对象,栈中变量引用的对象。
通过一系列称为“GC Roots”对象作为起点,从这些节点,向下搜索,搜索所走过的路径称为引用链,当一个对象到GCRoots没有任何引用链的时候,证明此对象不可达,也就证明对象没有引用,则会被回收。
java可以作为GCroots对象的有:虚拟机栈中本地变量表引用的对象;本地方法栈中native方法引用的对象;方法区中静态属性引用的对象;方法区中常量引用的对象;
JVM垃圾收集器的种类:
1:X:+UseSerialGC 串行收集器(使用单个的虚拟CPU)
2:X:+UseParallelGC
使用这个命令行参数,就会将年轻代设置为多线程的收集器,老年代使用单线程的收集器。该选项,还会在老年代进行单线程的压缩工作
3:X:+UseParallelOldGC使用该参数,年轻代和老年代都会使用多线程的收集器,同时,也使用多线程的压缩收集器
4::+UseConcMarkSweepGC
如果要使用CMS收集器,使用 -XX:+UseConcMarkSweepGC ,同时,可以设置并发的线程数目 -XX:ParallelCMSThreads=<n> 。
5:X:+UseG1GC
设计的初衷是用于长期取代CMS收集器加入了整理