最近碰着了java.lang.OutOfMemoryError: unable to create new native thread,籍由这个机会尝试深入理解这个问题。
原因是创建过多thread引出的问题,JVM此时无法再创建出更多的线程。
这里的解释还是比较靠谱的
引用
As you can see, the maximum number of threads I can create decreases as the heap size gets larger. This is because the JVM immediately reserves the address space specified for the maximum heap size - That's probably because it needs that memory to be contiguous
.
表象便是当JVM的heap size设置过大时,thread的创建数量便会减少。
这里找到了一个还算清晰的说明
引用
Maximum heap size depends on maximum address space per process.
Maximum heap space is always smaller than maximum address space per process, because the process also needs space for stack, libraries, and so on.
JVM的堆和进程所需的栈都会消耗进程地址空间(address space),而地址空间则取决于操作系统,Windows中
引用
所有 32 位应用程序都有 4 GB 的进程地址空间(32 位地址最多可以映射 4 GB 的内存)。对于 Microsoft Windows 操作系统,应用程序可以访问 2 GB 的进程地址空间,称为用户模式虚拟地址空间。应用程序拥有的所有线程都共享同一个用户模式虚拟地址空间。其余 2 GB 为操作系统保留(也称为内核模式地址空间)。
目前我的理解是,JVM申请的heap会占用相同大小的地址空间(address space)。在Windows 32位操作系统中,分配给每个程序的地址空间只有2GB(当然也有3GB的开关)。而每个不同的JVM的堆和其创建的进程栈都依赖于同一个进程地址空间,所以这也是
此消彼长的原因。
有方法可以提高创建线程的数量:
1.减少JVM的heap size;
2.减少单个线程栈的大小,在JVM启动中使用-Xss参数。目前JDK1.4中每个线程栈所大小是256K,1.5是1M.
唉,大学的操作系统课程荒废了,地址空间也有些拎不清了。
分享到:
相关推荐
MCU固件安全加锁源码:上位机多设备并行加锁与设备端简易使用接口的实现,MCU固件加锁源码 包含上位机和设备端程序 上位机 1. 上位机可以并行加锁多个设备 2. 上位机可以输入自定义Key 设备端程序: 1. 容易移植,容易使用 2. 对接包含存储以及串口接收发送接口即可使用 3. 已加锁的设备不可重复加锁 ,核心关键词:MCU固件加锁源码; 上位机; 设备端程序; 并行加锁; 自定义Key; 容易移植; 容易使用; 存储接口; 串口接收发送接口; 已加锁不可重复加锁。,MCU固件加锁系统:上位机多设备并行加锁源码及易用设备端程序
输电线路单相接地故障测距:不同短路时刻与位置对双端测距法的影响分析,输电线路单相接地测距 搭建如图1所示的35kV输电网模型,输电侧发电机出口电压10.5kV经过升压变压器变至38.5kV,受电侧经降压变压器降压至6.6kV。输电线路全长100km,架空线路线路正负序参数为:,,,,,。经过计算可得行波线模速度:。通过故障模块设置A相不同短路时刻与过渡电阻发生单相接地,并根据双端行波测距原理进行故障测距,每次设置故障发生点距离首端距离分别为20km、40km、60km、80km,模型仿真步长为秒。 (1)短路时刻对故障测距的影响 分别设置A相电压正峰值、负峰值、过零值以及任意时刻发生单相接地,对应时刻分别为0.0467s、0.0567s、0.0517s和0.0490s,仿真及计算结果入表2-1所示: 由表1可以看出,在使用双端测距方法时,短路时刻对测量结果无影响,只需两侧时钟保持高度同步计时即可。 (2)过渡电阻对故障测距的影响 分别设置A相在任意时刻(0.049s)发生单接地,接地电阻分别为0Ω、10Ω、100Ω、1000Ω,仿真及计算结果入表2所示: 由表2和图4可知,在使用双端
"COMSOL模拟:二氧化碳充装与输气管道泄漏的耦合温度场分析,输出速度与温度分布",comsol 二氧化碳充装二氧化碳输气管道泄漏模拟,并耦合温度场,可以输出速度,温度分布 ,核心关键词:Comsol; 二氧化碳充装; 二氧化碳输气管道泄漏模拟; 温度场耦合; 输出速度; 温度分布; 模拟技术。,"COMSOL模拟:二氧化碳充装与输气管道泄漏及温度场耦合分析"
2017年6月质量管理体系基础
基于Andriod的家庭理财系统的设计与实现,含有完整的源码和报告文档
2021年5月信息技术服务管理体系
2022月06月Python二级实操
springboot基于java的大学生就业信息管理系统,含有完整的源码和报告文档
2021年06月Python四级实操
基于Android的记录生活APP_45n2x,含有完整的源码和报告文档
2022年12月Scratch二级级实操
COMSOL多物理场热流耦合拓扑优化:无量纲化双目标设计与优化研究,COMSOL 热流耦合拓扑优化。 无量纲—双目标 ,关键词:COMSOL; 热流耦合; 拓扑优化; 无量纲; 双目标。,基于COMSOL的热流耦合拓扑优化:无量纲双目标优化技术
基于PCA-BP神经网络的多元回归预测Matlab代码:实现多变量数据降维与高精度预测,基于PCA-BP的数据多变量回归预测 Matlab代码 [可显示原始特征贡献率] (多输入单输出) 1.首先通过主成分分析PCA将数据进行降维,会显示原始特征对应的贡献率(不是贡献率排序,不会让你对应不到对应特征),选取要求为累计贡献率大于90%。 2.将数据降维后的数据导入BP神经网络进行回归预测 3.PCA和BP回归两个内容写在同一个main里,运行一个main一键出图和结果(如下图) 1、运行环境要求MATLAB版本为2018b及其以上 2、评价指标包括:R2、MAE、MSE、RPD、RMSE等,图很多,符合您的需要 3、代码中文注释清晰,质量极高 4、测试数据集,可以直接运行源程序。 替你的数据即可用 适合新手小白 ,基于PCA-BP的;多变量回归预测;数据降维;特征贡献率;BP神经网络;Matlab代码;一键出图;R2;MAE;MSE;RPD;RMSE。,基于PCA-BP的多变量回归预测Matlab代码:包含特征贡献率显示与评价优化
2021年09月Python四级实操
"C#编程下的Yolov5上位机软件开发:结合海康相机图像采集与源码共享的实践项目",C#yolov5上位机软件 结合海康相机取图 使用到项目上 提供源码 ,核心关键词:C#;YOLOv5;上位机软件;海康相机;取图;项目;源码,C#结合海康相机实现Yolov5上位机软件:开源项目代码解析
HarmonyOS高级开发者认证考试资料
2019年5月环境管理体系基础
springboot明星周边商城系统,含有完整的源码和报告文档
MD500E浮点无感观测器模型:高性能、低速稳定、正反转切换的优化控制策略,MD500E无感观测器模型,低速性能良好,可零速启动,堵转不发散,可正反转切。 电阻、电感、磁链偏差20%情况下,对观测器性能无影响。 注 本模型是Md500e的浮点模型,原版md500e是定点标幺化的代码,本模型为浮点有名值,更容易理解和移植。 模型中包括了FOC运行的常用模块,可一键Ctrl+B生成浮点代码到控制板中进行验证。 生成代码共3个函数,分别为初始化、电流环、转速环。 运行效果见图。 ,MD500E无感观测器模型; 低速性能; 零速启动; 堵转不发散; 正反转切换; 电阻电感磁链偏差; 浮点模型; 定点标幺化代码; FOC运行模块; 生成浮点代码; 运行效果。,MD500E无感观测器:高效稳定低速,易理解浮点模型
2018年6月信息技术服务管理体系