首页 > 其他分享 >JVM垃圾收集

JVM垃圾收集

时间:2023-07-15 15:22:30浏览次数:24  
标签:Eden 收集 对象 Survivor GC 垃圾 JVM Minor

默认垃圾收集器

JDK1.7和JDK1.8默认垃圾收集器都是ParallelScavenge(新生代)+ParallelOld(老年代)
JDK1.9默认垃圾收集器G1

查看命令:java -XX:+PrintCommandLineFlags -version

G1

JDK 1.7推出的垃圾收集器,特点如下:

1 使用多核CPU来缩短Stop-The-World停顿的时间
2 分代收集
3 基于标记-整理算法实现,不产生空间碎片
4 建立了可预测的停顿时间模型:能让使用者明确指定在一个长度为M毫秒的时间片段内,消耗在垃圾收集上的时间不得超过N毫秒。G1把整个Java堆划分为多个大小相等的独立区域(Region),新生代和老年代不再物理隔离,都是一部分Region的集合。G1之所以能建立可预测的停顿时间模型,是因为它可以有计划地避免在整个Java堆中进行全区域的垃圾收集。

触发GC

GC有两种类型:Minor GC和Full GC。
Minor GC:当生成新对象,并且在Eden区申请空间失败时,会触发Minor GC,把存活对象复制到From Survivor区或者To Survivor区。因为Java对象大多具备朝生夕灭的特性,所以Minor GC会频繁进行。
Full GC:对整个堆进行整理,伴随至少一次的Minor GC,比Minor GC慢10倍以上。
可能导致Full GC的原因
1 老年代(Tenured)被填满
2 System.gc( )被显示调用

内存分配与回收策略

对象优先在Eden区中分配

一般对象在新生代Eden区中分配。当Eden区没有足够空间分配时,JVM发起一次Minor GC。把存活对象复制到From Surivor区。

Eden区清理后可以存放新的对象。当Eden区再次被用完,触发MinorGC,将Eden区与From Surivor区存活对象复制到To Surivor区。

下次MinorGC时,将Eden区与To Surivor区中存活对象复制到From Surivor区。

大对象直接进入老年代

大对象指需要大量连续内存空间的Java对象,例如很长的字符串和大数组。

长期存活的对象将进入老年代

JVM给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden区分配并经过第一次MinorGC后仍然存活,且能被Survivor区容纳,则将该对象移动到Survivor区,对象年龄设为1。该对象在Survivor区每熬过一次MinorGC,年龄增加1岁,当年龄增加到一定程度(默认为15岁),晋升到老年代。

标签:Eden,收集,对象,Survivor,GC,垃圾,JVM,Minor
From: https://www.cnblogs.com/WJQ2017/p/17556178.html

相关文章

  • JVM系统优化实践(18):GC生产环境案例(一)
    生产环境中,最常见的一种案例就是OOM,也叫「内存溢出」,它表示JVM已经无法支撑业务系统的运行。而很多工程师都没有类似处理线上系统故障的经验,尤其是这种突发的故障。那么:1、为什么会OOM?(Why)2、发生什么样的OOM?(What)3、那个系统发生的OOM?(Who/Where)4、什么时候发生的OOM?(When)5、怎么排查......
  • compattelrunner.exe 进程会定期运行,扫描系统以收集应用程序、硬件和设备的兼容性数据
    compattelrunner.exe是Windows容错报告工具(WindowsCompatibilityTelemetry)Windows容错报告工具是Microsoft开发的一项功能,旨在帮助改进Windows的稳定性和兼容性。而compattelrunner.exe是容错报告工具的一个组成部分,它负责收集系统的兼容性数据以及硬件和驱动程序信......
  • devicecensus.exe 是 Windows 操作系统中的一个进程,它与设备普查相关。设备普查是 Win
    devicecensus.exe是Windows操作系统中的一个进程,它与设备普查相关。设备普查是Windows操作系统收集和报告硬件和软件信息的一项功能。具体来说,devicecensus.exe是Windows的设备普查服务的主执行文件。它负责定期运行设备普查任务,收集系统的硬件配置、驱动程序信息、应用......
  • jvm注意事项 - 指令集出现this关键字
    首先如果在虚拟机中出现了this关键字,那么在栈帧中调用了非static方法。大家都知道,非static方法是需要一个对象的没这个对象的地址就是这个this,如果局部变量表中就存在这个this了,那么他就一定是个非static方法。如果this存在,则操作的指令集的顺序的下标就为0,其他变量的顺序就从1......
  • Java虚拟机(JVM):第五幕:自动内存管理 - HotSpot算法细节以及低延迟垃圾收集器
    一、HotSpot算法细节1、根节点枚举:所有的收集器在根节点枚举的时候,必须暂停用户线程,同时要保证一致性的快照中得以进行。一致性:整个枚举期间执行子系统看起来就像是冻结在某一个时间点上,不会出现分析过程中,根节点的对象应用关系还在不断变化的情况。2、安全点:用户程序执......
  • JVM垃圾回收
    内存分配和回收原则对象优先在Eden区分配当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC。GC期间虚拟机又发现对象无法存入Survivor空间,所以只好通过分配担保机制把新生代的对象提前转移到老年代中去,老年代上的空间足够存放对象,所以不会出现FullG......
  • JVM(八)对象的实例化内存布局与访问定位
    JVM(八)对象的实例化内存布局与访问定位1对象创建的方式new变形1:Class的newInstance(),即反射Class的newInstance反射的使用较为苛刻,要求只能调用空参的构造器,而且权限必须是public这种方式再jdk9中被标记为过时了Constructor的newInstance(),也属于是反射可以调......
  • JVM(七)方法区
    JVM(七)方法区1方法区方法区和Java堆一样,是各个线程共享的内存区域,用于存储编译后的字节码中的类的机构信息,如运行时常量池、属性方法数据以及方法、构造器的字节码方法区在JVM启动的时候被创建,并且它的实际物理内存空间和Java堆区一样都是可以不连续的;大小可以选择固定大小或......
  • JVM(十)StringTable
    JVM(十)StringTable1String的基本特性String即字符串,通过一对引号""表示,String创建的方式主要有Strings="abc";//字面量的方式Strings=newString("abc");//类创建new方式String声明为final,不可以被继承String实现了Serializable接口,表示字符串是支持序列......
  • JVM(九)执行引擎
    JVM(九)执行引擎1执行引擎概述执行引擎是Java虚拟机核心的组成部分之一虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,区别在于物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎是由软件自主实现的,因此可以不受物理条件......