DebugEN
科技森
专注于Java开发~每天都会更新文章~
  1. 首页
  2. Java
  3. 正文

Java 虚拟机最多可以支持多少个线程?

2021年03月19日 1894点热度 1人点赞 0条评论 作者: kejisen

概述

多年来,我们使用的系统的性能呈指数增长。因此,Java VM支持的线程数也增加了。

但是,我们实际上可以创建多少个线程? 答案不是确切数字,因为它取决于许多因素。

我们将讨论其中的两个因素,以及它们如何影响我们可以在Java VM中创建的线程数。

堆栈内存

线程的最重要组成部分之一是它的堆栈。最大堆栈大小和我们创建的线程数与可用系统内存量有直接关系。

因此,增加内存容量也会增加我们可以在系统上运行的最大线程数。有关堆栈大小的更多详细信息,可以在我们的文章《在JVM中配置堆栈大小》中找到。

最后,值得一提的是,自Java 11起,JVM不会积极地为堆栈提交所有保留的内存。这有助于增加我们可以运行的线程数。换句话说,即使我们增加最大堆栈大小,线程使用的内存量也将基于实际堆栈大小。

堆内存

堆不会直接影响我们可以执行的线程数。但是,它也使用相同的系统内存。

因此,增加堆大小会限制堆栈的可用内存,从而减少我们可以创建的最大线程数。

Linux

在内核级别,基于Linux的系统将线程视为进程。因此,像pid_max内核参数这样的进程限制将直接影响我们可以创建的线程数。

另一个内核参数是threads-max,它描述了总的最大线程数。

我们可以通过执行 sysctl kernel..来检索所有这些参数。

最后,每个用户的最大进程数是有限制的,可使用ulimit -u命令检索。

windows

在Windows计算机上,没有为线程指定限制。因此,我们可以创建任意数量的线程,直到系统用尽可用系统内存为止。

苹果系统

运行macOS的系统有两个主要限制,由两个内核参数定义:

num_threads 表示可以创建的线程的最大总数
num_taskthreads 表示每个进程的最大线程数
这些参数的值可以通过执行sysctl kern来访问。<参数名称>。

值得一提的是,当达到这些限制之一时,将引发OutOfMemoryError ,这可能会产生误导。

虚拟线程

通过利用尚未公开提供的Project Loom附带的轻量级虚拟线程,我们可以进一步增加可以创建的线程数量。

虚拟线程是由JVM创建的,不使用OS线程,这意味着我们实际上可以同时创建数百万个虚拟线程。

结论

在本文中,我们研究了可能影响Java虚拟机中可以创建的最大线程数的最重要方面。

但是,在大多数情况下,增加限制不太可能永久解决可伸缩性问题。我们将需要考虑重新考虑应用程序的实现,甚至考虑应用水平缩放。

标签: java
最后更新:2021年03月19日

kejisen

保持饥渴的专注,追求最佳的品质

点赞
< 上一篇
下一篇 >

文章评论

取消回复
最新 热点 随机
最新 热点 随机
【原创】记录一次失败的折腾——使用jkeymaster实现的按键监听 【原创】这些年我用过的IDEA插件 【原创】在windows上使用VNC远程连接linux桌面 我在RxJava使用线程池时遇到的问题 [原创文章] Swagger生成pdf格式的接口文档 [个人翻译]Java HTTP工具类的客户端证书认证 [原创] 如何从 Git 的提交历史记录中删除大文件 [翻译] 创建一个只读的Repository接口(Spring Data) [翻译] 反射的用法——用Java调用私有方法 Java 虚拟机最多可以支持多少个线程? 排查Hibernate的慢查询日志–这是查找慢查询的最简单方法 [翻译] 使用apache poi在excel文件中插入一行数据 [翻译] 在Spring 中@EntityScan与@ComponentScan注解有什么区别 [原创] 从QQ音乐网页版扒歌词的补充说明 [原创] 介绍java maven项目的多种打包方式 原创——在Java中生成随机数 将G1垃圾回收的内存使用量减少20%(翻译) [原创] java8 lambda表达式的toMap造成的空指针异常 [原创] 在Spring Boot中使用CommandLineRunner来在启动时执行代码 [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道
[原创] 从QQ音乐网页版扒歌词的补充说明 将G1垃圾回收的内存使用量减少20%(翻译) 在Java中生成随机的日期 [原创] Spring Boot使用CommandLineRunner 使用Spring RestTemplate压缩请求 [原创] 在ubuntu18.04上安装chromedriver 中通Elasticsearch集群运维实践 [个人翻译]Java HTTP工具类的客户端证书认证 [翻译] 创建一个只读的Repository接口(Spring Data) 【原创】这些年我用过的IDEA插件 [原创] 在spring-boot中使用querydsl [转载] Kafka 节点重启失败导致数据丢失的分析排查与解决之道 [原创文章] Swagger生成pdf格式的接口文档 [翻译] 使用apache poi在excel文件中插入一行数据 Spring Boot的@RequestMapping注解中加斜杠与不加斜杠的区别 从QQ音乐获取并解析音乐的歌词 如何设置Servlet的session超时时间 【原创】在windows上使用VNC远程连接linux桌面 中通Elasticsearch集群运维实践(二)--监控告警 java maven项目的几种打包方式
标签聚合
springboot maven json qq音乐 elasticsearch linux base64 歌词 java spring

COPYRIGHT © 2020 Kejisen. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS