日期:2014-05-20  浏览次数:20786 次

Java面试问题之四十九
问题:请问当你写的程序出现OutOfMemoryError的时候,你该如何进行排查?使用什么Java命令参数和方法呢?

答:可以尝试使用VM arguments来协助排查,主要分为以下几个步骤:
      (1)预估你的程序使用内存的大小,尽可能估计一个准确的范围且这个范围一定需要比运行你的程序所需的最低内存大1倍(经验值)。
      (2)假定估计消耗内存的值为10M,那么应该使用虚拟机参数-Xms10M(最小值)和-Xmx10M(最大值)[注意:这里设置最大值和最小值相等来避免堆空间的自动扩展]。
      (3)再设定虚拟机参数-XX:+HeapDumpOnOutOfMemoryError来转储当OutOfMemoryError发生时内存空间的所有内容,这些内容保存到一个文件中。
       (4)分析包含内存信息的文件进一步确定哪些对象消耗了过多的内容空间或者是在什么地方造成了内存泄露。