Xms Xmx PermSize MaxPermSize的区别

1.参数的含义

vmargs -Xms 128M -Xmx 512M -XX:PermSize=64M -XX:MaxPermSize=128M
-vmargs 代表后面是设置jvm的参数
-Xms 128M JVM设置最小分配的堆内存
-Xmx 512M JVM允许最大分配的堆内存,按需分配
-XX:PermSize=64M JVM设置分配最小的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

2.堆与非堆内存

堆内存(Heap):运行时数据区域,所有类实例与数组的内存均从此处分配。堆是在java虚拟机启动时创建的。堆内存留给开发人员使用。
非堆内存(no-Heap):除堆以外的内存就是非堆内存,非堆内存是留给jvm自己用的。比如方法区、jvm内部优化所需内存、每个类结构、方法以及构造方法的代码都在非堆内存中。

堆内存的分配
-Xms为最小分配的堆内存,默认为物理内存的1/64 ; -Xmx为最大分配的堆内存,默认为物理内存的1/4。当默认空余堆内存小于40%,JVM堆内存就会增加至-Xmx;当默认空余堆内存大于70%,JVM 堆内存就会减小至-Xms。因此服务器每次设置-Xms与-Xmx的大小相等,避免每次GC后调整堆的大小。
说明:如果-Xmx不指定或者指定偏小,可能会导致java.lang.OutOfMemory错误。

非堆内存的分配
-XX:PermSize为最小分配非堆内存,默认为物理内存的1/64; -XX:MaxPermSize为最大分配的非堆内存,默认为1/4。
说明:如果 -XX:MaxPermSize设置过小,可能会导致java.lang.OutOfMemoryError: PermGen space 就是内存溢出。
内存溢出产生的原因:
1)这一部分用来存放class或者meta信息,Class在被加载的时候直接存放在PermGen Space区域,它与Instance存放的Heap区域不同。
2)PermGen Space区域在主程序运行的过程中不会GC,因此当程序load太多的class的时候就会发生内存溢出。

3:调整JVM的参数

1)在eclipse根目录eclipse.ini中配置JVM参数
2)修改jdk使用内存
Window->preferences->java-Installed JRE->edit->Default VM Arguments
3)修改Run Configurations
Run As->Run Configurations->Arguments,在VM arguments中填入即可

参考博客:http://www.cnblogs.com/mingforyou/archive/2012/03/03/2378143.html

参考资源链接:[深入理解Java JVM内存管理:XmsXmxPermSizeMaxPermSize详解](https://wenku.csdn.net/doc/6412b5f5be7fbd1778d45000?utm_source=wenku_answer2doc_content) 为了避免Java应用中的内存溢出并优化性能,合理配置JVM的内存参数至关重要。XmsXmxPermSizeMaxPermSize这四个参数分别控制堆内存和非堆内存的最小和最大分配大小,它们是解决内存问题的关键。 首先,确定应用的内存需求。可通过运行时监控工具(如JVisualVM、JConsole)来观察应用在正常运行时的内存使用情况,这有助于设置一个合理的Xms值。Xms参数定义了JVM启动时的初始堆内存大小,而Xmx参数则限制了堆内存的最大值。合理设置这两个参数能够预防因内存分配不足而引发的内存溢出。 其次,对于非堆内存(包括方法区和Metaspace),早期版本的Java使用PermSizeMaxPermSize来控制永久代(PermGen)的大小,Java 7之后这些被Metaspace取代。对于使用Java 8及以后版本的开发者,应使用MaxMetaspaceSize参数来设置Metaspace的最大内存大小。这有助于防止由于类和方法元数据的不断增加而导致的内存溢出。 此外,动态调整内存分配的能力也非常重要。JVM提供了参数来允许堆内存随应用需求进行动态扩展,这可以通过设置最大堆内存(Xmx)大于最小堆内存(Xms)来实现。这样,当应用需要更多内存时,JVM可以自动扩展堆内存,而当内存不再紧张时,又可以自动回收多余的内存。 在调整这些参数时,还需要考虑系统的整体内存资源和多应用同时运行时的内存管理。务必避免将XmsXmx设置得过高,以免引发系统级的内存不足问题。 最后,性能优化不仅仅是调整JVM参数那么简单。代码层面的优化,如减少对象创建、使用高效的集合类型、合理的数据结构和算法,以及合理的内存使用习惯(例如及时释放不再使用的资源),都是不可忽视的部分。同时,合理地设置垃圾回收策略和监控内存使用情况,可以帮助及时发现和解决内存问题。 结合本文推荐的辅助资料《深入理解Java JVM内存管理:XmsXmxPermSizeMaxPermSize详解》,你可以深入理解这些参数的内部机制及其对性能的影响,并学会如何根据实际情况进行调整,以达到最佳的性能表现。 参考资源链接:[深入理解Java JVM内存管理:XmsXmxPermSizeMaxPermSize详解](https://wenku.csdn.net/doc/6412b5f5be7fbd1778d45000?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值