![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 95
匿名者X
匿名者X
展开
-
JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇
1. 前言本文详细讲解 MAT 众多内存分析工具功能,这些功能组合使用异常强大,熟练使用几乎可以解决所有的堆内存离线分析的问题。我们将功能划分为4类:内存分布详情、对象间依赖、对象状态详情、按条件检索。每大类有多个功能点,本文会逐一讲解各功能的场景及用法。此外,添加了原创或引用案例加强理解和掌握。注:在该系列开篇文章《JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》中介绍了 MAT 的使用场景及安装方法,不熟悉 MAT 的读者建议先阅读上文并安装,本文案例很容易在本地实践。另外,上文中产品介绍转载 2021-01-04 21:34:28 · 2172 阅读 · 0 评论 -
JVM 内存分析工具 MAT 的深度讲解与实践——入门篇
1. MAT 工具简介MAT(全名:Memory Analyzer Tool),是一款快速便捷且功能强大丰富的 JVM 堆内存离线分析工具。其通过展现 JVM 异常时所记录的运行时堆转储快照(Heap dump)状态(正常运行时也可以做堆转储分析),帮助定位内存泄漏问题或优化大内存消耗逻辑。1.1 MAT 使用场景及主要解决问题场景一:内存溢出,JVM堆区或方法区放不下存活及待申请的对象。如:高峰期系统出现 OOM(Out of Memory)异常,需定位内存瓶颈点来指导优化。场景二:内存泄漏,不会转载 2021-01-04 17:22:14 · 817 阅读 · 0 评论 -
Java对象的内存布局
一个对象在内存中究竟是怎样进行布局的,如何依据代码去确定对象占据的大小,本文将进行粗略地探讨。对象在内存中的布局,主要有3个组成部分,包括对象头,实例数据与对齐填充。确定对象的大小,也是从这3个组成部分的入手对象的内存布局对象头其中对象头中又包括Mark Word与Klass Word。当该对象是一个数组时,对象头还会增加一块区域,用来保存数组的长度。以64位系统为例,对象头存储内容如下图所示|---------------------------------------------------原创 2020-12-28 14:52:24 · 195 阅读 · 1 评论 -
JVM 为什么元空间替换永久代
背景:首先需要明确的是,以下我们讨论的HotSpot虚拟机,其他类型的虚拟机,例如JRockit与J9等,压根就没有永久代的概念。因此,下面所说的“虚拟机”都是HotSpot版本的。要想理解这种变化的原因,需要先理解方法区、永久代与元空间的概念与之间的关系。方法区与永久代,元空间之间的关系方法区是一种规范,不同的虚拟机厂商可以基于规范做出不同的实现,永久代和元空间就是出于不同jdk版本的实现。说白了,方法区就像是一个接口,永久代与元空间分别是两个不同的实现类而已。只不过永久代是这个接口最初的实现类原创 2020-12-27 23:38:37 · 277 阅读 · 0 评论 -
深入理解jvm内存 模型
并发编程模型的分类在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。在消息传递的并发模型里,线程之间没有公共状态,线程之间必...转载 2018-06-05 06:37:18 · 142 阅读 · 0 评论 -
JVM 关于对象分配在堆、栈、TLAB的理解
引言 我们知道,一般在java程序中,new的对象是分配在堆空间中的,但是实际的情况是,大部分的new对象会进入堆空间中,而并非是全部的对象,还有另外两个地方可以存储new的对象,我们称之为栈上分配以及TLAB栈上分配为什么需要栈上分配? 在我们的应用程序中,其实有很多的对象的作用域都不会逃逸出方法外,也就是说该对象的生命周期会随着方法的调用开始而开始,方法的调用结束而结束,对于这种对象,是不是该考虑将对象不在分配在堆空间中呢? 因为一旦分配在堆空间中,当方法调用结束,没有了引用指转载 2020-11-30 14:22:33 · 585 阅读 · 2 评论 -
jvm参数(调优)+jvm内存的年轻代/老年代/持久代
/usr/local/jdk/bin/java -Dresin.home=/usr/local/resin -server-Xms1800M-Xmx1800M-Xmn300M-Xss512K-XX:PermSize=300M-XX:MaxPermSize=300M-XX:SurvivorRatio=8-XX:MaxTenuringThreshold=5-XX:GCTimeRatio=19-Xnoclassgc-XX:+DisableExpli...转载 2020-11-30 09:01:33 · 911 阅读 · 0 评论 -
GC之CMS 垃圾收集器
CMS是老年代垃圾收集器,在收集过程中可以与用户线程并发操作。它可以与Serial收集器和Parallel New收集器搭配使用。CMS牺牲了系统的吞吐量来追求收集速度,适合追求垃圾收集速度的服务器上。可以通过JVM启动参数:-XX:+UseConcMarkSweepGC来开启CMS。CMS收集过程CMS 处理过程有七个步骤:初始标记(CMS-initial-mark) ,会导致stw; 并发标记(CMS-concurrent-mark),与用户线程同时运行; 预清理(CMS-concurr转载 2020-11-02 14:53:55 · 444 阅读 · 0 评论