深入理解java虚拟机
文章平均质量分 93
深入理解java虚拟机,极尽化繁为简之妙,从核心理论和实际运用这两个角度去探讨与解析Java虚拟机的奥秘
Xd聊架构
CSDN博客专家,Java领域优质创作者,任大厂架构师,专注Java、云原生、大数据领域
展开
-
深入理解java虚拟机(十四)JVM逃逸分析
Java 中对象的创建一般会由堆内存去分配内存空间来进行存储,在堆内存空间不足的时候,GC 便会对堆内存进行垃圾回收,如果 GC 运行的次数过多,便会影响程序的性能,所以 “逃逸分析” 由此诞生,它的目的就是判断哪些对象是可以存储在栈内存中而不用存储在堆内存中的,从而让其随着线程的消逝而消逝,进而减少了 GC 发生的频率,这也是常见的 JVM 优化技巧之一。原创 2021-12-24 16:48:09 · 10864 阅读 · 4 评论 -
深入理解java虚拟机(十三)Java Mission Control:可持续在线的监控工具
Java Mission Control,曾经是大名鼎鼎的来自BEA公司的图形化诊断工具,随着BEA公司被Oracle收购,它便被融合进OracleJDK之中。在JDK 7 Update 40时开始随JDK一起发布,后来Java SE Advanced产品线建立, Oracle明确区分了Oracle OpenJDK和OracleJDK的差别, JMC从JDK 11开始又被移除出JDK。虽然在2018年Oracle将JMC开源并交付给OpenJDK组织进行管理,但开源并不意味着免费使用, JMC需要与HotS原创 2021-09-01 13:45:08 · 12410 阅读 · 32 评论 -
深入理解java虚拟机(十二)JHSDB:基于服务性代理的调试工具
前言JHSDB虽然是JDK 9中才正式提供,但之前已经以sa-jdi.jar包里面的HSDB(可视化工具)和CLHSDB(命令行工具)的形式存在了很长一段时间。它们两个都是JDK的正式成员,随着JDK一同发布,无须独立下载,使用也是完全免费的。JDK中提供了JCMD和JHSDB两个集成式的多功能工具箱,它们由于有着“后发优势”,能够做得往往比之前的老工具们更好、更强大,下表所示是JCMD、 JHSDB与原基础工具实现相同功能的简要对比。本篇的原创 2021-08-30 11:24:10 · 11640 阅读 · 7 评论 -
深入理解java虚拟机(十一)VisualVM:多合-故障处理工具
文章目录前言一、VisualVM兼容范围与插件安装二、生成、浏览堆转储快照三、分析程序性能四、BTrace动态日志跟踪结尾前言VisualVM在JDK 6 Update 7中首次发布,直到JRockit Mission Control与OracleJDK的融合工作完成之前,它都曾是Oracle主力推动的多合一故障处理工具,现在它已经从OracleJDK中分离出来,成为一个独立发展的开源项目。 VisualVM已不是JDK中的正式成员,但仍是可以免费下载、使用的。VisualVM( All-in-On原创 2021-08-27 14:44:52 · 11303 阅读 · 5 评论 -
深入理解java虚拟机(十)JConsole:Java监视与管理控制台
文章目录一、JConsole介绍二、启动JConsole三、内存监控四、线程监控结尾一、JConsole介绍JConsole( Java Monitoring and Management Console)是一款基于JMX( Java Manage-ment Extensions)的可视化监视、管理工具。它的主要功能是通过JMX的MBean( Managed Bean)对系统进行信息收集和参数动态调整。 JMX是一种开放性的技术,不仅可以用在虚拟机本身的管理上,还可以运行于虚拟机之上的软件中,典型的如原创 2021-08-26 15:48:15 · 11244 阅读 · 7 评论 -
深入理解java虚拟机(九)基础故障处理工具(jmap、jhat、jstack等)
文章目录前言一、jps:虚拟机进程状况工具二、jstat:虚拟机统计信息监视工具三、jinfo: Java配置信息工具四、jmap: Java内存映像工具五、jhat:虚拟机堆转储快照分析工具六、jstack: Java堆栈跟踪工具七、基础工具总结结尾前言大家都知道JDK的bin目录中有java.exe、 javac.exe这两个命令行工具,但并非所有程序员都了解过JDK的bin目录下其他各种小工具的作用。随着JDK版本的更迭,这些小工具的数量和功能也在不知不觉地增加与增强。除了编译和运行Java程序原创 2021-08-25 16:10:49 · 11913 阅读 · 6 评论 -
深入理解java虚拟机(八)内存分配与回收策略实战
文章目录前言一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、长期存活的对象将进入老年代五、空间分配担保结尾前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。一、对象优先在Eden分配二、大对象直接进入老年代三、长期存活的对象将进入老年代四、长期存活的对象将进入老年代五、空间分配担保结尾感谢大家的耐心阅读,如有建议请私信或评论原创 2021-08-23 10:53:56 · 10822 阅读 · 7 评论 -
深入理解java虚拟机(七)GC垃圾回收-虚拟机及垃圾收集器日志、参数总结
文章目录前言一、虚拟机及垃圾收集器日志二、垃圾收集器日志分析样例三、JDK 9前后日志参数变化四、垃圾收集器参数总结结尾前言阅读分析虚拟机和垃圾收集器的日志是处理Java虚拟机内存问题必备的基础技能,垃圾收集器日志是一系列人为设定的规则,没有任何的“业界标准”可言,每个收集器的日志格式都可能不一样。在JDK 9以前, HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环日志大小、输出格式、重定向等设置在不同功能上都要单独解决。直到JDK 9,这种混原创 2021-08-18 09:38:45 · 11158 阅读 · 3 评论 -
深入理解java虚拟机(六)GC垃圾回收-低延迟垃圾收集器(Shenandoah、ZGC)
文章目录前言一、Shenandoah收集器1.Shenandoah介绍2.Shenandoah与G1对比3.Shenandoah工作原理4.Shenandoah并行整理的核心概念-Brooks Pointer5.性能测试二、 ZGC收集器结尾前言衡量垃圾收集器的三项最重要的指标是:内存占用(Footprint)吞吐量(Throughput)延迟(Latency)三者共同构成了一个“不可能三角”,要在这三个方面同时具有卓越表现的“完美”收集器是极其困难甚至是不可能的,一款优秀的收集器通常最多原创 2021-08-17 15:28:36 · 11284 阅读 · 4 评论 -
深入理解java虚拟机(五)GC垃圾回收-经典垃圾收集器
文章目录前言一、Serial收集器(标记-复制算法)二、ParNew收集器(标记-复制算法)三、Parallel Scavenge收集器(标记-复制算法)四、Serial Old收集器(标记-整理算法)五、Parallel Old收集器(标记-整理算法)六、CMS收集器(标记-清除算法)七、Garbage First(G1)收集器八、总结结尾前言如果说收集算法是内存回收的方法论,那垃圾收集器就是内存回收的实践者。本节标题中“经典”二字并非情怀,它其实是讨论范围的限定语,这里讨论的是在JDK 7 Up原创 2021-08-13 15:27:14 · 10959 阅读 · 7 评论 -
深入理解java虚拟机(四)GC垃圾回收-垃圾收集算法
文章目录前言一、分代收集理论二、标记-清除算法三、标记-复制算法四、标记-整理算法结尾前言从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC)两大类,这两类也常被称作“直接垃圾收集”和“间接垃圾收集”。由于引用计数式垃圾收集算法在本专栏讨论到的主流Java虚拟机中均未涉及,所以我们暂不把它作为正文主要内容来讲解,本篇介绍的所有算法均属于追踪式垃圾收集的范畴。一、分代收集理论当前商业虚拟原创 2021-08-12 16:27:00 · 10771 阅读 · 11 评论 -
深入理解java虚拟机(三)GC垃圾回收-对象存活算法
文章目录前言一、引用计数算法二、可达性分析算法结尾前言在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对象)了一、引用计数算法很多教科书判断对象是否存活的算法是这样的:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。笔者面试过很多应届生和一些有多年工作经验的开发人员,他们对原创 2021-08-11 14:22:10 · 10894 阅读 · 5 评论 -
深入理解java虚拟机(二)HotSpot虚拟机对象解析
文章目录前言一、HotSpot虚拟机对象解析1.对象的创建2.对象的内存布局3.对象的访问定位结尾前言介绍完Java虚拟机的运行时数据区域之后,我们大致明白了Java虚拟机内存模型的概况,相信读者了解过内存中放了什么,也许就会更进一步想了解这些虚拟机内存中数据的其他细节,譬如它们是如何创建、如何布局以及如何访问的。对于这样涉及细节的问题,必须把讨论范围限定在具体的虚拟机和集中在某一个内存区域上才有意义。基于实用优先的原则,笔者以最常用的虚拟机HotSpot和最常用的内存区域Java堆为例,深入探讨一下原创 2021-08-11 10:23:24 · 11098 阅读 · 1 评论 -
深入理解java虚拟机(一)JVM内存模型
文章目录前言一、JVM内存模型1.程序计数器2.Java虚拟机栈3.本地方法栈4.Java堆5.方法区6.运行时常量池7.直接内存二、HotSpot虚拟机对象探秘1.对象的创建2.对象的内存布局3.对象的访问定位结尾前言对于从事C、 C++程序开发的开发人员来说,在内存管理领域,他们既是拥有最高权力的“皇帝”,又是从事最基础工作的劳动人民——既拥有每一个对象的“所有权”,又担负着每一个对象生命从开始到终结的维护责任。对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每一个new操作原创 2021-08-10 15:41:34 · 11002 阅读 · 10 评论