存在morning
乐于了解新技术,善于复盘总结,不是很聪明,但能够持续进步。
展开
-
【深入理解JVM 零】深入理解JVM看这一篇就够了
JVM是Java程序运行的虚拟机,只有理解了其底层机制,才能更好的对Java程序的执行有深入的认知,所谓知其然,也要知其所以然。本篇Chat为接下来的深入理解JVM 精华版本,重点知识,如果某个知识点不理解,可以再深入的看本专栏中的其它Blog内容介绍。一个Java程序的执行流程:Java程序从编写完到使用到最后的回收经历了哪些流程Java程序的编译过程:普通的编译和JIT即时编译,优化措施分别有哪些类Class文件结构:一个Class文件由哪些内容组成,分别有什么作用虚拟机类加载机制:类文件的结原创 2021-03-12 09:53:54 · 409 阅读 · 0 评论 -
【深入理解JVM 一】一个Java程序的执行流程
本篇是《深入理解JVM》系列博客的第一篇,旨在全局把控,先对整体流程有个认识,然后再分阶段详解。程序从编写到执行整体可以划分为以下几个步骤:编辑源码->编译生成class文件、(加载class文件、运行class字节码文件),其中后两个步骤都是在jvm虚拟机上执行的,整体的执行流程如下:编辑生成源代码编辑源代码是经历的第一个环节,编辑源代码,就是我们在任何一个工具上编写源代码,可以是记事本,也可以是IDE,这部分相当于我们在IDEA上 新建一个.java的Class 然后写内容,这里我们创建几个原创 2021-03-01 09:10:24 · 1688 阅读 · 0 评论 -
【深入理解JVM 二】Java程序的编译过程
本篇是深入理解JVM的第二篇,上一篇在全面理解Java程序的整体流程之后,这一篇开始详细的按照Java代码执行顺序分模块的深入理解。首先第一个阶段我们知道,就是Java代码要编译为字节码文件,当然因为Java编译有些优化策略,所以具体而言有一些详细划分:将 *.java文件转为 *.class的过程称为编译器的前端(前端编译)。例如:JDK的javac编译器。把字节码( *.class文件) 转变为 本地机器码 的过程称为Java虚拟机的即时编译运行期(JIT编译器,Just In Time)。例如:原创 2021-03-01 09:11:18 · 622 阅读 · 0 评论 -
【深入理解JVM 三】类Class文件结构
前文我们提到过javac编译会将Java源码(对应于一个类 / 抽象类 / 接口的定义信息)编译为class类文件,由字节码生成技术(如javassist / CGLib / ASM)生成,以内存中二进制流形式存在,以磁盘文件形式存在。也称之为字节码,可以看作Java 虚拟机的可执行文件,通过理解类文件结构,为之后的类加载提供一种可以理解的数据结构。类class文件可以说是无关性的基石,通过这样一个中间文件,Java不光可以实现平台无关,也可以逐步实现语言无关。也就是说Java 虚拟机 & Cla原创 2021-03-01 09:12:30 · 330 阅读 · 2 评论 -
【深入理解JVM 四】虚拟机类加载机制
上一篇Blog我们了解了字节码文件,本篇Blog来了解下JVM的内部构造为接下来的字节码文件的类加载、执行和垃圾回收做好基础准备,什么是JVM?到了本篇Blog才正式进入JVM的学习,JVM其实就是java的虚拟机,它将编译好的字节码文件翻译成机器能识别的机器语言,然后执行。主要包括类加载,执行(运行字节码指令),垃圾回收三个功能模块他们都作用于运行时数据区域。下图描述了各个功能模块作用的内存区域。类加载机制: 虚拟机首先需要把编译完成的字节码文件通过类加载器来加载到运行时数据区域运行时数据区域: 在原创 2021-03-01 09:15:07 · 221 阅读 · 0 评论 -
【深入理解JVM 五】JVM运行时数据区域
在上一篇Blog中我们正式将class文件加载到了虚拟机中,上文中我们仅仅提到了方法区,其实不光方法区,其它的运行时数据区我们也需要详细介绍下,在了解了运行时数据区域后,才能明白执行引擎如何作用,垃圾回收系统如何工作。以下是运行时数据区域在JVM中的展现:一个段Java代码的生命周期都会少不了上图这几个步骤,也就是Java代码首先会被编译成字节码文件,之后被类加载器加载到运行时数据区域,接着被执行引擎运行,最后垃圾收集器回收对象。运行时数据区域从上图中我们可以看到运行时数据区由5部分内容组成,这些区原创 2021-03-01 09:15:54 · 162 阅读 · 0 评论 -
【深入理解JVM 六】虚拟机字节码执行系统
前边几篇Blog分别介绍了JVM的类加载机制、运行时数据区域,那么字节码文件已然被加载到了JVM的内存中来,接下来就是执行它了。虚拟机字节码执行引擎的位置如下图所示,除了本地方法栈,其他运行时数据区域它都有相关执行内容。执行引擎是java虚拟机核心的组成部分之一,虚拟机的执行引擎是由软件自行实现的。执行引擎(Execution Engine)的任务就是将字节码指令解释/编译为对应平台上的本地机器指令。执行原则如下:执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于PC寄存器。每当执行完一原创 2021-03-01 09:16:43 · 230 阅读 · 0 评论 -
【深入理解JVM 七】JVM垃圾回收机制
前边几篇Blog分别介绍了JVM的类加载机制、运行时数据区域,字节码的执行,在执行完成后程序发挥完了自己的作用,线程独有的程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,而线程共享的堆和方法区却不可以,需要进行垃圾回收,这就用到了我们的JVM垃圾回收机制。垃圾回收机制首先提出三个问题:1,哪些内存需要回收? 2,什么时候回收? 3,如何回收?基于这三个问题分别详细展开进行介绍。垃圾回收范围回收区域在JDK1.8之前主要集中在Java堆和方法区。程序计数器、虚拟机栈、本地方法原创 2021-03-01 09:17:26 · 374 阅读 · 0 评论