我正在运行一个最大堆大小为-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程序占用最大堆内存时,应该是预期的行为。
答案 0 :(得分:0)
当您尝试new
某个对象时,它将返回OutOfMemoryError
个异常。如果你在try / catch语句中有这个代码,那么程序可以优雅地退出并告诉你发生这种情况的原因/原因。否则,您为new
指定的变量将为null
并且会导致您的计划崩溃。