当前位置: 首页 > 网络应用技术

深入了解Java虚拟机(4) - 垃圾收集算法和垃圾收集器

时间:2023-03-06 17:41:57 网络应用技术

  提到Java虚拟机(3)-JVM内存分配和回收利用的对象是否生存的判断。这是垃圾回收算法的简要介绍。

  查看默认垃圾收集算法

  换句话说,当GC回收(判断对象被回收)时,这些对象无需回收。

  在澄清了该物体是否生存之后,Java计划如何判断该对象是否“垂死”?实际上,即使在Canopy Analysis算法的算法中的无人陪伴的对象中,也不是“垂死”。目前,他们只是暂时处于“缓慢移动”阶段,他们必须真正宣布对象的死亡必须至少经过两次。经历分析程度,然后将首次对其进行标记和筛选。虚拟机已调用它,虚拟机认为这两种情况是“无需执行筛选”。

  如果对象被判断为筛选,则将此对象放在称为F-Quesue的队列中,并将通过稍后由虚拟机本身创建的低优先级线程执行。如果对象想要逃脱命运死亡,这是最后的机会。只要对象可以与参考链上的任何对象建立关系,则在标记第二个标记时将其从“即将到来的集合”中删除。如果目前该对象尚未逃脱,则GC将在f-Qualue中标记第二个标记,稍后在F-Quale中标记,第二个标签上的对象基本上将被回收。类加载程序,线程,虚拟机堆栈,静态成员,常数参考,本地方法堆栈的变量等。

  GC回收通常由JVM控制。我们还可以使用system.gc()允许JVM恢复JVM,因为GC期间消耗的资源相对较大,并且不建议手动进行操作。

  so -called吞吐量=运行用户代码时间/(垃圾收集时间+用户代码运行时间)

  平行的Scavenge的老年版,使用多线程和“标记组织” algorithm.您可以在某些情况下使用平行的Scavenge+Parallel Old(Java8默认垃圾收集器),这些场合都集中在吞吐量和CPU敏感性上。

  CMS(并发标记扫除)是获得最短停顿的垃圾收集器,由“ Mark-Clear” algorithM.

  工作过程

  //显示Java Heap的详细信息,打印一堆摘要信息,包括GC算法,HEAP配置信息和每个内存区域的存储区域2.JMAP HEAP PID

  //在堆中显示对象的统计信息,包括每个Java类,对象的数量,内存的大小(单位:字节)和一个完整的限量类名称。印刷虚拟机中的类名将具有a'*'前缀。如果指定了实时子选择

  //打印加载程序信息。-clstats是a-permstat替代方案。在JDK8之前,-permstat用于打印加载程序加载程序混合内存的永久保存区域的永久保存区域的数据将打印其加载的类的大小。此外,还将打印包含的字符串的数量和大小4.JMAP -CLSTATS PID

  //打印对象信息等待结束,待定的对象数量:0指令

  //生成存储存储快照转储文件,并将Java堆保留在HPROF二进制格式中的Java堆为指定的文件名。live sub -ottion是可选的。如果指定了实时子选择,则只有事件的对象是保留在堆中。如果要浏览堆转储,则可以使用JHAT(Java Pile Analysis工具)读取生成的文件6.jmap -dump -dump:format = b,file = headdump.phrof pid pid