如果我的独立java进程将消耗所有堆内存会发生什么?

时间:2015-01-15 19:20:56

标签: java garbage-collection heap-memory

我正在运行一个最大堆大小为-Xmx1024m的java程序,我的java程序不断创建新对象。

我可以通过命令查看到目前为止使用的堆: -

jmap -histo:live 89038 |头

 num     #instances         #bytes  class name
----------------------------------------------
   1:      34001134      816027216  java.lang.String
   2:      17000000      408000000  OOMError$Person
   3:           327       83085304  [Ljava.lang.Object;
   4:          6307         813232  <methodKlass>
   5:          6307         714344  <constMethodKlass>
   6:           428         498840  <constantPoolKlass>
   7:           398         313088  <constantPoolCacheKlass>

总字节数已超过最大堆大小。我的java应用程序应该已停止。 一个 甚至Young GC和Full GC都试图运行,但即使它们也无法删除对象,因为我保留了引用。我的应用程序应该抛出一些错误并且应该失败,但它仍然在运行,不知道怎么做?

当java程序占用最大堆内存时,应该是预期的行为。

1 个答案:

答案 0 :(得分:0)

当您尝试new某个对象时,它将返回OutOfMemoryError个异常。如果你在try / catch语句中有这个代码,那么程序可以优雅地退出并告诉你发生这种情况的原因/原因。否则,您为new指定的变量将为null并且会导致您的计划崩溃。