2019-07-11

垃圾回收


-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收集器加入了整理

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 16,119评论 3 83
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 1,858评论 0 7
  • Java和C++之间有一堵由内存动态分配和垃圾收集技术所围成的“高墙”,墙外面的人想进来,墙里面的人想出来。 对象...
    胡二囧阅读 1,345评论 0 4
  • 内存溢出和内存泄漏的区别 内存溢出:out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,...
    Aimerwhy阅读 817评论 0 1
  • 《深入理解Java虚拟机》笔记_第一遍 先取看完这本书(JVM)后必须掌握的部分。 第一部分 走近 Java 从传...
    xiaogmail阅读 5,523评论 1 34

友情链接更多精彩内容