写点什么

跟小师妹一起学 JVM- 系列文章

作者:程序那些事
  • 2021 年 11 月 28 日
  • 本文字数:1724 字

    阅读完需:约 6 分钟

跟小师妹一起学JVM-系列文章

JVM 是 JAVA 之所以强大的核心,他让普通程序员摆脱了手动分配和释放对象的烦劳,从 C++那复杂的对象管理中释放出来,专注于核心业务的编写,从此以后普通程序员也能写出专业 C++程序员那么完美的程序。

当然,小师妹不屑于只做一个普通的程序员,她想要的更多,快跟着小师妹一起来和大师兄学一学 JVM 的底层实现和原理吧,实现从普通程序员到高级程序员的转变!


JVM 的架构和执行过程

JVM 也叫 Java Virtual Machine,它是 java 程序运行的基础,负责将 java bytecode 转换成为适合在各个不同操作系统中运行的机器代码并运行。今天我们和小师妹一起走进 java 的核心 JVM,领略 java 在设计上的哲学。


GC 的垃圾回收算法

JVM 的重要性不言而喻了,如果把 java 的应用程序比作一辆跑车,那么 JVM 就是这辆车的发动机,没有它,java 程序就成了空中楼阁,无根浮萍。而在 JVM 中有一块内存区域叫做运行时数据区域,存储了运行时所需要的所有对象,而 Heap Area 则是其中最大的一块。


深入理解 JIT 和编译优化

小师妹已经学完 JVM 的简单部分了,接下来要进入的是 JVM 中比较晦涩难懂的概念,这些概念是那么的枯燥乏味,甚至还有点惹人讨厌,但是要想深入理解 JVM,这些概念是必须的,我将会尽量尝试用简单的例子来解释它们,但一定会有人看不懂,没关系,这个系列本不是给所有人看的。


JDK14 中 JVM 的性能优化

上一篇文章我们讲到了 JVM 为了提升解释的性能,引入了 JIT 编译器,今天我们再来从整体的角度,带小师妹看看 JDK14 中的 JVM 有哪些优化的方面,并且能够从中间得到那些启发。


JIT 中的 LogCompilation

我们知道在 JVM 中为了加快编译速度,引入了 JIT 即时编译的功能。那么 JIT 什么时候开始编译的,又是怎么编译的,作为一个高傲的程序员,有没有办法去探究 JIT 编译的秘密呢?答案是有的,今天和小师妹一起带大家来看一看这个编译背后的秘密。


JIT 中的 PrintCompilation

上篇文章我们讲到了 JIT 中的 LogCompilation,将编译的日志都收集起来,存到日志文件里面,并且详细的解释了 LogCompilation 日志文件中的内容定义。今天我们再和小师妹一起学习 LogCompilation 的姊妹篇 PrintCompilation,看看都有什么妙用吧。


java 的字节码 byte code 简介

Byte Code 也叫做字节码,是连接 java 源代码和 JVM 的桥梁,源代码编译成为字节码,而字节码又被加载进 JVM 中运行。字节码怎么生成,怎么查看字节码,隐藏在 Byte Code 背后的秘密是什么呢?快跟小师妹一起来看看吧。


JIT 中的 PrintAssembly

想不想了解 JVM 最最底层的运行机制?想不想从本质上理解 java 代码的执行过程?想不想对你的代码进行进一步的优化和性能提升?

如果你的回答是 yes。那么这篇文章非常适合你,因为本文将会站在离机器码最近的地方来观看 JVM 的运行原理:Assembly。


逃逸分析和 TLAB

逃逸分析我们在 JDK14 中 JVM 的性能优化一文中已经讲过了,逃逸分析的结果就是 JVM 会在栈上分配对象,从而提升效率。如果我们在多线程的环境中,如何提升内存的分配效率呢?快来跟小师妹一起学习 TLAB 技术吧。


JIT 中的 PrintAssembly 续集

上篇文章和小师妹一起介绍了 PrintAssembly 和 PrintAssembly 在命令行的使用,今天本文将会更进一步讲解如何在 JDK8 和 JDK14 中分别使用 PrintAssembly,并在实际的例子中对其进行进一步的深入理解。


cache line 对代码性能的影响

读万卷书不如行万里路,讲了这么多 assembly 和 JVM 的原理与优化,今天我们来点不一样的实战。探索一下怎么使用 assembly 来理解我们之前不能理解的问题。


JVM 中的 Safepoints

java 程序员都听说过 GC,大家也都知道 GC 的目的是扫描堆空间,然后将那些标记为删除的对象从堆空间释放,以提升可用的堆空间。今天我们会来探讨一下隐藏在 GC 背后的一个小秘密 Safepoints。


Dirty cards 和 PLAB

分代垃圾回收器在进行 minor GC 的时候会发生什么操作呢?有没有什么提高效率的手段呢?今天我们和小师妹一起来了解一下垃圾回收中的 Dirty cards 和 PLAB


JIT 的 Profile 神器 JITWatch

老是使用命令行工具在现代化社会好像已经跟不上节奏了,尤其是在做 JIT 分析时,使用 LogCompilation 输出的日志实在是太大了,让人望而生畏。有没有什么更加简便的方法来分析 JIT 日志呢?快来和小师妹一起来学习 JITWatch 吧。


发布于: 22 小时前阅读数: 15
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
跟小师妹一起学JVM-系列文章