美文网首页
Java代码运行机制(笔记)

Java代码运行机制(笔记)

作者: Monkey007 | 来源:发表于2019-08-09 10:14 被阅读0次

1、为什么Java要在虚拟机里运行?

原因1:Java是一门高级程序语言,语法复杂,抽象度也很高。直接与硬件上运行这种复杂的程序并不现实,所以在运行Java程序之前,需要对其进行一番转换。

       转换的思路,是设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换成该虚拟机所能识别的指令序列,故为Java字节码(Java字节码指令的操作吗(opcaode)被固定一个字节)。

虚拟机的好处:

1、一处编译,到处执行。(一旦一个程序被转换成Java字节码,那么它便可以在不同平台上的虚拟机实现里运行)

    2、虚拟机的另一个好处是它带来的一个托管环境(Managed Runtime)。托管环境能够代替我们处理一些代码中冗长而且容易出错的部分。如自动内存管理与垃圾回收。

    托管环境还提供了诸如数组越界、动态类型、安全权限等的动态检测。

2、Java虚拟机具体是怎样运行Java字节码的?

    HotSpot虚拟机为例,分虚拟机以及底层硬件两个角度解释。

    1、虚拟机角度分析,执行Java代码首先需要将它编译成class文件后加载到Java虚拟机中。加载后的Java类会被存放于方法区(Method Area)中。实际运行时,虚拟机会执行方法区内的代码。Java虚拟机在内存中划分出堆和栈来存储运行时数据

1.2、Java虚拟机会将栈细分为面向Java方法的Java方法栈,面向本地方法(C++写的native方法)的本地方法栈,以及存放各个线程执行位置的PC寄存器。

1.3、运行过程中,每当调用进入一个Java方法,Java虚拟机会在当前线程的Java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小时提前计算好的,而且Java虚拟机不要求栈帧在内存空间里连续分布。

    1.4、当退出当前执行的方法时,不管是正常返回还是异常返回,Java虚拟机均会弹出当前线程的当前栈帧,并将之放弃。

2、从硬件角度分析,Java字节码无法直接执行。所以,Java虚拟机需要将字节码翻译成机器码。

2.1、在HotSpot里面,上述翻译过程有两种形势:第一种是解释执行,即逐条将字节码翻译成机器码并执行;第二种是即时编译(Just-In-Time compilation,JIT),即将一个方法中包含的所有字节码编译成机器码后在执行。

2.2、解释执行的优势在于无需等待编译,而即时编译的优势在于实际运行速度更快。HotSpot默认采用混合模式,集成了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。

3、Java虚拟机运行的运行效率究竟是怎么样的?

3.1、即时编译建立在程序符合二八定律的假设上,也就是20%的代码占据了80%的计算资源

3.2、对于占据大部分的不常用的代码,我们无需消耗时间将其编译成机器码,而是采用解释执行的方式运行;另外,对于仅占据小部分的热点代码,我们则可以将其编译成机器码,以达到理想的运行速度。

总结:

1、Java虚拟机将运行时内存区域划分为5个部分,分别为方法区、堆、PC寄存器、Java方法栈和本地方法栈。Java程序编译而成的class文件,需要先加载至方法区中,方能在Java虚拟机中运行。

2、为了提高运行效率,标准JDK中的HotSpot虚拟机采用的是一种混合执行的策略。

它会解释执行Java字节码,然后会将其中反复执行的热点代码,以方法为单位进行即时编译,翻译成机器码后直接运行在底层硬件之上。


出处:《极客时间》 郑雨迪老师的《深入拆解Java虚拟机》

备注:纯属督促自己复习,梳理每节知识点。如有错误,请多加指出。谢谢

相关文章

  • 2018-05-26 Java学习随笔4——有关Java语言、开

    Java的运行机制和JVM Java语言的运行机制大致如上图所示,Java源文件(源代码等.java文件)先经过J...

  • Java代码运行机制(笔记)

    1、为什么Java要在虚拟机里运行? 原因1:Java是一门高级程序语言,语法复杂,抽象度也很高。直接与硬件上运行...

  • Java基础语法

    java运行机制 编译型 解释型 程序运行机制 1、注释、标志符、关键字 注释: 平时我们编写代码,在代码量比较少...

  • 2018-07-16

    JAVA程序运行机制 要想学习java这门语言必须掌握java的运行机制,java开发必须具备jdk,jre,jv...

  • Java程序运行机制

    Java程序运行机制tags: 基础,Java, Java程序运行机制 Java语言是一种特殊的高级语言,它既具有...

  • 程序的再理解及Java的优势

    目录: 定义程序定义编程编程语言的运行机制PATH 环境的作用保存 Java 的源代码第一个命令:编译 Java ...

  • 个人技术文章系列汇总(csdn)

    Java基础 Effective Java读书笔记 java 几种加载驱动的方法 《重构改善既有代码的设计》代码的...

  • Java跨平台的理解

    Java的运行机制源代码在Java虚拟机JVM下被编译成.class)文件,这是与平台无关的字节码文件,然后再由J...

  • 小白学java

    目录 1、配置java 环境2、java代码规范3、java笔记4、java程序编写 配置java环境 1、下载j...

  • 《深入拆解-Java-虚拟机》笔记(一):Java代码是怎么运行

    转载自《深入拆解-Java-虚拟机》笔记(一):Java代码是怎么运行的 在了解java代码是怎么运行之前的,首先...

网友评论

      本文标题:Java代码运行机制(笔记)

      本文链接:https://www.haomeiwen.com/subject/gqrcjctx.html