JVM 分代模型:
年轻代,老年代,永久代
年轻代:多数对象存活周期都极短。当方法在JAVA虚拟机栈中 入栈出栈完毕,其局部变量便会消,被变量引用的 对象也失去了引用,等待Minor GC,也叫Young GC 进行垃圾回收(分配新对象时,发现新生代内存空间不足时触发)
老年代:经过多次minor GC后(15?) 任然没有因失去引用被回收的对象 就会进入老年代。
对象分配的一些机制:
(1)新生代垃圾回收后,因为存活对象太多,导致大量对象直接进入老年代
(2)特别大的超大对象直接不经过新生代就进入老年代
(3)动态对象年龄判断机制
(4)空间担保机制
跟JVM内存相关的几个核心参数
1.-Xms:java堆内存的大小
2.-Xmx:java堆内存的最大大小
3.-Xmn:java堆内存中的新生代大小,扣除新生代就算老年代的内存大小了
4.-XX:PermSize:永久代大小
5.-XX:MaxPermSize 永久代最大大小
6.-Xss:每个线程的栈内存大小
Xms和Xmn用于设置java堆内存的开始大小,已经允许扩张到的最大大小,通常设置为一样大小。用来限制堆内存的总大小
-Xmn,设置堆内存中的新生代大小
-XX:PerSize和-XX:MaxPermSize(1.8以后 -XX:metaspaceSize,-XX:MaxMetaspaceSize),分别限定了永久代大小和永久代最大大小
-Xss 限定了每个线程的栈内存大小