奇怪的java.lang.OutOfMemoryError - 进程不会崩溃

时间:2012-12-15 12:13:58

标签: java out-of-memory

我看到一个奇怪的java.lang.OutOfMemoryError错误(下面的部分堆栈跟踪)。问题是java进程不会崩溃。我在日志中看到了这个错误,但是这个过程似乎停止但没有退出。

感谢。

Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:691)
at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:943)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1325)
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:132)
at com.amazonaws.services.s3.transfer.internal.UploadMonitor.<init>(UploadMonitor.java:126)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:384)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:344)
at com.amazonaws.services.s3.transfer.TransferManager.upload(TransferManager.java:272)

2 个答案:

答案 0 :(得分:5)

java.lang.OutOfMemoryError: unable to create new native thread   

这是因为您的应用程序不能再创建本机线程。

  1. 检查您的应用产生的主题数量。这很可能是罪魁祸首 您可以使用线程转储进行分析。

  2. 然后检查您的堆栈大小。 Xss param会给你这个。尝试调整它。

  3. 增加Xmx对您没有帮助。事实上,在32位JVM上,它会加剧这个问题。

    原因为什么你的进程没有停止是因为Uncaught Exceptions只会终止自己的线程,而不是Jan在评论中提到的整个应用程序。

答案 1 :(得分:2)

OutOfMemoryError或任何错误都不会导致JVM崩溃。例如,如果你只有一个Thread没有捕获错误(不是很有用),它可能会让它退出。如果JVM没有退出,它仍然会处于不稳定状态,应该重新启动。