JVM
文章平均质量分 60
JVM
Tzk_
初听不知曲中意,再听已是曲中人。
展开
-
ZGC垃圾收集器详解
内存多重映射和染色指针的引入,使 ZGC 的并发性能大幅度提升。ZGC 只有 3 个需要 STW 的阶段,其中初始标记和初始转移只需要扫描所有 GC Roots,STW 时间 GC Roots 的数量成正比,不会耗费太多时间。再标记过程主要处理并发标记引用地址发生变化的对象,这些对象数量比较少,耗时非常短。可见整个 ZGC 的 STW 时间几乎只跟 GC Roots 数量有关系,不会随着堆大小和对象数量的变化而变化。ZGC 也有一个缺点,就是浮动垃圾。原创 2019-09-06 08:52:26 · 831 阅读 · 9 评论 -
几种典型的内存溢出案例
首先,我们创建一个名称为BlowUpJVM的类,之后所有的案例实验都是基于这个类进行。如下所示。原创 2021-03-19 18:56:59 · 4690 阅读 · 20 评论 -
JVM GC如何优化?
因此,更加方便容易的方式是直接设置参数来运行,然后等待运行的结果(即使这需要消耗更多的时间)。关于如何设置内存的大小,没有一个标准答案,如果服务器资源充足并且Full GC能在1s内完成,把内存设为10GB也是可以的,但是大部分服务器并不处在这种状态中,当内存设为10GB时,Full GC会耗时10-30s,具体的时间自然与对象的大小有关。如果分析结果显示运行GC的时间只有0.1-0.3秒,那么就不需要把时间浪费在GC优化上,但如果运行GC的时间达到1-3秒,甚至大于10秒,那么GC优化将是很有必要的。原创 2020-01-01 14:55:17 · 1340 阅读 · 12 评论 -
方法区、堆、栈之间到底有什么关系
这时候就是典型的栈中元素obj指向堆中的Object对象,result的指向和obj的指向为同一个对象。方法区中会包含类的信息,对象保存再堆中,创建一个对象的前提是有对应的类信息,这个类信息就在方法区中。如果还有疑惑,可以再结合上面的字节码图和关系图来看,这样理解就更轻松些。一个Java对象在内存中包括3个部分:对象头、实例数据和对齐填充。如果是下面这种情况,就是典型的方法区中元素指向堆中的对象。方法区中会存放静态变量,常量等数据。进行编译,然后再使用。原创 2019-05-12 10:58:03 · 206 阅读 · 14 评论 -
【JVM】逃逸分析
在Java虚拟机中,Java堆上分配创建对象的内存空间几乎是Java程序员都知道的常识,Java堆中的对象对于各个线程都是共享和可见的,只要持有这个对象的引用,就可以访问到堆中存储的对象数据。相对的,如果一个数据可以继续分解,那它就被称为聚合量(Aggregate),Java中的对象就是典型的聚合量。线程同步本身是一个相对耗时的过程,如果逃逸分析能够确定一个变量不会逃逸出线程,无法被其他线程访问,那么这个变量的读写肯定就不会有竞争,对这个变量实施的同步措施也就可以安全地消除掉。原创 2023-03-04 21:10:39 · 4001 阅读 · 12 评论 -
jvm-基础
jvm-基础。在虚拟机上看: 用top定位哪个进程对cpu的占用过高 ps H -eo pid,tid,%cpu | grep 进程id (用ps命令进一步定位是哪个线程引起的cpu占用过高) jstack 进程id 可以根据线程id 找到有问题的线程,进一步定位到问题代码的源码行号...原创 2022-08-16 14:45:29 · 212 阅读 · 1 评论