有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

内存不足。lang.OutOfMemoryError进程未崩溃

我看到一个奇怪的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) 个答案

  1. # 1 楼答案

    OutOfMemoryError或任何相关错误都不会导致JVM崩溃。例如,如果您只有一个线程没有捕获错误(无论如何都不是很有用),那么它可能会退出。如果JVM不退出,它将处于不稳定状态,应该重新启动

  2. # 2 楼答案

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

    这是因为无法从应用程序中创建更多本机线程

    1. 检查应用程序正在生成的线程数。很有可能这就是罪魁祸首
      您可以使用线程转储来分析此问题

    2. 然后检查堆栈大小Xssparam会给你这个。试着调整一下

    增加Xmx在这里对您没有帮助。事实上,在32位JVM上,这将加剧问题

    进程没有停止的原因是未捕获的异常只会终止它们自己的线程,而不是Jan在评论中提到的整个应用程序