JVM调优篇
文章平均质量分 95
JVM调优篇
胡尚
只要学不死就往死里学
展开
-
剖析JVM类加载机制
要实现一个自定义类加载器主要就是继承ClassLoader类,这个类中有两个核心方法和,其中方法实现了双亲委派机制,默认是一个空实现,所以我们要重写方法} /*** 将com.tuling.jvm.User 改为 D:/test/com/tuling/jvm/User.class路径* 再通过IO流读取class文件* @param name 全类名 例如com.tuling.jvm.User* @return 字节码文件的字节数组try {原创 2023-03-07 23:09:14 · 108 阅读 · 0 评论 -
JVM调优命令、调优思路
如果找到了我们就去代码中找一下哪些地方创建了这个对象进而优化代码,如果创建对象的地方非常多,不太好定位问题那么我们可以尝试使用stack命令找一下占用cpu较多的线程,根据输出提示找到具体的java代码。调优,增加年轻代内存空间后,可能频繁产生FullGC的情况就不会出现了,也有可能还会更加频繁,这种情况的出现我们还是一样慢慢排查触发FullGC的各种情况,最大的可能性是老年代空间分配担保机制的原因,因为年轻代现在增大了,老年代减少了。主要查看堆内存中的一些信息,看看哪些类的实例对象占用了多大的堆内存。原创 2023-03-16 09:03:53 · 336 阅读 · 0 评论 -
G1与ZGC垃圾回收器
如果一个Region100的对象,其中95个对象都是存活对象,那么复制的意义就不大,而且复制95个对象很耗时。因为它会计算这一次如果进行MinorGC过程中大概STW的耗时,默认STW最大停顿时间是200ms,如果这一次只需要50ms,那么就不会进行MinorGC,会增加年轻代的region,继续给新对象存放,不会马上做Young GC,直到下一次Eden区放满,如果这一次MinorGC过程中SWT耗时接近200ms了,那么就开始进行MinorGC。区别是CMS叫重新标记,G1叫最终标记,但其实是一样的;原创 2023-03-14 08:10:34 · 1921 阅读 · 0 评论 -
java对象的创建与内存分配机制
finalize()方法最终判定对象是否存活,当一个对象被标记为垃圾对象后,如果该对象重写了finalize()方法则不会立刻回收该对象,此时该对象有一次自救的机会,只要重新与引用链上的任何的一个对象建立关联即可。如果对象这时候还没逃脱,那基本上它就真的被回收了。一般情况下对象会在Eden区中创建,当存满后进行MinorGC,将存活的对象移至S0区,下一次MinorGC就回收Eden区和S0区,将存活对象移至S1,这其中分代年龄一直递增,默认达到15后就移至老年代。原创 2023-03-10 22:53:03 · 991 阅读 · 0 评论 -
JVM垃圾收集算法、垃圾收集器、三色标记算法
当灰色对象要删除与白色对象的引用关系时,这个删除被保存下来,在并发表姐结束后,再将这些记录过的引用关系中的灰色对象为根, 重新扫描一次,这样就能扫描到白色的对象,将白色对象直接标记为黑色(显然在可达性分析刚刚开始的阶段, 所有的对象都是白色的, 若在分析结束的阶段, 仍然是白色的对象, 即代表不可达。在标记阶段的某一个时刻中,还未完成标记阶段,这个时候完成了A对象的标记,刚完成标记B对象引用C对象,还没进行D对象的引用标记判断。老年代使用的是Serial Old垃圾收集器,采用的是标记整理算法。原创 2023-03-12 20:26:00 · 702 阅读 · 0 评论 -
JVM内存模型
由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值,并设置得比初始值要大,对于8G物理内存的机器来说,一般我会将这两个值都设置为256M。继续创建对象,继续存放在Eden区中,当又一次存满后就又会触发MinorGC,将Eden去和S0区的存活对象复制到S1区,然后清空Eden去和S0区。原创 2023-03-08 21:59:32 · 199 阅读 · 0 评论