JVM中内存的设置和分配(最大内存,总内存,剩余内存的区别)

 

1、设置分配的内存大小

	-vmargs -Xms128M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=128M
	-vmargs 说明后面是VM的参数,所以后面的其实都是JVM的参数了
	-Xms128m JVM初始分配的堆内存
	-Xmx512m JVM最大允许分配的堆内存,按需分配
	-XX:PermSize=64M JVM初始分配的非堆内存
	-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

2、jvm虚拟机中内存的分配情况

在java虚拟机运行中,所有类实例和数组的内存均从堆中分配,堆是运行时数据区域,随虚拟机的启动而创建。除了堆内存之外的内存称为非堆内存。

因此jvm中内存主要分为堆内存和非堆内存。堆内存,就是java代码可及的内存,比如实例对象或数组等;非堆内存是jvm留给虚拟机自己用的,比如方法区、常数池、栈等。

2.1、堆内存

通过-Xms指定虚拟机初始分配的堆内存,通常是物理内存的1/64;-Xmx指定最大分配内存,通常是物理内存的1/4.当空余堆内存小于40%时,jvm就会增大堆内存,直到达到-Xmx最大的限制;当空余内存大于70%时,就会减小内存直到达到-Xms最小限制。

2.2、非堆内存

java虚拟机使用 -XX:PermSize 设置非堆内存初始值,默认是物理内存的1/64;由 -XX:MaxPermSize 设置最大非堆内存的大小,默认是物理内存的1/4。

原文地址:https://www.cnblogs.com/shoshana-kong/p/11314917.html