2、Java堆内存/方法区(Non-Heap)

Java堆内存

内存的划分

新生代(Young)、老年代(Old/Tenured Gen)
新生代划分:Eden(伊甸园:代指新生变量)、From Survivor 、To Survivor

2、Java堆内存/方法区(Non-Heap)

图中 Young Gen与Tenured Gen属于堆区,而Permanent Gen(永久代)不属于堆区

新生代:存放新生成的对象(说明:from和to每次只有一个同Eden一起为对象服务)
老年代:主要存放应用程序声明周期长的内存对象
永久代:(方法区)主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域. 它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的应用会加载很多Class的话,就很可能出现PermGen space错误。

JVM配置

配置项 说明
-Xms 堆最小大小
-Xmx 堆最大大小
-XX:NewRatio 新生代与老年代的比例(默认1:2)
-XX:SurvivorRatio Eden : From : To(default 8:1:1) 默认新生代可用空间为90%

方法区(Non-Heap)

方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

2、Java堆内存/方法区(Non-Heap)