jvm分代模型:年轻代,老年代,永久代

  1. jvm分代模型,年轻代和老年代。年轻代就是创建和使用完之后立马就要回收的对象。老年代就是创建之后需要一直存在对象中。
  2. 永久代就是方法区,存放类信息。

    对象在jvm内存中如何分配

  3. 大部分正常对象,都是优先在新生代分配内存。

  4. 新生代内存不够的话会触发一次新生代的垃圾回收,称为”Minor GC”,也叫”Young GC”,尝试把新生代无人引用的垃圾对象回收掉。
  5. 对象在新生代中躲过10次垃圾回收,成为一个老年人,就会被转移到堆内存的老年代里去,老年代存放年纪很大的对象。

    Jvm核心参数

  6. -Xms:堆内存大小

  7. -Xmx:堆内存最大大小
  8. -Xmn:堆内存的新生代大小,扣除新生代就是老年代大小
  9. -XX:permSize/-XX:MetaspaceSize:永久代大小
  10. -XX:MaxPermSize/-XX:MaxMetaspaceSize:永久代最大大小
  11. -Xss: 每个线程的栈内存大小
  12. 一般设置-Xms和-Xmx为一样的大小,-XX:permSize和-XX:MaxPermSize一样的大小

    什么情况下,JVM内存中的对象会被回收

  13. 通过可达性分析算法。通过这个算法,判断每个对象是否有一个GC roots。在jvm规范中,静态变量和局部变量都可以作为一种GC roots,如果有GC roots就不会被回收

  14. java中对象不同的引用类型。分为强引用,软引用,弱引用,虚引用。强引用是绝对不能回收的对象,软引用是可有可无,如果内存实在不够用,可以回收。弱引用是主要的回收对象。
  15. 没有被GC root引用的对象,也不一定会被立马回收。加入这个对象重写了Object类中的finial方法,要看这个方法中是否有被变量引用,被引用就不会被垃圾回收了。