-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.