public class MultiThreadOOM { public static class SleepThread implements Runnable public void run(){ try { Thread.sleep(10000000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String args[]){ for(int i=0;i<1500;i++){ new Thread(new SleepThread(),"Thread"+i).start(); System.out.println("Thread"+i+" created"); } } }
我们可以看到,运行结果如下:
Thread1125 created Thread1126 created 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:693) at geym.zbase.ch7.oom.MultiThreadOOM.main(MultiThreadOOM.java:23)
分析问题:
这个异常问题本质原因是我们创建了太多的线程,而能创建的线程数是有限制的,导致了异常的发生。能创建的线程数的具体计算公式如下:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads
MaxProcessMemory:指的是一个进程的最大内存
JVMMemory : JVM内存
ReservedOsMemory: 保留的操作系统内存
ThreadStackSize : 线程栈的大小
注:在java语言里, 当你创建一个线程的时候,虚拟机会在JVM内存创建一个Thread对象同时创建一个操作系统线程,而这个系统线程的内存用的不是JVMMemory,而是系统中剩下的内存(MaxProcessMemory - JVMMemory - ReservedOsMemory)。
相关推荐
创建线程创建线程创建线程创建线程创建线程创建线程创建线程创建线程
创建线程 创建线程 创建线程 创建线程 创建线程
一、题目: 创建线程,利用互斥实现线程共享变量通信 二、目的 掌握线程创建和终止,加深对线程和进程概念的理解,会用同步与互斥方法实现线程之间的通信。 三、内容和要求 软件界面上点“创建线程” 按钮,创建三个...
线程占用多少内存
功能:VB创建线程(其它语言没测试过,不知是否能用)。 编写原因:鉴于VB创建稳定线程的需求 特点:可替代API CreateThread来创建线程,且自动对线程进行初始化,线程函数中不再需要初始化线程就可以使用对象、类、...
易语言类方法创建线程源码,类方法创建线程,ddd,取当前类指针,取方法指针,创建线程,线程接口,创建循环线程,关闭循环线程,取循环线程空闲索引,循环线程接口,线程_创建线程,线程_等待执行完毕,线程_线程结束,操作_取...
(1)掌握Windows系统提供的线程创建与撤销系统调用 (2)掌握Windows系统环境下线程的创建与撤销方法 2 实验准备知识 (1)线程创建 CreateThread()完成线程的创建。它在调用进程的地址空间上创建一个线程,执行...
解决:软件多线程运行时遇到【内存不断升高】甚至爆表!。 因为本人是个小白,多线程经常用,但是线程池并没有用过,(一听到线程池,总感觉高大上)。但是近期写彩票软件的时候发现,多线程长期操作会导致内容不断...
window平台下创建线程程序,已经跑通 线程1和线程2
Objective-C高级编程:iOS与OS X多线程和内存管理
《MFC多线程的创建,包括工作线程和用户界面线程》全面讲解MFC多线程的创建,界面多线程与工作者多线程,多线程的起源、继承与派生,两多线程之间的区别与相同点,定时器与多线程的关系与异同(定时器是定时优先抢占...
主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
不多说请看源码,对线程级别控制,对线程的起动/暂停,同时对内存的释放,希望对大家有用
提供两个多线程安全的内存池支持类,详细的内容请看类说明
创建线程示例项目文件,源自梁老师《vc++网络编程经典案例》一书
易语言防止程序退出内存错误源码,防止程序退出内存错误,干进程,取得ID,强力打开进程,取字节集指针,取进程ID,ShowWindow,ZwQueryInformationProcess,ZwDuplicateObject,ZwQuerySystemInformation,ZwOpenProcess,...
类成员函数创建线程
如标题,在MFC中必须使用 AfxBeginThread创建多线程,如使用BeginThread可能会出现BUG
java创建线程监听端口,创建线程处理连接
使用Windows中提供的API创建线程,并在多线程中分别控制各自线程做不通的处理