`

java编译执行与jvm介绍

 
阅读更多

Java(JVM)是可运行Java的假想算机。只要根据JVM格描述将解器移植到特定的算机上,就能保证经过编译的任何Java上运行。本文首先要介Java文件的编译到最终执行的程,随后JVM格描述作一明。
  
  .Java源文件的编译、下、解
  Java用程序的开发周期包括编译、下、解行几个部分。Java编译程序将Java源程序翻译为JVM行代?节码编译过程同C/C++编译有些不同。当C编译编译生成一个象的代码时在某一特定硬件平台运行而生的。因此,在编译过程中,编译程序通过查表将所有符号的引用转换为特定的内存偏移量,以保程序运行。Java编译器却不将对变量和方法的引用编译为引用,也不确定程序程中的内存布局,而是将些符号引用信息保留在字节码中,由解器在运行程中立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保Java的可移植性和安全性。
  
  运行JVM节码的工作是由解器来完成的。解释执程分三部行:代的装入、代的校和代行。装入代的工作由""class loader)完成。负责装入运行一个程序需要的所有代也包括程序代中的承的和被其用的。当器装入一个类时该类被放在自己的名字空中。除了通符号引用自己名字空以外的没有其他法可以影响其他。在本台算机上的所有都在同一地址空内,而所有从外部引,都有一个自己独立的名字空使得本地共享相同的名字空间获高的运行效率,同又保与从外部引不会相互影响。当装入了运行程序需要的所有后,解器便可确定整个可行程序的内存布局。解符号引用同特定的地址空建立对应关系及查询表。通段确定代的内存布局,Java很好地解决了由超而使子问题,同也防止了代码对地址的非法访问
  
  随后,被装入的代由字节码检查。校器可发现操作数溢出,非法数据化等多种错误。通后,代便行了。
  
  Java节码行有两方式:
  1.时编译方式:解器先将字节码编译成机器,然后再机器
  2.释执行方式:解器通过每次解行一小段代来完成Java节码 序的所有操作。
  通常采用的是第二方法。由于JVM格描述具有足的灵活性,使得将字节码译为机器代的工作
  
  具有高的效率。于那些运行速度要求高的用程序,解器可将Java节码时编译为机器,从而很好地保Java的可移植性和高性能。
  
  .JVM描述
  JVM设计是提供一个基于抽象格描述的算机模型,程序开发提很好的灵活性,同也确保Java可在符合该规范的任何系上运行。JVM实现的某些方面出了具体的定,特Java行代,即字节码(Bytecode)的格式出了明确的格。格包括操作和操作数的法和数标识符的数表示方式、以及Java文件中的Java象、常量冲池在JVM的存映象。些定义为JVM开发提供了所需的信息和开发环境。Java设计者希望给开发以随心所欲使用Java的自由。
  
  JVM了控制Java释执行和具体实现的五种规格,它是:
  JVM指令系
  JVM寄存器
  JVM栈结
  JVM碎片回收堆
  JVM
  
  2.1JVM指令系
  
  JVM指令系同其他算机的指令系极其相似。Java指令也是由 操作和操作数两部分成。操作码为8位二制数,操作数进紧随在操作的后面,其度根据需要而不同。操作用于指定一条指令操作的性(在里我采用汇编符号的形式明),如iload表示从存器中装入一个整数,anewarray表示一个新数分配空iand表示两个整数的""ret用于流程控制,表示从某一方法的用中返回。当度大于8,操作数被分两个以上字存放。JVM采用了"big endian"编码方式来这种情况,即高位bits存放在低字中。 Motorola及其他的RISC CPU采用的编码方式是一致的,而与Intel采用的"little endian "编码方式即低位bits存放在低位字的方法不同。
  
  Java指令系是以Java言的实现为目的设计的,其中包含了用于方法和监视多先程系的指令。Java8位操作度使得JVM最多有256指令,目前已使用了160操作
  
  2.2JVM指令系
  
  所有的CPU均包含用于保存系理器所需信息的寄存器。如果虚机定义较多的寄存器,便可以从中得到更多的信息而不必对栈或内存访问有利于提高运行速度。然而,如果虚机中的寄存器比实际CPU的寄存器多,在实现就会占用理器大量的时间来用常器模寄存器,反而会降低虚机的效率。针对这种情况,JVM置了4个最常用的寄存器。它是:
  pc程序数器
  optop操作数栈顶
  frame当前境指
  vars指向当前境中第一个局部量的指
  所有寄存器均32位。pc用于记录程序的行。optop,framevars用于记录指向Java区的指
  
  2.3JVM栈结
  
  作基于栈结构的算机,JavaJVM信息的主要方法。当JVM得到一个Java节码应用程序后,便为该中一个一个方法建一个框架,以保存方法的状信息。框架包括以下三信息:
  局部
  
  操作数
  
  局部量用于存一个的方法中所用到的局部量。vars寄存器指向该变量表中的第一个局部量。
  境用于保存解Java节码进行解释过程中所需的信息。它是:上次用的方法、局部量指和操作数栈顶底指境是一个行一个方法的控制中心。例如:如果解器要iadd(整数加法),首先要从frame寄存器中找到当前境,而后便从境中找到操作数,从栈顶弹出两个整数行加法运算,最后将栈顶
  操作数用于存运算所需操作数及运算的果。
  
  2.4JVM碎片回收堆
  
  Java例所需的存是在堆上分配的。解器具体承担为类实例分配空的工作。解器在一个例分配完存后,便记录对该实例所占用的内存区域的使用。一旦象使用完,便将其回收到堆中。
  在Java言中,除了new句外没有其他方法象申放内存。内存放和回收的工作是由Java运行系承担的。Java运行系设计者自己决定碎片回收的方法。在SUN公司开发Java器和Hot Java境中,碎片回收用后台线程的方式来行。不但运行系提供了良好的性能,而且使程序设计员摆脱了自己控制内存使用的风险
  
  2.5JVM
  
  JVM有两区:常量冲池和方法区。常量冲池用于存储类名称、方法和字段名称以及串常量。方法区用于存Java方法的字节码区域具体实现方式在JVM格中没有明确定。使得Java用程序的存布局必在运行程中确定,依于具体平台的实现方式。
  
  JVMJava节码的一独立于具体平台的格描述,是Java平台独立性的基。目前的JVM存在一些限制和不足,有待于的完善,但无如何,JVM的思想是成功的。
  
  比分析:如果把Java原程序想象成我C++原程序,Java原程序编译后生成的字节码就相当于C++原程序编译后的80x86的机器(二制程序文件),JVM机相当于80x86算机系,Java器相当于80x86CPU。在80x86CPU上运行的是机器,在Java器上运行的是Java节码
  
  Java器相当于运行Java节码CPU,CPU”不是通硬件实现的,而是用实现的。Java实际上就是特定的平台下的一个用程序。只要实现了特定平台下的解器程序,Java节码就能通器程序在平台下运行,Java跨平台的根本。当前,并不是在所有的平台下都有相Java器程序,也是Java并不能在所有的平台下都能运行的原因,它只能在已实现Java器程序的平台下运行

分享到:
评论

相关推荐

    JAVA文件编译执行与虚拟机(JVM)介绍

    JAVA文件编译执行与虚拟机(JVM)介绍 JAVA 程序员必须了解的知识

    java虚拟机简介 jvm介绍

    Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java...本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。

    Java进阶教程解密JVM视频教程

    JVM 是 Java 程序的运行环境,学习 JVM,方能了解 Java 程序是如何被执行的,为进一步深入底层原理乃至程序性能调优打好基础。通过学习这门课程,你将掌握:1. JVM 内存结构的组成、各部分功能作用,学会利用内存...

    javajvm:用Java编写的玩具JVM

    Java JVM 使用Java 8来实现一个纯解释执行的Java虚拟机。 代码偏向于可读性,忽略性能。 项目的目的在于更加深入的学习和理解Java虚拟机。...现在,将HelloWorld.java编译成HelloWorld.class,然后用JVM运行。

    Java虚拟机(JVM)

    介绍JVM如何编译执行java文件

    jvm指令手册 +JVM必知必会,掌握虚拟机编译过程.rar

    Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行 《JVM必知必会》记录了对JVM的总结及学习笔记,详解...

    JVM基础.doc

    • Java编译执行流程 • ClassFile的格式介绍 • ClassFile中FieldInfo和MethodInfo介绍 • 类型描述Descriptor介绍 • ClassFile中的Attribute介绍 • JVM指令介绍,获得ClassLoader的途径,CAS指令由硬件提供 • ...

    jvm介绍基础,构成和调优

    Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台...

    深入JVM内核 - 原理、诊断与优化

    介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。 第二课 JVM运行机制简介 堆、栈、方法区等 JVM启动流程 内存模型和volatile实例 解释和编译运行的概念 介绍JVM的内部结构、启动流程以及内存模型。...

    深入JVM内核—原理、诊断与优化

    资源名称:深入JVM内核—原理、诊断与优化 教程内容:课程简介:第一周初识JVMJVM分类Java语言规范JVM规范介绍JVM的基本知识和发展历史,并介绍了Java语言规范和JVM规范。第二周JVM运行机制简介堆、栈、方法区等JVM...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    / 262 10.2.3 注解处理器 / 264 10.2.4 语义分析与字节码生成 / 264 10.3 Java语法糖的味道 / 268 10.3.1 泛型与类型擦除 / 268 10.3.2 自动装箱、拆箱与遍历循环 / 273 10.3.3 条件编译 / 275 10.4 实战:...

    Java知识,JVM面试资料

    通过编译成统一的字节码,Java程序可以在任何安装了JVM的平台上执行,无需重新编译。 自动内存管理:JVM 的垃圾回收机制自动管理内存分配和释放,提供了自动内存管理的功能。这大大简化了Java程序员的工作,减少了...

    Java异常处理机制的静态编译实现与优化

    Java程序的编译运行有两种方式:在JVM上动态编译执行其class文件,和静态编译成可执行程序。相比于动态编译执行Java程序,在某些情况下,将Java程序静态编译成本地代码的执行模式,可以获得更好的性能.本文提出了一种...

    java最新面试大全-jvm性能优化

    当虚拟机启动时,解释器可以首先发挥作用,而不必等待编译器全部编译完成再执行,这样可以省去许多不必要的编译时间。并且随着程序运行时间的推移,编译器逐渐发挥作用,根据热点探测功能,,将有价值的字节码编译为...

    详细讲解了jvm在java中应用

    主要包含:JVM概述,内存结构讲解,对象实例化,垃圾回收,类的加载,程序编译,代码的优化,性能监控与调优. JVM:全称 Java Virtual Machine,一个虚拟计算机,Java 程序的运行环境(Java二进制字节码的运行环境) 特点:...

    最新java面试专题01-JVM

    最新jvm面试题合集,涵盖JVM运行时数据区、垃圾回收算法、垃圾回收器、类加载机制、JIT即时编译等核心知识点及常见面试题,一书在手,天下我有。 JVM内存结构:JVM的内存结构主要包括堆内存、方法区、栈(包括Java...

    简单实用JVM参数配置

    JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令...

    组装:将WebAssembly编译为JVM和其他WASM工具

    Asmble是将代码编译为JVM字节码的编译器。 它还包含用于从命令行和JVM语言处理WASM代码的解释器和实用程序。 特征 WASM到JVM字节码编译器(无需运行时) WASM解释器(一次可逐步执行的指令) WASM二进制,WASM文...

    JVM原理讲解和调优

    JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 Java语言的一个非常重要的特点就是与平台的...

    深入Java虚拟机(原书第2版).pdf【附光盘内容】

    第1章 java体系结构介绍 1.1 为什么使用java 1.2 网络带来的挑战和机遇 1.3 体系结构 1.3.1 java虚拟机 1.3.2 类装载器的体系结构 1.3.3 java class文件 1.3.4 java api 1.3.5 java程序设计...

Global site tag (gtag.js) - Google Analytics