0
点赞
收藏
分享

微信扫一扫

java最大线程数

_刘彦辉 2022-04-24 阅读 75
java

-Xms

初始堆大小。如:-Xms256m

-Xmx

最大堆大小。如:-Xmx512m

-Xmn

新生代大小。通常为 Xmx 的 1/3 或 1/4。新生代 = Eden + 2 个 Survivor 空间。实际可用空间为 = Eden + 1 个 Survivor,即 90%

-Xss

JDK1.5+ 每个线程堆栈大小为 1M,一般来说如果栈不是很深的话, 1M 是绝对够用了的。

-XX:NewRatio

新生代与老年代的比例,如 –XX:NewRatio=2,则新生代占整个堆空间的1/3,老年代占2/3

-XX:SurvivorRatio

新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10

-XX:PermSize

永久代(方法区)的初始大小

-XX:MaxPermSize

永久代(方法区)的最大值

-XX:+PrintGCDetails

打印 GC 信息

-XX:+HeapDumpOnOutOfMemoryError

让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,以便分析用

32位系统对进程的大小有限制,64位没有,也就是说,64位系统可以用一个进程占满接近整个系统的内存
操作系统分配给每个进程的内存大小是有限制的,比如32位的Windows是2G。因此操作系统对一个进程下的线程数量是有限制的,不能无限的增多。经验值:3000-5000左右
64位系统下:
一个java程序可以配置其初始堆内存(默认1/64),最大堆内存(默认1/4),初始方法区内存(默认1/64),最大方法区内存(默认1/4),一个虚拟机栈的大小(默认1m),对应的参数为:Xms,Xmx,PermSize,MaxPermSize,Xss.
注意:栈的总内存不用配置,最大值就是系统剩余物理空间

可开最多线程数目:java程序最大线程数由虚拟用户空间和堆栈大小共同决定,最大线程数=用户虚拟空间/虚拟机栈大小,虚拟机栈越小,产生栈溢出异常的可能就越大(可以捕捉到),系统的最大线程数是用户层定义配置的,所以为了防止线程过多造成线程切换的过多开销,需要合理设置系统最大线程数。
实际线程数目最多:(系统剩余内存 - 最大堆容量Xmx - 最大方法区容量MaxPermSize)/ 最大栈空间Xss)

线程多了,就会有线程切换,带来性能开销。
jvm堆越大,系统创建的线程数量越小。
当-Xss的值越小,可生成线程数量越多。
Xss:设置栈帧大小
linux系统64位默认虚拟用户空间为128T,默认虚拟机栈大小为1024k.

举报

相关推荐

0 条评论