JVM
文章平均质量分 95
财高八斗者
交流分享
展开
-
JVM相关 - 深入理解 System.gc()
我们经常在面试中询问究竟会不会触发,网上也有很多人给出了答案,但是这些答案都有些过时了。本文基于最新的 Java 的下一个即将发布的 LTS 版本 Java 17(ea)的源代码,深入解析 System.gc() 背后的故事。原创 2022-12-24 10:17:53 · 102 阅读 · 0 评论 -
关于GC原理和性能调优实践,看这一篇就够了
本文介绍 GC 基础原理和理论,GC 调优方法思路和方法,基于 Hotspot jdk1.8,学习之后你将了解如何对生产系统出现的 GC 问题进行排查解决。原创 2022-12-24 10:03:54 · 611 阅读 · 0 评论 -
一次疑似 JVM native 内存泄漏的排查实录
又因为用了 zip 默认的 InflaterInputStream,导致没有办法在流关闭时调用 java.util.zip.Inflater 类的 end 方法释放 native 内存,只能等到 Finalizer 机制在多次 GC 以后调用,导致了 native 内存可能在短时间内无法释放。方案 1:其实这里明显是程序上设计不合理,没必要每次定时任务都去扫描包,这些包又不会变,扫描一次就可以了,让开发的同学去修改代码,把第一次扫描的结果缓存起来。再加上这里的文件路径每次都变,导致内存白白浪费。原创 2022-12-15 11:39:44 · 505 阅读 · 0 评论 -
通过 JFR 与日志深入探索 JVM - TLAB 原理详解
TLAB(Thread Local Allocation Buffer)线程本地分配缓存区,这是一个线程专用的内存分配区域。既然是一个内存分配区域,我们就先要搞清楚 Java 内存大概是如何分配的。我们一般认为 Java 中 new 的对象都是在堆上分配,这个说法不够准确,应该是大部分对象在堆上的TLAB分配,还有一部分在栈上分配或者是堆上直接分配,可能 Eden 区也可能年老代。同时,对于一些的 GC 算法,还可能直接在老年代上面分配,例如 G1 GC 中的。原创 2022-12-12 09:28:43 · 489 阅读 · 0 评论 -
一些可以显著提高大型 Java 项目启动速度的尝试
async-profiler 是一个非常强大的工具,使用 jvmti 技术来实现。它的 NB 之处在于它利用了 libjvm.so 中 JVM 内部的 API// 从 libjvm.so 中获取 AsyncGetCallTrace 的函数指针句柄}// 事件回调// 调用 AsyncGetCallTrace 获取堆栈}复制代码你可能要说获取个堆栈还需要搞这么复杂,jstack 等工具不是实现的很好了吗?其实不然。原创 2022-12-12 09:25:23 · 354 阅读 · 1 评论