摘要: 1.src\share\vm\opto\compile.hpp 设置字段为不可重写的属性 2.src\share\vm\classfile\classFileParser.cpp 在类加载阶段验证其是否继承了final类 验证是否重写final方法 解析方法时,将修饰符进行传递 3.final变量 阅读全文
posted @ 2021-01-15 18:15 大众思索 阅读(171) 评论(0) 推荐(0) 编辑
摘要: GC调优 固定参数: -Xms100m -Xmx100m -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:gclog.txt 1.并行收集器 实时监控结果如图: 从图中可以看到,在30s内发生了4618次YGC,耗时6.862s;发生了FullG 阅读全文
posted @ 2021-01-15 03:26 大众思索 阅读(74) 评论(0) 推荐(0) 编辑
摘要: 逃逸分析,在JDK1.7以后,默认开启的一个配置 会进行判断当前对象是否存在逃逸行为,逃逸分为:方法逃逸和线程逃逸; 方法逃逸:当前对象是否被其他方法引用; 线程逃逸:当前对象是否被其他线程引用; 如果没有逃逸是怎么优化当前对象? 1.栈上分配 直接在栈上分配即可 2.标量替换 例: Person  阅读全文
posted @ 2021-01-15 00:32 大众思索 阅读(109) 评论(0) 推荐(0) 编辑
摘要: ├─agent Serviceability Agent的客户端实现 ├─make 用来build出HotSpot的各种配置文件 ├─src HotSpot VM的源代码 │ ├─cpu CPU相关代码(汇编器、模板解释器、ad文件、部分runtime函数在这里实现) │ ├─os 操作系相关代码 阅读全文
posted @ 2021-01-11 14:49 大众思索 阅读(91) 评论(0) 推荐(0) 编辑
摘要: 为啥加锁可以解决可见性问题呢?因为某一个线程进入synchronized代码块前后,线程会获得锁,清空工作内存,从主内存拷贝共享变量最新的值到工作内存成为副本,执行代码,将修改后的副本的值刷新回主内存中,线程释放锁。 而获取不到锁的线程会阻塞等待,所以变量的值肯定一直都是最新的。 阅读全文
posted @ 2021-01-11 00:48 大众思索 阅读(67) 评论(0) 推荐(0) 编辑
摘要: 需要 原因: 防止指令重排; 其实在JAVA中进行new对象时, 有可能第一个线程进行创建的过程中,并且初始化完毕,第二个线程判断当前的指针不为空,则将对象返回,导致出错,所以需要加上volatile 阅读全文
posted @ 2021-01-11 00:25 大众思索 阅读(120) 评论(0) 推荐(0) 编辑
摘要: 根据追踪volatile反编译的class文件解析后发现 ACC_VOLATILE,通过查阅官网规范发现这个方法底层调用 storeload->fence->汇编指令 lock add1 0 * 0 相当于什么都没有做,只是为了执行汇编lock指令防止重新排序 HSDIS(HotSpot disas 阅读全文
posted @ 2021-01-11 00:02 大众思索 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2021-01-10 22:18 大众思索 阅读(70) 评论(0) 推荐(0) 编辑
摘要: help——查看命令帮助信息 cat——打印文件内容,和linux里的cat命令类似 pwd——返回当前的工作目录,和linux命令类似 cls——清空当前屏幕区域 session——查看当前会话的信息 reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重 阅读全文
posted @ 2021-01-10 21:44 大众思索 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 常用工具 1.jps 主要是看虚拟机的相关参数配置 命令: JPS 查看运行的进程 2.Jinfo X 实时调整和查看虚拟机参数 命令: -flags 只查看JVM的配置信息 -sysprops 查看系统参数 +PrintGCDetails 增加GC详情 3.jstat 类加载,内存,垃圾收集,ji 阅读全文
posted @ 2021-01-08 01:01 大众思索 阅读(65) 评论(0) 推荐(0) 编辑