1、一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。
2、Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间,【堆内存大小是可以调节的】
3、堆可以处于物理上不连续的,但在逻辑上它应该被视为连续的。
4、所有的对象实例化及数组都应当在运行时分配在堆上。
5、数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对象或者数组在堆中的位置。
6、在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。
7、堆,是垃圾收集器(GC)执行垃圾回收重点收集的区域。
1、手动设置 :
-Xms600m -Xmx600m
开发和生产环境中建议将初始堆内存和最大堆内存设置成相同的值。为什么呢??
如果不设置为一样的话,那么在生产的环境中可能会不断的扩容,不断的GC垃圾回收,就会造成系统的压力。设置为一样,可以避免频繁的GC操作。
2、查看设置的参数:
当老年代空间已满就会出现OOM异常
1、存储在JVM中的Java对象可以被划分为两类:
总结:
1、针对幸存者S0和S1区的总结:复制之后有交换,谁空谁是to
2、关于垃圾回收:频繁在新生代收集,很少在养老区收集。几乎不在永久代/元空间收集。