Java:手工触发FullGC及堆占用过高常用分析方法

目录

一、手工触发FullGC方式

1、通过代码

2、通过工具

二、堆占用过高常用分析方法

1、查看堆占用情况

2、手工触发FullGC

3、查看对象占用堆的情况

4、分析可疑对象


使用如下命令查看java进程中内存的使用情况

jstat -gcutil 5000

Java:手工触发FullGC及堆占用过高常用分析方法_第1张图片

发现运行中的java进程堆内存占用一直过高,有可能是堆中有大量无用对象没有释放,可以先触发一次FullGC,查看一下结果。

一、手工触发FullGC方式

触发FullGC可以通过代码,也可以通过工具,下面简单介绍一下主要的方式

1、通过代码

#1

System.gc();

#2

Runtime.getRuntime().gc();

2、通过工具

#1  jmap

jmap -histo:live

此命令会先执行一次FullGC,然后把存活类的对象的数量和占用的空间,按从大到小的顺序排列出来。

#2  jcmd

jcmd GC.run

 #3  使用JConsole或 Java Mission Control

 这2个工具实际上也是执行的jcmdGC.run命令。

通过代码触发的方式需要写代码,用起来不方便,推荐使用工具的方式。

二、堆占用过高常用分析方法

总结一下,对于堆占用过高的问题,最简单的处理步骤如下:

1、查看堆占用情况

先通过如下命令查看java进程的堆占用情况

jstat -gcutil 5000

2、手工触发FullGC

通过如下命令手工触发FullGC,主要是将无用的对象都回收掉,将占用的空间释放出来

jcmd GC.run

3、查看对象占用堆的情况

若堆占用还是较高,使用如下命令查看是哪些类的对象占用堆较高

jmap -histo:live

4、分析可疑对象

分析上述命令导出的日志文件,找出占用内存空间较多的类的对象,结合代码进行分析。

你可能感兴趣的:(Java,java,JVM)