eclipse打印gc日志

1、在eclipse根目录下的eclipse.ini配置文件中添加以下参数:
-verbose:gc (开启打印垃圾回收日志)
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义)
-XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式)
-XX:+PrintGCDetails (打印垃圾回收详情)
添加完以上参数后当启动Eclipse后就能在Eclipse根目录看到一个eclipse_gc.log的gc日志文件
2、设置eclipse初始堆、非堆内存大小以及年轻代
-Xms50m –Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m
3、添加JVM监控参数
-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=6688 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false

指令:
xmn 设置新生代的大小
xx:NewRatio:新生代与老年代的比值。假如值为4 表示新生代:老年代=1:4,即新生代占堆的1/5.
xx:survivorRadio:设置两个survivor区与eden的比值。假如值为8,即两个survivorRadio:eden=2:8.
即一个survivorRadio(幸存代,有两个from,to)占年轻代的十分之一
-Xms256m -Xmx2048m
初始256m,最大占用2048M

survivorRadio小会降低gc次数,提高性能。
官方推荐:新生代占堆3/8,幸存代占新生代1/10

-XX:+HeapDumpOnOutOfMemoryError
OOM(报错,out of memory)时导出堆到文件
-XX:+HeapDumpPath
导出OOM的路径
-Xmx20m -Xms5m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDum

-XX:PermSize -XX:MaxPermSize
设置永久区的初始空间和最大空间

JVM的方法区,也被称为永久代。在这里都是放着一些被虚拟机加载的类信息,静态变量,常量等数据。这个区中的东西比老年代和新生代更不容易回收

-Xss
通常只有几百K
决定了函数调用的深度
每个线程都有独立的栈空间
局部变量、参数 分配在栈上

### 检查GC日志 首先,启用并检查垃圾收集日志是诊断频繁Full GC问题的第一步。通过分析这些日志,可以了解GC的频率、持续时间和回收效率等信息。可以通过JVM启动参数如`-Xlog:gc*:time`来开启详细的GC日志记录[^1]。 ### 使用性能分析工具 利用专业的性能分析工具,比如VisualVM、JProfiler或YourKit,可以帮助识别内存使用模式和潜在的内存泄漏点。这些工具能够提供关于堆内存分配、对象创建热点以及线程行为的深入见解。 ### 分析堆转储文件 当发现存在内存泄漏时,生成堆转储(heap dump)文件进行离线分析是非常有用的。使用Eclipse MAT (Memory Analyzer) 或者其他类似的工具,可以找出持有大量内存的对象集合及其引用链,从而定位到具体的代码位置[^1]。 ### 调整JVM参数 根据应用的实际运行情况调整JVM参数也是优化的一部分。适当增加堆大小可能有助于缓解因内存不足导致的频繁Full GC;同时,选择合适的垃圾收集器对于提高应用程序的整体性能也至关重要[^1]。 ### 优化代码逻辑 确保程序中没有不必要的对象保持存活状态,避免出现内存泄漏。例如,在使用缓存时应设置合理的过期策略;关闭不再需要的资源句柄;及时释放大对象占用的空间等。此外,对于多线程环境下共享的数据结构要特别注意同步问题,防止产生意外的长生命周期对象[^3]。 ### 示例:监控GC活动 下面是一个简单的示例,展示如何通过Java管理扩展(JMX)来获取有关垃圾收集的信息: ```java import java.lang.management.GarbageCollectorMXBean; import java.util.List; public class GCMonitor { public static void main(String[] args) throws InterruptedException { List<GarbageCollectorMXBean> gcBeans = java.lang.management.ManagementFactory.getGarbageCollectorMXBeans(); while (true) { for (GarbageCollectorMXBean bean : gcBeans) { System.out.println("Name: " + bean.getName()); System.out.println("Collection count: " + bean.getCollectionCount()); System.out.println("Collection time: " + bean.getCollectionTime() + " ms"); } Thread.sleep(5000); // 每隔5秒输出一次统计数据 } } } ``` 此程序将持续打印出各个垃圾收集器的相关统计信息,便于观察其运作状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值