工作两年多了,杂七杂八的学了很多东西,从来没有系统的总结过,好多东西老不用就会忘掉,从今天开始在这里做一个沉淀,这算是第一篇吧.关于JAVA GC分代的,别的网站贴过来的,分析的比较容易理解.
来自IBM的一组统计数据:
98%的java对象,在创建之后不久就变成了非活动对象;只有2%的对象,会在长时间一直处于活动状态。
如果能对这两种对象区分对象,那么会提交GC的效率。在sun jdk gc中(具体的说,是在jdk1.4之后的版本),提出了不同生命周期的GC策略。
young generation:
生命周期很短的对象,归为young generation。由于生命周期很短,这部分对象在gc的时候,很大部分的对象已经成为非活动对象。因此针对young generation的对象,采用copy算法,只需要将少量的存活下来的对象copy到to space。存活的对象数量越少,那么copy算法的效率越高。
young generation的gc称为minor gc。经过数次minor gc,依旧存活的对象,将被移出young generation,移到tenured generation
young generation分为:
eden:每当对象创建的时候,总是被分配在这个区域
survivor1:copy算法中的from space
survivor2:copy算法中的to sapce (备注:其中survivor1和survivor2的身份在每次minor gc后被互换)
minor gc的时候,会把eden+survivor1(2)的对象copy到survivor2(1)去。
tenured generation:
生命周期较常的对象,归入到tenured generation。一般是经过多次minor gc,还 依旧存活的对象,将移入到tenured generation。(当然,在minor gc中如果存活的对象的超过survivor的容量,放不下的对象会直接移入到tenured generation)
tenured generation的gc称为major gc,就是通常说的full gc。
采用compactiion算法。由于tenured generaion区域比较大,而且通常对象生命周期都比较长,compaction需要一定时间。所以这部分的gc时间比较长。
minor gc可能引发full gc。当eden+from space的空间大于tenured generation区的剩余空间时,会引发full gc。这是悲观算法,要确保eden+from space的对象如果都存活,必须有足够的tenured generation空间存放这些对象。
Permanet Generation:
该区域比较稳定,主要用于存放classloader信息,比如类信息和method信息。
对于spring hibernate这些需要动态类型支持的框架,这个区域需要足够的空间。
这部分内容相对比较理论,可以结合jstat,jmap等命令(当然也可以使用jconsole,jprofile,gciewer等工具),观察jdk gc的情
分享到:
相关推荐
Java垃圾收集(Garbage Collection, 简称GC)是Java编程中的一项重要特性,它自动管理内存,释放不再使用的对象,避免了程序员手动管理内存可能导致的内存泄露问题。本篇将深入探讨Java中的GC过程。 一、Java内存...
本文将深入探讨Java GC的工作原理,包括GC的基本概念、增量式GC的特点及其应用、分代收集的概念与实践等方面。 #### 二、GC基本原理 **2.1 GC定义及必要性** GC是一种自动内存管理机制,用于追踪和清理不再使用的...
### Java GC垃圾回收调优指南 #### 概述 在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解...
Java垃圾收集(GC)专题针对的是Java编程语言中内存管理机制的重要组成部分。Java自1996年推出以来,其最大的改进之一就是引入了受管内存。在Java之前,C和C++语言中的内存泄漏问题十分常见,这导致开发稳定和安全的...
- **GC策略**:包括复制算法、标记-清除算法、标记-整理算法、分代收集策略等,根据JVM版本和配置不同而有所不同。 - **GC Roots**:GC开始回收的起点,包括虚拟机栈中引用的对象、方法区中静态字段引用的对象等。...
同时,尽量减少长生命周期对象对年轻代的占用,以减少Full GC的发生。 6. **使用弱引用和软引用**:弱引用和软引用可以用来创建非持久性的对象引用,允许GC在内存压力较大时提前回收这些对象,从而避免不必要的内存...
2. **图表展示**:通过折线图、柱状图等形式,清晰展示不同GC代(如新生代、老年代)的内存使用情况,以及GC活动的频率和耗时。 3. **统计信息**:提供详细的统计信息,如平均GC时间、总GC次数、暂停时间等,帮助...
Java GC主要包括新生代、老年代和永久代(Java 8后变为元空间)的管理。 1. 新生代GC(Minor GC) 主要针对新生代的对象,使用复制算法,分为Eden区和两个Survivor区。当Eden区满时,会触发Minor GC,存活下来的...
【Java GC机制详解】 Java垃圾回收(Garbage Collection, GC)是Java虚拟机(JVM)的核心特性之一,它负责自动管理程序运行时的内存,有效地避免了内存泄露和溢出的问题。Java GC机制主要涉及以下几个关键方面: 1...
GC机制的实现基于分代收集算法,JVM将内存分为三个部分:年轻代(Young Generation)、老年代(Old Generation)和永久代(Perm Generation)。年轻代是对象创造的地方,对象在这里被创建、存活和死亡。老年代是对象...
Java虚拟机的垃圾回收机制分为多种不同的算法,比如标记-清除、复制、标记-整理、分代收集等。 JVM的调优是一个复杂的过程,需要深入了解JVM的工作原理和垃圾回收机制。调优的目的是提高应用程序的性能和稳定性。...
- **分代收集**:根据对象年龄分代,不同代使用不同策略。 ### 4. 对象的创建 - **创建过程**:包括分配内存、初始化零值、构造函数执行等步骤。 - **内存布局**:对象在堆内存中的分布和结构。 - **对象的访问定位...
JVM 和 GC 相关参数、问题解决过程、排除应用程序的内存使用问题、排除 Cache 内容过多的问题、调整 GC 时间点、调整对象在年轻代内存中驻留的时间、CMS Remark之前强制进行年轻代的 GC 等几个方面详细介绍Java服务...
在Java中,堆内存是GC的主要工作区域,它分为新生代、老年代和永久代(Java 8以后改为元空间)。GC调优的第一步通常是调整堆的大小。堆大小的设定直接影响GC的频率和性能。如果堆设置得过小,可能导致频繁的垃圾收集...
Java 应用程序的JVM(Java虚拟机)性能优化是一个关键领域,而垃圾收集(GC)作为内存管理的一部分,其频率对系统性能有直接影响。GC的频率反映了系统的内存使用情况和健康状况。通常,GC分为两种主要类型:Scavenge...
2. gc.bat:这个名字通常与Java的垃圾回收(Garbage Collection)有关,可能是用于手动触发垃圾回收的脚本,以确保内存的有效管理。 3. mgr.class、scache.class、ui.class、garbage.class、request.class、cache...
JAVA GC (Garbage Collection) 是Java编程语言中的一个重要特性,它自动管理程序的内存,确保不再使用的对象能够被及时回收,以防止内存泄漏。GC主要针对的是Java堆内存中的对象,这里的对象是由Java栈中的引用指向...
用户可以导入应用程序生成的GC日志文件,工具会解析日志并提供详细的统计信息,如各代内存的使用情况、对象存活率、垃圾回收效率等。这些信息有助于定位可能导致性能下降的问题。 再者,GC插件还提供了内存快照功能...