IDEA中VM options参数设置和说明

一、VM options参数设置

打开Run Configurations界面 

二、VM options参数说明 

-Xms1024m,设置JVM初始堆内存为1024m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmx1024m,设置JVM最大堆内存为1024m。
-Xss512k,设置每个线程的栈大小。JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为256K。在相同物理内存下,减小这个值能生成更多的线程,当然操作系统对一个进程内的线程数还是有限制的,不能无限生成。线程栈的大小是个双刃剑,如果设置过小,可能会出现栈溢出,特别是在该线程内有递归、大的循环时出现溢出的可能性更大,如果该值设置过大,就有影响到创建栈的数量,如果是多线程的应用,就会出现内存溢出的错误。
-Xmn341m,设置年轻代大小为341m。在整个堆内存大小确定的情况下,增大年轻代将会减小年老代,反之亦然。此值关系到JVM垃圾回收,对系统性能影响较大,官方推荐配置为整个堆大小的3/8。
-XX:NewSize=341m,设置年轻代初始值为341M。
-XX:MaxNewSize=341m,设置年轻代最大值为341M。
-XX:PermSize=512m,设置持久代初始值为512M,但在java8及之后就不支持了,改用-XX:MetaspaceSize=512m。
-XX:MaxPermSize=512m,设置持久代最大值为512M,同样在java8及之后就不支持了,改用-XX:MaxMetaspaceSize=512m。
-XX:NewRatio=2,设置年轻代(包括1个Eden和2个Survivor区)与年老代的比值。表示年轻代比年老代为1:2。
-XX:SurvivorRatio=8,设置年轻代中Eden区与Survivor区的比值。表示2个Survivor区(JVM堆内存年轻代中默认有2个大小相等的Survivor区)与1个Eden区的比值为1:1:8,即1个Survivor区占整个年轻代大小的1/10。
-XX:MaxTenuringThreshold=15,具体参看JVM系列之内存分配和回收策略中对象的衰老过程。
-XX:ReservedCodeCacheSize=240m,设置代码缓存的大小,用来存储已编译方法生成的本地代码。
-client,设置JVM使用Client模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或开发调试;在32位环境下直接运行Java程序默认启用该模式。
-server,设置JVM使Server模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有64位能力的JDK环境下默认启用该模式。
-Dserver.port=8088,设置服务端口为8088

 -X这些参数基本上都是JVM参数,部分补充说明可以参看JVM系列之分代内存模型以及常用参数的查看和设置

三、启动Spring Boot时,如果不设置内存参数会如何?

3.1前言

最近正在进行从Spring Boot往Spring Cloud上改造升级。之前部署的应用程序比较少,还没什么问题。当Spring Cloud项目逐步新增之后,问题就爆发了,服务器内存不够用了。而现有的用户体量也没必要对服务器再次进行升级,于是就开始着手Spring Boot启动时JVM内存配置的优化。

3.2服务现状

由于之前服务比较少,服务器资源充足,许多服务启动时都未添加JVM参数(遗留问题)。结果就是每个服务启动都占用了1.5G-2G的内存,有些服务的体量根本用不了这么多。那么,在Spring Boot中如果未设置JVM内存参数时,JVM内存是如何配置的呢?

3.3JVM默认内存设置

当运行一个Spring Boot项目时,如果未设置JVM内存参数,Spring Boot默认会采用JVM自身默认的配置策略

Spring Boot项目的JVM默认堆大小取决于使用的JDK版本。对于JDK 8和之前的版本,JVM的初始堆大小为1/64,最大堆大小为1/4。对于JDK 9及以上版本,默认情况下JVM启动时使用的Ergonomics配置将自动根据可用系统内存进行调整。

3.3.1对于JDK 8和之前的版本,可以在启动命令中通过设置-Xms和-Xmx参数来指定JVM的初始堆大小和最大堆大小。例如:

java -Xms512m -Xmx1024m -jar myapp.jar

上述命令指定了JVM的初始堆大小为512MB,最大堆大小为1024MB。切记参数要防止-jar参数之前。否则会被当做系统参数而无效。

3.3.2对于JDK 9及以上版本,可以通过设置以下参数来调整JVM的堆大小:

-Xms:设置JVM的初始堆大小
-Xmx:设置JVM的最大堆大小
-XX:MaxMetaspaceSize:设置元空间(Metaspace)大小,用于存储类元数据信息

java -Xms512m -Xmx1024m -XX:MaxMetaspaceSize=256m -jar myapp.jar

上述命令指定了JVM的初始堆大小为512MB,最大堆大小为1024MB,元空间大小为256MB。 

针对最开始的问题,如果每个程序都按照默认配置启动,一台服务器上部署多个应用时,就会出现内存吃紧的情况,造成一定的浪费。最简单的操作就是在执行java -jar启动时添加上对应的jvm内存设置参数。

3.4查看系统默认内存设置

通过上面的描述我们可以看到,不同的系统配置,JVM使用的内存是不同的。我们可以通过Java命令自带的功能来查看默认的内存设置。

在Windows操作系统下,输入如下命令:

java -XX:+PrintFlagsFinal -version | findstr HeapSize

在Linux操作系统下,输入如下命令:

java -XX:+PrintFlagsFinal -version | grep HeapSize

四、springboot项目启动需要多大内存?

SpringBoot项目的内存需求取决于多个因素,包括项目的复杂性、使用的依赖和插件的数量、以及预期的并发用户数量。但是,对于大多数基本的SpringBoot应用程序,通常建议为JVM(Java虚拟机)分配至少512MB的内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值