0
点赞
收藏
分享

微信扫一扫

JVM优化之常用参数解读( -Xss -Xms -Xmx -Xmn)

无愠色 2022-09-02 阅读 108

Xmn、Xms、Xmx、Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果。

-Xms 堆内存的初始大小,默认为物理内存的1/64

-Xmx 堆内存的最大大小,默认为物理内存的1/4

-Xmn 堆内新生代的大小。通过这个值也可以得到老生代的大小:-Xmx减去-Xmn

-Xss 设置每个线程可使用的内存大小,即栈的大小。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。


建议将Xms和Xmx设为一样的值,避免每次垃圾回收完成后JVM重新分配内存。如果虚拟机启动时设置的Xms比较小,这个时候又需要初始化很多对象,虚拟机会不断地增加内存。配置示例:-Xms1024m -Xmx1024m



-XX:PermSize、-XX:MaxPermSize:分别设置永久代最小大小与最大大小(Java8以前)

-XX:MetaspaceSize、-XX:MaxMetaspaceSize:分别设置元空间最小大小与最大大小(Java8以后)

JVM存储数据的内容的内存分为

  ①堆区(Java堆:所有的线程共享该区域):通过new的方式创建的对象(一个类的实例)、数组所占的空间。

    注意:1)堆区还细分为新生代(Eden空间、From Survivor空间、To Survivor空间)、老年代(Tenured Generation空间)。

              2)Java垃圾回收机制只作用于堆区,对非堆区没有作用。


  ②非堆区:代码、常量、外部访问(比如流在传输数据时所占用的资源)等。


三、常见的参数种类(配置内存)

(1)配置堆区的参数:-Xms、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn

(2)配置非堆区的参数:-XX:PermSize、-XX:MaxPermSize


四、堆区参数配置

 (1)-Xms:Java虚拟机堆区内存初始内存分配的大小,按照实际情况进行分配(一般为操作系统可用内存的1/64大小)。

(2)-Xmx:Java虚拟机堆区内存可被分配的最大上限(一般为操作系统可用内存的1/4大小)。

注意:①一般-Xms、-Xmx两个参数会配置相同的值(优点:能够在Java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源)。

(3)-XX:newSize:新生代初始化内存的大小(注意:该值需要小于-Xms的值)。

(4)-XX:MaxnewSize:新生代可被分配的内存的最大上限(注意:该值需要小于-Xmx的值)。

(5)-Xmn:对-XX:newSize、-XX:MaxnewSize两个参数同时进行配置(注意:JDK1.4之后才有该参数)。

五、非堆区参数配置

(1)-XX:PermSize:非堆区初始化内存分配大小。

(2)-XX:MaxPermSize:非堆区分配的内存的最大上限。



举报

相关推荐

0 条评论