垃圾收集算法思路

垃圾收集算法思路:把对象按照寿命长短分组,分为年轻代和年老代,新创建对象被分在年轻代,如果对象经过几次回收后仍然存活,那么再把这个对象分到年老代。

年老代的收集频度不像年轻代的频繁,这样就减少了每次垃圾收集时所扫描的对象数量,从而提高垃圾回收效率

Young : 分为eden区和两个Survivor区,新建对象都在eden区,当eden区满后触发minor GC ,将Eden区仍然存活的对象复制到其中一个survivor区,再把另一     个survivor区中的存活对象复制到这个survivor区,以保证始终有一个survivor区是空的。

Old:一种存放的是Young区的survivor满后触发minor GC后仍存活的对象,另一种survivor区中对象足够老,也直接存放到old区,如果old区满了,将会触发          Full GC回收整个堆内存

Perm:存放的主要是类class对象,如果一个类被频繁加载,也可能导致perm区满,perm区的垃圾回收也是由Full GC触发

注:-Xmx:表示堆的最大大小 ,Xms:表示初始化大小

jstat  -gcutil [pid][intervel][count] :例:jstat -gcutil 1286 500 100

S0:表示Head上的Survivor space 0 区已使用空间百分比

S1:表示Head上的Survivor space 1 区已使用空间百分比

E:表示Head上的Eden space  区已使用空间百分比

O:表示Head上的Old space  区已使用空间百分比

P:表示Perm space  区已使用空间百分比

YGC:表示从应用程序启动到采样时发生Young GC的次数

YGCT:表示从应用程序启动到采样时发生Young GC所用的时间(秒)

FGC:表示从应用程序启动到采样时发生Full GC的次数

FGCT:表示从应用程序启动到采样时发生Full GC所用的时间(秒)

GCT:表示从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

时间: 2024-10-13 00:38:08

垃圾收集算法思路的相关文章

对象是否有被引用判断及垃圾收集算法

1.引用计数算法 给对象中添加一个计数器,每当一个地方引用它时,计数器值就加1:当引用失效时就减1.如果两个对象存在相互的引用,尽管这两个引用已经不再被使用,但还是不能被清除.通过一些实验可得SUN公司的JVM没有采用这种算法. 2.根搜索算法 该算法的基本思路是通过一系列的名为"GCRoots" 的对象作为起点,从这些起点开始向下搜索.搜索所通过的路径(引用链:Reference chain),当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的.在JAVA里可用

垃圾收集算法

[根搜索算法] 这个算法的基本思路是:对任何“活”的对象,一定能最终追溯到其存活在堆栈或静态存储区之中的引用. 可以作为根的对象 - 虚拟机栈(栈桢中的本地变量表)中的引用的对象. - 方法区中的类静态属性引用的对象. - 方法区中的常量引用的对象. - 本地方法栈中JNI的引用的对象. 方法区是jvm的一块内存区域,用来存放类相关的信息.很明显,java中单例模式创建的对象被自己类中的静态属性所引用,符合第二条,因此,单例对象不会被jvm垃圾收集. classSingleton {      

JVM(五)-垃圾收集算法和垃圾收集器

一.垃圾收集算法 (1)标记-清除算法 "标记-清除"(Mark-Sweep)算法,如它的名字一样,算法分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象.之所以说它是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其缺点进行改进而得到的. 它的主要缺点有两个:一个是效率问题,标记和清除过程的效率都不高:另外一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致,

深入理解Java虚拟机笔记---垃圾收集算法

当对象判定为"已死"状态,虚拟就要采取一定的手段将这些对象从内存中移除,即回收垃圾,回收过程有采用一定的算法.如下是一些主要的垃圾收集算法: 1.标记-清除算法 该算法是最基础的算法,分为"标记"和"清除"两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象.之所有说它是最基础的算法是因为后续的收集算法都是基于这种思路并对其缺点进行改进得到的.它的缺点主要有两个:一个是效率问题,标记和清除过程效率都不高:另外一个是空间问

垃圾收集与几种常用的垃圾收集算法

前言: 首先思考垃圾收集(Garbage Collection,GC)需要完成的三件事情 1)哪些内存需要回收? 2)什么时候回收? 3)如何回收? 再上一个博客中提到了Java内存运行时区域的各个部分,其中程序计数器.虚拟机栈.本地方法栈3个区域会随着线程而生,随线程而灭:栈中的栈帧随着方法的进行有条不紊地执行着出栈和入栈操作.每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知得,因此这几个区域的内存分配回收都具备确定性,在这几个区域就不需要过多的考虑回收的问题,因为在方法结束或线程结束

【004】【JVM——垃圾收集算法】

 垃圾收集算法 垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,介绍几种垃圾收集算法的思想及其发展过程. 标记-清除算法 垃圾收集分为"标记"和"清除"两个阶段:首先标记所有需要回收的对象,在标记完成后统一回收所有被标记的对象.说它是最基础的收集算法,其他收集算法都是基于这种思路并对其不足进行改进而得到的.它的主要不足有两个: 效率问题,标记和消除两个过程的效率都不高: 空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎

深入理解JVM(二)--垃圾收集算法

一. 概述 说起垃圾收集(Garbage Collection, GC), 大部分人都把这项技术当做Java语言的伴随生产物. 事实上, GC的历史远远比Java久远, 1960年 诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言. 当Lisp还在胚胎时期时,人们就在思考GC需要完成的三件事情: 哪些内存需要回收? 什么时候回收? 如何回收? 现在内存的动态分配与内存回收技术已经相当成熟, 那为什么我们还要去了解GC和内存分配呢? 答案很简单: 当需要排查各种内存溢出, 内

【JVM】JVM垃圾收集器、垃圾收集算法、无用对象

Java 常见的垃圾收集器有哪些 实际上,垃圾收集器(GC,Garbage Collector)是和具体 JVM 实现紧密相关的,不同厂商(IBM.Oracle),不同版本的JVM,提供的选择也不同.接下来,我来谈谈最主流的 Oracle JDK. Serial GC 它是最古老的垃圾收集器,"Serial"体现在其收集工作是单线程的,并且在进 行垃圾收集过程中,会进入臭名昭著的"Stop-The-World"状态.当然,其单线程设计也意味着精简的 GC 实现,无需

java垃圾回收Garbage Collection(一、垃圾收集算法)

垃圾收集算法 标记-清除算法 最基础的算法是标记-清除(Mark-Sweep)算法.分为标记和清除两个阶段:首先标记出所有需要回收的对象,标记完成后统一回收所有被标记的对象.之所以说是最基础的收集算法,是因为后续的收集算法都是基于这种思路并对其不足进行改进而得到的.它主要有两个不足之处:一个是效率标记和清除效率都不高:另一个是空间问题标记清除后产生大量的不连续内存碎片,空间碎片过多可能会导致以后程序运行过程中需要分配较大的对象时无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作.标记清除算