果通过指令的话,一般先调用jps查看到具体的pid,然后调用jstat来查看运行时的内存,以及GC的频率等,然后通过jstack查看线程是有阻塞、死锁、循环等,最后通过jmap生成的堆快照进行分析内存溢出的地方。
使用可视化工具的话:
如果是jConsole,可以通过内存窗口查看堆以及各个部分的内存情况,通过线程窗口可以查看线程是否等待、循环、死锁等情况。
是 同VisualVM可以定位到具体内存溢出的位置。通过VisualVM可以观察堆、新生代、老年代、永久代的情况,同样通过线程查看是否有阻塞、循环、 死锁等情况。如果有内存溢出情况,首先是在监视窗口点击堆快照,生成快照,然后分析堆快照,通过分析堆转储上的线程,定位到具体执行的线程,然后就可以具 体分析线程里面的实例的数量以及大小,同时可以定位到程序中具体那一行代码,通过代码上下文具体是否写错了。