JVM 进阶 — 即时编译入门 前言我们都知道Java是一个跨平台的语言,他的跨平台和C++的源码跨平台不同,Java是字节码跨平台,即Java编译器把Java源代码编译成 .class 的二进制文件,将.class文件部署到不同的JVM实例上解释执行。这种解释执行的方式显然没有直接机器码执行效率来的高。因此Java为了获取更高的执行效率,通过将热点代码编译成机器码,并存储起来反复执行来优化执行效率,那即时编译(JIT)是怎么工 2021-08-02 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM GC篇 — 日志解读与GC调优 前言前面一小节我们简单深入的梳理了垃圾收集器,梳理理解了各个垃圾收集器的原理和回收流程。其中主要的垃圾收集器可以分为“经典垃圾收集器”和“低延迟垃圾收集器”,其中经典垃圾收集器是以Parallel、CMS、G1为首在生产环境经过千万次历练的垃圾收集器。低延迟垃圾收集器们则是最新还处于实验状态的 shenandoah 和 ZGC,这一代的设计目标是在超大堆下依旧能能实现高吞吐低延迟的垃圾收集。但是就 2021-07-25 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM GC篇 — 垃圾收集器(下) 前言前面一小节中,我们梳理了经典的垃圾收集器。从单线程的Serial串行垃圾收集器开始,聊到了CMS最后到G1,并着重的分析了CMS和G1并发垃圾收集流程和部分实现原理。这些垃圾收集器经过数千台服务器的验证淬炼,已经变得相当的成熟可靠,但是真的就是完美的垃圾收集器吗?答案是否定的。今天我们一起来看看相较于“经典”垃圾收集器的全新一代垃圾收集器 Shenandoah 和 ZGC。这种垃圾收集器能够实 2021-06-27 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM GC篇 — 垃圾收集器(上) 前言前面一小节我们介绍了介绍了GC的一般性原理和垃圾回收算法,通过对前面知识的学习,我们基本掌握了垃圾收集的一般理论知识。但是理论终究知识在之上,距离真正的实践还有一定的差距。前面我们提到了第一个带有内存动态分配和垃圾收集的编程语言并不是 Java 而是1960年诞生的Lisp。当然这一小节中我们并不会梳理 Lisp 实现的垃圾收集器。这一小节我们会先从经典垃圾收集器入手,梳理各个垃圾收集器的特性 2021-06-11 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM GC篇 — 一般原理与垃圾收集算法 前言我们都知道 Java 程序员不用像 C++ 程序员一样手动申请和释放对象空间,这是因为 JVM 垃圾回收器的存在。为什么需要垃圾回收呢?因为空间是有限的,而我们运行程序完成各种各样的计算需要申请空间。但是空间不是无限的,如果我们的空间不够申请怎么办?这个时候就要释放内存,删除掉一些不用的无效的空间,来腾出空间来创建我们需要的对象。这就像我们的衣柜一样,我们买衣服回来放在衣柜里面,但是衣柜不是无 2021-06-01 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM 监控与诊断工具 😏 前方多图多代码块预警!!! 前言Java 虚拟机是一个复杂的系统,如果这个复杂的系统是一个黑盒子,那一旦出现了问题那将是非常棘手的,我们将没有任何的方式方法来定位问题,这是不可接受的。因此 JDK 内置了很多的工具去诊断分析问题,这里面不仅包括一些命令行工具还有一些图形化工具,比如命令行有常见的 jps、jinfo、jstat、jmap等,图形化工具也有 jconsole、jvisual 2021-05-26 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM 内存结构与内存模型初步 前言在前面的小节中,总结梳理了 JVM 底层的一些基础的东西,包括 JVM 字节码技术,方法的调用,反射,异常等方法流程,基础的最后一部分梳理了类加载机制和对象的内存布局。有了这一套机制 JVM 能够顺利的读取Java文件,并行执行逻辑。看起来都有了,但是少了一个重要的部分没错,就是内存。这计算机的内存这个部分来的像理所当然一样。其实最原始的计算机是没有内存这个概念的,后来冯诺依曼提出了冯诺依曼结 2021-05-17 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM 基础 — 类加载机制和对象内存布局 前言在前面一篇中提到了方法的调用,方法在类加载阶段会由符号引用替换实际引用或者方法表的索引。Java 的类加载机制又是怎么样的呢?这里聊一个小插曲,我记得我刚毕业那会去面中兴,基础的问题都回答的挺好的但是最后面试官问了我这个问题,Java 虚拟机是怎么加载一个类的?我当时脑子懵了,对象怎么加载到内存?对象是 new 出来的的啊,还要加载?我也对这块不太了解,然后面试官也就没深了问。但是现在看来,如 2021-05-14 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM 基础 — Java 方法调用、反射调用与异常 前言在前一篇中简单介绍了Java 字节码中有关方法调用的一些操作码,但是 java 方法的调用往深了讲又有很多的门道,简单的有方法的重写和重载,深入也有方法的动态绑定和静态绑定,那JVM是如果识别和选定方法的呢?还有有些时候我们并不能直接调用某个目标方法,而是要使用一些特别的手段去调用,也就是我们会经常用到的反射,反射不同于常规的方法调用,这货一上来就不走寻常路,一般方法调用都是先 new 一个对 2021-05-09 Java虚拟机 JVM Java知识结构梳理 学习总结
JVM 基础 — Java 字节码 前言我们通常表述的 JVM 通常有三种意思,JVM 是 Java virtual machine 即 java 虚拟机的缩写,也就是我们通常所指的 JVM。JVM还是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。因此 JVM 也是图灵完备的。当然 JVM 还可以表示一个虚拟机的实例。Java 一个非常重要的特性就是和平台无关,而 JVM 是 2021-05-07 Java虚拟机 JVM Java知识结构梳理 学习总结