内存溢出:java.lang.OutOfMemoryError: pthread_create (stack size 131072 bytes) failed: Out of memory
2017-11-06 09:27
666 查看
一,遇到的问题
1.报错代码:
private void sendUnConnectMsgToServer(){ String id = preferences.getString(ConstantUtil.KEY_ID,"0"); sendInstallDateTask = new SendInstallDateTask(id, "0","0","0","0","0","0","0","0","00","0","0"); sendInstallDateTask.execute((Void) null); }
2.报错日志如下:
java.lang.OutOfMemoryError: pthread_create (stack size 131072 bytes) failed: Out of memory at java.lang.VMThread.create(Native Method) at java.lang.Thread.start(Thread.java:1026) at com.android.volley.RequestQueue.start(RequestQueue.java:142) at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:66) at com.android.volley.toolbox.Volley.newRequestQueue(Volley.java:78) at com.sdkj.heaterbluetooth.service.SocketService.sendUnConnectMsgToServer(SocketService.java:452) at com.sdkj.heaterbluetooth.service.SocketService.access$700(SocketService.java:41) at com.sdkj.heaterbluetooth.service.SocketService$5.handleMessage(SocketService.java:297) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5398) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:836) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) at dalvik.system.NativeStart.main(Native Method)
3.产生原因
内存中产生大量的sendInstallDateTask对象使用完没回收4.解决办法
将sendInstallDateTask对象用完后及时置null二,常见的内存溢出报错
常见原因
内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;
代码中存在死循环或循环产生过多重复的对象实体;
使用的第三方软件中的BUG;
启动参数内存值设定的过小;
Java代码导致OutOfMemoryError错误的解决
需要重点排查以下几点:
检查代码中是否有死循环或递归调用。检查是否有大循环重复产生新对象实体。
检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可 能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。
检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。
解决java.lang.OutOfMemoryError的方法有如下几种
一、增加jvm的内存大小在执行某个class文件时候,可以使用java -Xmx256M aa.class来设置运行aa.class时jvm所允许占用的最大内存为256M。
二、 优化程序,释放垃圾
主要包括避免死循环,应该及时释放种资源:内存, 数据库的各种连接,防止一次载入太多的数据。导致java.lang.OutOfMemoryError的根本原因是程序不健壮。因此,从根本上解决Java内存溢出的唯一方法就是修改程序,及时地释放没用的对象,释放内存空间。 遇到该错误的时候要仔细检查程序,嘿嘿,遇到过一次这种问题之后,以后写程序就会小心多了。
相关文章推荐
- android 内存溢出处理办法(出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget 异常)
- 内存溢出,无法创建新的本地线程的原因和解决方案 - java.lang.OutOfMemoryError: unable to create new native thread
- 内存溢出--java.lang.OutOfMemoryError: PermGen space
- java.lang.OutOfMemoryError:PermGen space tomcat7 内存溢出
- Caused by: java.lang.OutOfMemoryError: Failed to allocate a 29433932 byte allocation with 14683576 free bytes and 14MB
- java.lang.OutOfMemoryError: Java heap space 内存溢出错误及处理办法(转)
- java.lang.OutOfMemoryError: Failed to allocate a 3110419 byte allocation with 741152 free bytes and
- jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
- 内存溢出问题java.lang.OutOfMemoryError: PermGen space
- Eclipse中通过Tomcat运行JavaWeb项目发生内存溢出:java.lang.OutOfMemoryError: PermGen space 错误的解决方案
- android 内存溢出 Java.lang.OutOfMemoryError
- 内存溢出数值jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space
- eclipse启动或者运行过程中tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space
- struts2自定义模板内存溢出 java.lang.OutOfMemoryError: Java heap space(问题已解决)
- linux服务器 tomcat 内存溢出 java.lang.OutOfMemoryError: PermGen space
- idea 运行tomcat 内存溢出 java.lang.OutOfMemoryError: PermGen space
- 应用jacob组件造成的内存溢出解决方案(java.lang.OutOfMemoryError: Java heap space)
- 彻底解决Eclipse 5.2内存溢出:java.lang.OutOfMemoryError: PermGen space
- 解决Java项目内存溢出:Java.lang.OutOfMemoryError:PermGen space
- eclipse启动tomcat出现内存溢出错误 java.lang.OutOfMemoryError: PermGen space