![]() |
1
1
您正在获得的bug不是Java代码错误,而是JIT编译器中的一个问题。当JIT启动时,它会占用大量的内存作为它正常工作的内存)。此内存来自本机堆。 对于真正有意思的错误,这个错误最终从VM(C++代码前面)发出。 http://www.google.com/codesearch/p?hl=en&sa=N&cd=1&ct=rc#aRIt9pqzOVI/src/share/vm/utilities/vmError.cpp&q=OutOfMemoryError%20Out%20of%20swap%20space&l=258 不幸的是,它不是一个“真实”的记忆错误,它不会按照正常的规则行事,你不能抓住它等等。 本机(JNI/JNA)方法可以直接从操作系统分配内存。NIO直接使用内存、热点编译器,还有其他一些 此内存是应用程序本机堆(由malloc和friends管理的内容)的一部分,您的应用程序可能已用完本机堆,从而导致此情况发生,请查看框中的总体内存、ulimit设置等。JNI/JNA代码也可以在一定程度上发挥作用,如果它们能够耗尽可用内存,则AP应用程序具有用于本机代码的。从NIO中查找DoTimeAdppdBuffisher,因为它们也可以从Java堆中窃取内存。 很有可能,因为您刚刚更新了JIT编译器中的某个bug,gc和jit设置可能会影响这一点,所以请尝试更改jit(从客户端到服务器或从服务器到客户端),以查看是否有任何影响,也可以尝试更改gc策略(但是请记住,您正在更改gc策略t)。o更改它与JIT的交互,而不是修复Java内存问题。 您也可以使用命令行标志djava.compiler=none完全关闭JIT,但是这样会删除任何本机代码生成,这会损害您的性能。 除此之外,如果你把hprof崩溃文件放在某个地方,我可能会给你更多的建议。 |