垃圾回收
g1垃圾回收器
内存结构
g1之前的垃圾回收器内存结构是连续的,而g1垃圾回收器是分区的,分成了一个个相等的区。
G1回收器的垃圾回收方式
分别为年轻代回收和混合回收
年轻代回收会导致整个用户线程停顿 即STW
回收流程
g1垃圾回收器每次回收的时候会根据回收每个区的耗时,以及最大耗时(默认200ms)来选择要回收哪些区域,回收几个区域。
每次回收的时候都会记录下来平均耗时,作为下次回收的参考依据。
混合回收中年轻代对象被复制到s区,老年代对象被复制到old区
对老年代来说,g1不会回收所有老年代区域。而是会选择存活度比较低的区域进行回收。
混合回收
没有空的话就full gc(mix gc 和 young gc都是属于partial gc)
双亲委派模型
Tomcat打破双亲委派机制
由不同的类加载器加载,名称一样也可以正常加载。
为什么是重写 loadClass() 方法打破双亲委派模型呢? 双亲委派模型的执行流程已经解释了:
类加载器在进行类加载的时候,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成(调用父加载器loadClass()方法来加载类)。
流程大概是从底层一层层往上调用父类的loadclass(),如果最终启动类加载器也没法加载这个类,就会调用该子类的findclass,让他自己进行加载。所以:
如果我们不想打破双亲委派模型,就重写 ClassLoader 类中的 findClass()
方法即可,无法被父类加载器加载的类最终会通过这个方法被加载。但是,如果想打破双亲委派模型则需要重写 loadClass() 方法。