【问题标题】:Fatal Exception: java.lang.OutOfMemoryError pthread_create at socket.io致命异常:socket.io 上的 java.lang.OutOfMemoryError pthread_create
【发布时间】:2017-10-27 08:42:04
【问题描述】:

我在我的 android 应用程序中使用 io.socket.client。有时我的应用程序出现“Fatal Exception: java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed:”错误。我无法重现此问题。我从 Fabric Crash 报告中得到以下日志,

这是日志,

       Fatal Exception: java.lang.OutOfMemoryError: pthread_create (1040KB stack) failed: Try again
       at java.lang.Thread.nativeCreate(Thread.java)
       at java.lang.Thread.start(Thread.java:1063)
       at io.socket.engineio.client.transports.PollingXHR$Request.create(PollingXHR.java:232)
       at io.socket.engineio.client.transports.PollingXHR.doPoll(PollingXHR.java:129)
       at io.socket.engineio.client.transports.Polling.poll(Polling.java:95)
       at io.socket.engineio.client.transports.Polling.doOpen(Polling.java:35)
       at io.socket.engineio.client.Transport$1.run(Transport.java:82)
       at io.socket.thread.EventThread.exec(EventThread.java:55)
       at io.socket.engineio.client.Transport.open(Transport.java:77)
       at io.socket.engineio.client.Socket$2.run(Socket.java:248)
       at io.socket.thread.EventThread.exec(EventThread.java:55)
       at io.socket.engineio.client.Socket.open(Socket.java:226)
       at io.socket.client.Manager$1.run(Manager.java:330)
       at io.socket.thread.EventThread.exec(EventThread.java:55)
       at io.socket.client.Manager.open(Manager.java:250)
       at io.socket.client.Manager$11$1.run(Manager.java:560)
       at io.socket.thread.EventThread$2.run(EventThread.java:80)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:818)

【问题讨论】:

  • 仅通过查看错误日志而没有代码很难说出为什么会发生这种情况。您应该检查您的代码中是否有正在进行/未关闭的循环或语句,并尝试使用内存增加的 avm。请报告这是否解决了您的问题。
  • @JohannesGriebenow 让我检查一下

标签: java android sockets


【解决方案1】:

根据Oracle documentation

当 Java 虚拟机无法运行时抛出 OutOfMemoryError 分配一个对象,因为它内存不足,并且没有更多的内存 可以由垃圾收集器提供。内存不足错误 对象可以由虚拟机构造,就像压制一样 被禁用和/或堆栈跟踪不可写。

应用程序尝试将更多数据添加到堆空间区域,但没有足够的空间。

确保没有内存泄漏。如果不是,那么您必须增加最大堆内存大小。

【讨论】:

  • 您只描述了什么是OOME异常,并没有深入解释如何解决它
  • 解释一下,为什么您希望在不提交任何代码的情况下进行深入分析?
  • 你仍然可以在清单中的largeHeap 标签上添加一些东西,避免分配比你需要的更多的实例,等等
  • 从表面上看,您不是 Android 开发人员。这就是为什么值得一提的是 OOME 是不同的。您不能只是分配更多堆并说您的应用程序需要 1.5 gig,内存是自动分配的,但如果应用程序一次使用太多,您会从中获得 OOME,因为操作系统不会为应用分配更多内存,因为它消耗得太快了
  • 如果您是真正的开发人员,您应该听说过异常的根本原因。 Java中OOME的路由原因是内存泄漏或低堆大小分配。如果您想进行更深入的分析,请使用更多详细信息更新您的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2019-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多