
分析:
AndroID系统会给每个应用分配一个内存空间(不同的系统分配的内存大小不同),这块内存空间大小是有限的。
创建线程需要占用内存空,
不可能拿有限的内存空间创建无限的线程。
结论:
AndroID线程是有上限的。如果应用创建线程的数量过多,而没有及时释放会导致OOM
测试代码:
private voID createThread() { while (true) { new Thread(new Runnable() { @OverrIDe public voID run() { try { long thread = Thread.currentThread().getID(); Log.d("creatthread", "开启线程:" + thread); Thread.sleep(1000 * 1000); } catch (InterruptedException e) { e.printstacktrace(); } } }).start(); } }报错日志:
D/creatthread: 开启线程:11000 .... D/creatthread: 开启线程:18101 W/libc: pthread_create Failed: Couldn't mprotect TLS: Out of memory W/zygote64: Throwing OutOfMemoryError "pthread_create (1040KB stack) Failed: Try again" D/AndroIDRuntime: Shutting down VM2019-08-06 11:34:45.133 25384-25384/com.cloud.wd.custom E/AndroIDRuntime: FATAL EXCEPTION: main Process: com.cloud.wd.custom, PID: 25384 java.lang.OutOfMemoryError: pthread_create (1040KB stack) Failed: Try again at java.lang.Thread.nativeCreate(Native Method) at java.lang.Thread.start(Thread.java:733) at com.cloud.wd.custom.MainActivity.createThread(MainActivity.java:159) at com.cloud.wd.custom.MainActivity.access0(MainActivity.java:29) at com.cloud.wd.custom.MainActivity.onClick(MainActivity.java:125) at androID.vIEw.VIEw.performClick(VIEw.java:6311) at androID.vIEw.VIEw$PerformClick.run(VIEw.java:24833) at androID.os.Handler.handleCallback(Handler.java:794) at androID.os.Handler.dispatchMessage(Handler.java:99) at androID.os.Looper.loop(Looper.java:173) at androID.app.ActivityThread.main(ActivityThread.java:6653) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:821)如有错误,请求指正
总结以上是内存溢出为你收集整理的57、Android线程有没有上限全部内容,希望文章能够帮你解决57、Android线程有没有上限所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)