jvm gc log

1 gc.log分析

http://crazier9527.iteye.com/blog/832315

http://coffeehc.iteye.com/blog/1066922

http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

http://hi.baidu.com/sdausea/blog/item/c599ef13fcd3a7dbf6039e12.html

171.044(系统运行的时间3分多钟): [GC (普通gc)171.044: [DefNew:已分配空间从35072K->4352K (39424K新生代可用空间), 0.0421702 secs(回收耗时)]堆内存已分配空间从62774K->36785K(堆内存可用空间126848K), 0.0422766 secs] [Times:用户操作耗时user=0.05 sys=0.00系统耗时, real=0.05 secs总耗时]

178.743: [Full GC (System) (全面gc耗时长)178.743: [Tenured年老代: 32042K->34338K(87424K), 0.5141614 secs] 49784K->34338K(126848K), [Perm持久代: 51906K->51906K(51968K)], 0.5143115 secs] [Times: user=0.51 sys=0.00, real=0.52 secs]

其中新生代+年老代的可用内存=堆可用内存总量(也就是jvm启动时的-Xms128m)

放翁的GC分析实例

http://blog.youkuaiyun.com/cenwenchu79/article/details/3125326

http://blog.youkuaiyun.com/cenwenchu79/article/details/3117534

JVM的垃圾回收机制是Java语言的一个核心特性,它负责自动管理程序运行时分配的内存[^1]。通过垃圾回收,JVM能够检测并释放不再使用的对象,从而避免内存泄漏和资源浪费[^2]。 ### 垃圾回收的基本概念 在Java中,垃圾回收主要关注的是堆内存中的对象。当一个对象不再被任何引用变量所指向时,这个对象就被认为是可回收的。JVM使用了多种算法和技术来确定哪些对象是可以安全地回收的,包括标记-清除、复制、标记-整理等[^4]。 #### 标记-清除算法 标记-清除算法是最基础的一种垃圾收集算法。它分为两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。这种方法简单有效,但是存在效率问题以及内存碎片问题[^1]。 ```java // 示例代码 - 创建一些临时对象 public class GCDemo { public static void main(String[] args) { for (int i = 0; i < 10000; i++) { Object obj = new Object(); // 模拟创建大量短生命周期对象 } } } ``` #### 复制算法 为了解决标记-清除算法的内存碎片问题,复制算法将可用内存按容量划分为大小相等的两块,每次只使用其中一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况了[^2]。 #### 标记-整理算法 标记-整理算法与标记-清除算法类似,但不同之处在于,在完成标记之后,存活的对象会被移动到内存的一端,然后直接清理掉边界以外的内存。这有助于减少内存碎片,并且提高了内存利用率[^4]。 ### JVM垃圾回收器 JVM提供了几种不同的垃圾回收器,每种都有其特点和适用场景: - **Serial Collector**:单线程工作,适用于小型应用。 - **Parallel Scavenge**:多线程工作,适合于数据量大、多核处理器的应用。 - **CMS (Concurrent Mark Sweep)**:以最短的停顿时间为目标的收集器,适用于重视响应速度的服务。 - **G1 (Garbage First)**:面向服务端应用的新一代垃圾收集器,可以更高效地利用大内存。 选择合适的垃圾收集器对于优化应用程序性能至关重要。例如,如果您的应用对延迟敏感,则可能倾向于使用CMS或者最新的ZGC/Zoncolic GC;而对于吞吐量要求较高的应用,则可以选择Parallel Scavenge[^1]。 ### 调优方法 为了提升Java应用的性能和稳定性,可以通过以下方式进行调优: - **调整堆大小**:合理设置初始堆大小(-Xms)和最大堆大小(-Xmx),避免频繁的Full GC。 - **选择适当的垃圾收集器**:根据应用的特点选择最适合的垃圾收集器。 - **分析GC日志**:通过开启GC日志记录(-XX:+PrintGCDetails -XX:+PrintGCDateStamps > file.log),可以帮助识别潜在的问题区域。 - **优化代码**:减少不必要的对象创建,及时释放不再使用的资源,利用缓存机制等。 通过对JVM垃圾回收机制的理解及相应的调优实践,开发者可以显著提高Java应用的性能表现和系统的整体稳定性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值