ExecutorService OutOfMemoryError: thread creation failed
来源:互联网 发布:php 当前时间增加1天 编辑:程序博客网 时间:2024/06/03 22:52
最近在ViewPager中定时的平滑滑动函数体里使用了ExecutorService,由线程池执行滑动动作。但不知道怎么的,以下部分抛出了内存溢出错误。但改回原来的每调用一次函数体执行一次new Thread(new Runnable…).start()又感觉虚拟机太忙了。
错误如下:
E/mov_parser_oal: Try to read sample failed!10-25 15:51:00.675 4141-4141/xx.xx E/dalvikvm: Thread creation failed (err=Invalid argument)10-25 15:51:00.675 4141-4141/xx.xx D/AndroidRuntime: Shutting down VM10-25 15:51:00.675 4141-4141/xx.xx W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x414ef930)10-25 15:51:00.685 4141-4141/xx.xx E/AndroidRuntime: FATAL EXCEPTION: main java.lang.OutOfMemoryError: thread creation failed at java.lang.VMThread.create(Native Method) at java.lang.Thread.start(Thread.java:1050) at java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:913) at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1295) at android.support.v4.view.DirectionalViewPager.smoothScrollTo(DirectionalViewPager.java:1317) at android.support.v4.view.DirectionalViewPager.setCurrentItemInternal(DirectionalViewPager.java:1286) at android.support.v4.view.DirectionalViewPager.setCurrentItem(DirectionalViewPager.java:1252) at com.idea_code.business.ad.AdBusinessProcess$1$1.run(AdBusinessProcess.java:97) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5041) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:816) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:582)
代码如下:
初始化:
if(this.executorService == null)//executorService为一个类对象 this.executorService = Executors.newFixedThreadPool(2);
调用部分:
void smoothScrollTo(final int x, final int y) { this.executorService.execute(new Runnable() { @Override public void run() { ... } }
内存溢出,我理解就是对象所需使用的内存大于了它本该拥有的最大额。比如此题的情景,线程池声明了最大容量为2的线程数,但在运行完之后创建的线程未被释放。至于原因,我到现在还是一知半解,有人说是ExecutorService这个类本身的缺陷,也有人推荐使用新的API。
内存泄漏,即对象在错误或不严谨的代码编写的情况下,内存无法或不及时的释放。比如安卓中使用某个Activity对象当作context引用进行“传值”,这会造成如果当前activity因为某些原因没有被释放,那么被引用的那个Activity也会无法被虚拟机释放,即使它已经不需要存在了。
我的解决方法:
1.将executorService 声明为静态类成员变量:
private static ExecutorService executorService;
2.初始化部分作同步块,容量可以适当增加如下:
synchronized (DirectionalViewPager.class){ if(executorService == null) executorService = Executors.newFixedThreadPool(7); }
分析:
0 0
- ExecutorService OutOfMemoryError: thread creation failed
- Thread----ExecutorService
- Kernel Thread Creation
- creation of element failed
- Creation of element failed
- JVM creation failed
- jar creation failed
- ksvcreate: Process creation failed
- tomcat--Poller creation failed
- Initial SessionFactory creation failed
- Thread & ExecutorService & ThreadPoolExecutor 总览
- ksvcreate: Process(m000) creation failed
- ksvcreate: Process(m000) creation failed
- ksvcreate: Process(m000) creation failed
- Gephi弹出JVM Creation failed
- ExecutorService产生的Thread命名
- multi-thread(三)ExecutorService
- Chapter 2. Thread Creation and Management
- typedef和#define
- windows下python报错:Microsoft Visual C++ 9.0 is required
- Day51、数据库、远程连接服务器、查询select语句、form字句、where字句、order by 子句
- 【LeetCode】70. Climbing Stairs
- 项目实战:javaWeb工程中web.xml的基本配置解析
- ExecutorService OutOfMemoryError: thread creation failed
- 迷宫问题(116)
- 2014年华东师范大学软件学院博士研究生招生复试名单(动态更新)
- PHP魔术方法之__invoke()
- Java 基础语法
- SQL SERVER 基础语句
- CodeBlocks编译wxWidgets过程,满满的坑。
- nginx+tomcat配置集群
- 2016-10-25 记录 sql语句换行