![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 85
葵续浅笑
争取每天都有进步!
展开
-
从方法调用看Java语言的 `静态多分派,动态单分派` 特性
方法调用方法调用对虚拟机来说并不只是执行一个方法,更重要的是确定要执行的目标方法,比如在复写的情况下,要知道该调用父类还是子类的方法。而在重载的情况下,又要在多个同名的方法中选取一个执行。当我们慢慢打开虚拟机的黑盒时,对虚拟机大致的执行逻辑也就一目了然。解析调用在class文件字节码中,因为没有分配内存,调用方法都是一个个符号引用表示依赖关系,在类加载的解析阶段,符号引用会转换为直接引用(确定内存地址),这种在 编译期间即可知,运行期间不会变 的叫做解析, 而符合这种方法有静态方法,私有方法,被f原创 2021-09-01 10:58:12 · 221 阅读 · 0 评论 -
G1调优实践日记--被误解的MetaspaceSize
MetaspaceMetaspace 大家应该很熟悉了,所有线程共享的一块内存区域,主要存放已被虚拟机加载的类定义,方法定义,常量等一些元数据信息,运行时常量池(Runtime Constant Pool)也是方法区的一部分,Class 文件中的常量池表(Constant Pool Table,里面各种字面量和符号引用),被类加载后就放入方法区的运行时常量池 。运行时常量池并不只有编译时才往里放东西,运行时也可以放新的常量,比如 String.intern()。有一个别名叫“非堆”。jdk1.8以后直接原创 2021-08-27 18:01:23 · 4000 阅读 · 0 评论 -
G1调优实践日记--G1HeapWastePercent和InitiatingHeapOccupancyPercent的应用
背景最近有个算文本相似度的需求,当然这算法copy过来没做过什么验证就直接上线了,然后应用程序莫名就开始OOM,然后进程直接被kill掉,当然一开始我没想起来是这段算法代码的锅,我把java_pid18776.hprof文件down下来先用jprofiler研究了一番,居然发现没有什么大对象,然后我以为是其它原因,比如kafka消费量大导致的问题,然后去折腾jvm参数。直接导致我因为没有找到根本原因白白浪费时间。但是有失必有得,这次我也了解了G1的一些有用的调优参数,帮助我后期更了解G1顺便抱怨一句,下原创 2020-11-11 18:06:40 · 14297 阅读 · 5 评论 -
String与常量池
这一篇主要还是记录一下String 对象的创建,通过一个个小例子总结一下 String a = "1"; String b = "1"; System.out.println(a == b);这个 a 和 b 取的都是 Constant pool 常量池,我们用javac看一下字节码文件。javap -v StringJson 的执行结果,可以看到 String 1 取的都是 Constant pool 里的#2, 那程序的执行结果也很明确了, 为原创 2020-06-14 14:19:52 · 130 阅读 · 0 评论 -
记一次OOM排查过程(入门版)
第一次线上遇到问题,最近也在学jvm,记录一下,算是一个入门版jvm故障排查,希望能给新手带来一点干货。背景机器 (2c8g) 默认jvm部分关键参数配置:Xmx 最大堆内存Xms 最小堆内存UseG1GC 使用G1垃圾回收器PrintGCDetails/PrintGC 打印GC详细日志HeapDumpOnOutOfMemoryError 这个是故障排查关键,会在OOM的时候生成...原创 2019-06-06 10:43:14 · 1801 阅读 · 0 评论