深入理解 Java 虚拟机
文章平均质量分 91
IT__learning
这个作者很懒,什么都没留下…
展开
-
Java 方法调用与虚方法
1、静态绑定与动态绑定绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程,这仅仅发生一次。方法调用与方法体的关联也是绑定。在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制相关。有两种类型的绑定:静态绑定在编译时发生,动态绑定在运行时发生。(1)静态绑定当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态绑定。1)private:不能被继承,则不能通过子类对象调用,而只能通过类本原创 2022-01-07 14:01:59 · 2781 阅读 · 0 评论 -
JVM 创建对象过程
Java 中对象的创建方式一般有两种:1)new xxx() 通过new关键字创建实例对象;2)通过反射创建对象。不管哪一种创建方式,JVM 底层的执行过程是一样的。示例程序:public class Person { //静态变量 public static int staicVariabl=1; //成员变量 public int objVariabl; //静态初始代码块 static { staicVariabl原创 2022-01-03 20:04:38 · 785 阅读 · 0 评论 -
Java 基础 —— Class 类文件结构
无关性的基石实现平台和语言无关性的基础是虚拟机和字节码存储格式。Java虚拟机不和任何语言绑定,它只与"class文件"这种特定的二进制文件格式所关联。不仅是Java,其他的比如Kotlin、Groovy等语言也都可以通过编译成字节码文件运行在Java虚拟机上,而Java虚拟机也并不关心被编译成字节码文件之前是什么语言。Class 类文件结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符,这使得整个Class文件中存原创 2021-05-21 17:37:59 · 433 阅读 · 2 评论 -
Java 程序执行流程
一、Java 程序执行流程1、源文件由编译器编译成字节码(ByteCode)Java 源代码编译成 .class 字节码文件,是 Java 的第一次编译。生成的这个 .class 文件就是可以到处运行的文件。2、.Class 字节码文件转换成目标机器代码,由JVM执行引擎来完成字节码无法直接交给硬件执行,需要虚拟机翻译成机器码才能执行。“翻译”的策略有两种:解释执行和编译执行(又称即使编译(JIT))。解释执行是每执行一条字节码的时候把字节码翻译成机器码并执行,优点是启动效率快,缺点是整体的执原创 2021-06-10 11:58:29 · 2777 阅读 · 1 评论 -
Java 基础 —— 编译与优化
Java 技术的编译器Java 技术下的编译期是一段"不确定"的操作过程:可能是一个前端编译器(编译器的前端)把 .java 文件转变成 .class 文件的过程;也可能是指虚拟机的后端运行期编译器( JIT 编译器)把字节码转变为机器码的过程;还可能是使用静态提前编译器( AOT 编译器)直接把 .java 文件编译成本地机器代码的过程。1、编译器的三个方面:● 前端编译器:把 Java 文件转变成 Class 文件。如 Sun的 javac.、Eclipse JDT 中的增量式编译器(ECJ原创 2021-06-06 23:06:25 · 631 阅读 · 3 评论 -
Java 基础 —— Java 内存模型
内存模型产生背景在介绍 Java 内存模型之前,我们先了解一下物理计算机中的并发问题,理解这些问题可以搞清楚内存模型产生的背景。物理机遇到的并发问题与虚拟机中的情况有不少相似之处,物理机的解决方案对虚拟机的实现有相当的参考意义。1、物理机的并发问题(1)硬件的效率问题计算机处理器处理绝大多数运行任务都不可能只靠处理器“计算”就能完成,处理器至少需要与内存交互,如读取运算数据、存储运算结果,这个 I/O 操作很难消除(无法仅靠寄存器完成所有运算任务)。由于计算机的存储设备与处理器的运算速度有几个数量原创 2021-06-02 16:55:59 · 1045 阅读 · 2 评论 -
Java 基础 —— 虚拟机字节码执行引擎
执行引擎执行引擎是 Java 虚拟机最核心的组成部分之一。虚拟机是相对于物理机的概念,这两种机器都有代码执行的能力,区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机执行引擎是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。在 Java 虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观(Facade)。在不同的虚拟机实现里,执行引擎在执行 Java 代码的时候可能会有解释原创 2021-06-01 23:53:36 · 211 阅读 · 2 评论 -
Java 基础 —— JVM 类加载机制
编译期与运行期(1)编译期( 源代码文件.java —> JVM字节码文件.class )源代码文件.java -> 词法分析器 -> tokens流 -> 语法分析器 -> 语法树/抽象语法树 -> 语义分析器 -> 注解抽象语法树 -> 字节码生成器 -> JVM字节码文件*.class(2)运行期( JVM字节码文件.class —> 标机器码 )执行引擎执行:JVM字节码 .class -> 机器无关优化 -> 中间代码翻译 2021-05-24 22:27:27 · 377 阅读 · 1 评论 -
JVM垃圾收集(GC)器—垃圾收集
垃圾收集算法在确定了哪些垃圾可以被回收后,垃圾收集器要做的事情就是开始进行垃圾回收,但是这里面涉及到一个问题是:如何高效地进行垃圾回收。从如何判定对象消亡的角度出发,垃圾收集算法可以划分为“引用计数式垃圾收集”和“追踪式垃圾收集”两大类。由于引用计数式垃圾收集算法在主流Java虚拟机中均未涉及,因此主要介绍追踪式垃圾收集的算法。1、标记—清除法(Mark-Sweep)标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间原创 2021-05-07 22:29:00 · 178 阅读 · 2 评论 -
JVM 垃圾收集(GC)器——垃圾判断
概述垃圾回收(Garbage Collection,GC),顾名思义就是释放垃圾占用的空间,防止内存泄露。有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收。哪些内存需要回收JVM的内存结构包括五大区域:程序计数器、虚拟机栈、本地方法栈、堆区、方法区。其中程序计数器、虚拟机栈、本地方法栈3个区域随线程而生、随线程而灭,因此这几个区域的内存分配和回收都具备确定性(可以认为编译期间就可以确定),方法结束或者线程结束时,内存自然就被回收,因此无需过多考虑回收的问题。Ja原创 2021-05-07 13:16:15 · 307 阅读 · 1 评论 -
JVM——运行时数据区域(内存区域)
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,即运行时数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域是依赖用户线程的启动和结束而建立和销毁。Java虚拟机将所管理的内存分为以下几个运行时数据区域:JDK8 之前的 JVM 内存区域图:JDK8 之后的 JVM 内存布局:1、程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字原创 2021-05-06 22:51:20 · 447 阅读 · 2 评论 -
Java 技术体系简介
Java 技术包含的所有内容:1、Java技术体系2、Java 一次编译,到处运行Java技术的核心就是Java虚拟机,因为所有的Java程序都在虚拟机上运行。Java程序的运行需要Java虚拟机、Java API和Java Class文件的配合。Java虚拟机实例负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例就诞生了。当程序结束,这个虚拟机实例也就消亡。Java支持平台无关性、安全性和网络移动性。而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了原创 2021-05-06 13:48:08 · 3570 阅读 · 0 评论 -
Java虚拟机简介
JVM概念● JVM 是 Java Virtual Machine(Java虚拟机)的缩写,是 JRE 的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM 有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java 虚拟机 JVM 是属于 JRE 的,而现在我们安装 JDK 时也附带安装了 JRE (当然也可以单独安装JRE)。● JVM屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码)原创 2021-05-06 13:50:38 · 725 阅读 · 0 评论