![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 51
快乐是
细心认真
展开
-
java如何定位死锁
使用arthas非常简单运行thread -b 即可,见下图arthas安装见官网 https://arthas.gitee.io/install-detail.html测试代码如下package com.dong;import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.concurrent.ExecutorService;import java.util.concurrent.Execu原创 2021-06-02 19:09:41 · 240 阅读 · 0 评论 -
JAVA如何定位死循环原因
首先我们要清楚,死循环会导致当前线程cpu一直处于使用中状态。所以我们首先要找到最近一段时间cpu使用100%的线程,然后找到它所运行的代码块。使用到的工具:arthas、jmap、jvisualvm找到最近cpu使用100%的线程在arthas环境下运行dashboard命令,该命令5秒统计一次,但是线程【pool-1-thread-1】cpu使用时间为4.859,几乎是100%,可以和其它线程比较非常突出,那就是它了导出dump文件先使用jps找到对应的进程编号【xxx】再使用命令原创 2021-06-02 18:20:47 · 1060 阅读 · 0 评论 -
类加载打破双亲委派模型
什么是双亲委派类首先由AppClassLoader加载所需要的类,位于程序目录下如果没有找到要加载的类,则交给ExtClassLoader类加载器进行加载,位于JAVA_HOME/ext目录下最后,类通过上述类加载器都没有加载成功则由BootstrapClassLoader进行加载,位于JAVA_HOME/rt目录下为什么要打破有些接口声明和加载是由jdk完成的,但由应用自己实现。显然在类加载的时候找不到需要的类。此时需要打破双亲委派模型如何打破自定义类加载器继承ClassLoader,覆盖原创 2021-05-18 11:15:43 · 143 阅读 · 0 评论 -
StringBuffer和StringBuilder单线程谁的性能更好
结论:不一样的量级,结果不一样。原因还在分析中,有直到的大拿帮忙回复一下import org.junit.Test;/**@Author jvm@Date 2021/1/28 07:50StringBuffer和StringBuilder性能测试,结果如下count:1WStringBufferExecutor: 7StringBuilderExecutor: 1count:1KWStringBufferExecutor: 347StringBuil原创 2021-01-28 08:09:59 · 246 阅读 · 1 评论 -
JAVA内存管理系列之二:垃圾回收器总览
Serial新生代垃圾回收器,采用复制算法单线程回收,对于小内存和单核CPU,性能优秀,但是当内存过大会回收时间会变长而使程序出现长时间卡顿Parallel Scavenge新生代垃圾回收器,采用复制算法多线程回收,效率很大提升,据说内存大于10G也会出现系统卡顿ParNew同 Parallel Scavenge,只是为了和CMS配合使用CMS老年代垃圾回收器,采用标记清除算法注意:CMS不宜用于生产,因为会产生大量碎片空间,当足够碎片时启用SeriaOld垃圾回收器G1原创 2021-01-16 22:34:23 · 102 阅读 · 0 评论 -
JAVA内存管理系列之一:总览
JAVA内存管理系列之一:总揽什么是垃圾程序已经没有引用的对象,包括栈、堆垃圾定位算法根可达算法,目前流行。从根开始,遍历对象和对象的属性,找出可以触达的对象。遍历完之后不可触达的对象可认定为垃圾GCRoot:线程栈变量、静态变量、常量池、本地方法栈中JNI指针引用计数器(已过时):使用计数器来记录对象引用次数,如果计数器为零,则认为没有引用,可认定为垃圾。但是不能解决循环引用问题 遗留问题:弱引用如何解决垃圾回收算法Marking Sweep 标记清除Coping 拷贝M原创 2021-01-16 19:45:31 · 108 阅读 · 0 评论