`

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)介绍 #### 关键知识点概述: 1. **JAVA文件的编译与执行**:JAVA程序首先通过编译器转换为中间代码(字节码),然后由JVM解释执行。 2. **JVM的角色与功能**:JVM作为JAVA程序...

    揭秘Java虚拟机-JVM设计原理与实现

    《揭秘Java虚拟机-JVM设计原理与实现》这本书深入探讨了Java虚拟机(JVM)的工作原理及其在Java编程中的核心地位。Java虚拟机是Java平台的核心组成部分,它负责执行字节码,为开发者提供了跨平台的运行环境。以下是...

    下载 java JVM INSTR 反编译

    1. **版本兼容性**:确保所下载的反编译工具与目标JVM版本兼容,不同版本的Java字节码格式可能会有所变化。 2. **许可证问题**:反编译他人代码时,必须遵守相关许可证规定,不得侵犯他人知识产权。 3. **安全风险...

    JAVA8虚拟机(jvm)规范_Chinese version.rar

    Java虚拟机(JVM)是Java程序运行的核心组件,它负责解释和执行字节码,为Java应用程序提供了一个跨平台的运行环境。《JAVA8虚拟机(jvm)规范_Chinese version》提供了关于JVM的详细中文指南,对于理解Java程序的运行...

    jvmjava,java实现的JVM。.zip

    《Java实现的JVM——深入理解与实践》 在计算机科学领域,Java虚拟机(JVM)是Java语言的关键组成部分,它使得Java程序能够在不同平台上运行而无需重新编译。本项目“jvmjava”是一个开源项目,由Java语言实现,...

    动态编译字符串成java,并且添加class到jvm

    在Java编程中,动态编译字符串成Java代码并将其加载到JVM(Java虚拟机)是一种高级技巧,常用于运行时代码生成、元编程或插件系统等场景。这一技术的核心在于利用Java的反射API和Java Compiler API。下面将详细阐述...

    java虚拟机简介 jvm介绍

    3. **执行引擎**(Execution Engine):解释或编译执行字节码。 4. **本地接口库**(Native Interface Library):提供与底层操作系统交互的能力。 #### 四、JVM的核心特性 1. **跨平台性**:由于Java字节码可以在...

    java11-jvm白皮书

    Java虚拟机(JVM)是Java平台的核心组成部分,它负责执行Java程序。在Java 11中,JVM继续提供跨平台的兼容性和高效的运行环境。它将Java源代码编译成字节码,然后在运行时动态地解释或即时编译为机器码,实现了“一...

    Java语言规范和JVM虚拟机规范.zip

    Java语言规范和JVM虚拟机规范是理解Java编程基础及其执行机制的核心文档,它们由Oracle官方发布,确保了Java开发的准确性和一致性。本压缩包包含的文件详细阐述了Java编程语言的各个方面以及Java虚拟机(JVM)的工作...

    java内存动态编译执行

    Java内存动态编译执行是Java程序运行时的一个关键特性,它涉及到JVM(Java虚拟机)的即时编译器(JIT,Just-In-Time Compiler)和元空间(Metaspace)等核心概念。在Java的世界里,代码首先会被解释器逐行解释执行,...

    java的执行原理和JVM

    JVM是Java程序执行的核心,它负责将Java字节码转换为特定平台的机器码。JVM的主要功能包括: - **加载.class文件**:读取并加载已编译好的字节码文件。 - **管理内存**:为Java程序分配内存,并管理内存的使用情况...

    java -jvm 内存分配和jvm调优

    Java JVM(Java虚拟机)内存分配与调优是Java开发者必须掌握的重要技能,它涉及到程序的性能优化和稳定性。在Java应用中,JVM扮演着至关重要的角色,它负责解析字节码、管理内存以及执行线程等。本文将深入探讨JVM...

    JAVA命令大全-JVM设置.rar

    4. **JVM诊断**:`jinfo`显示JVM配置信息,`jstack`打印线程堆栈跟踪,`jcmd`执行JVM命令,`jdiag`(在某些JDK版本中)提供诊断工具集合。 其次,`JVM设置收藏.txt`可能包含以下内容: 1. **JVM调优**:JVM调优...

    java面试题_jvm(21题)

    Java虚拟机(JVM)是Java程序运行的基础,它是一个抽象的执行环境,负责解析字节码并将其转换为实际的机器指令。在Java面试中,JVM相关的知识经常是考察的重点,因为它直接关系到程序的性能优化和内存管理。以下是对...

    java虚拟机JVM详解ppt

    JVM通过屏蔽不同操作系统之间的差异,使得Java程序无需重新编译即可在不同的平台上运行。 - **自动内存管理**:JVM提供了一套自动化的内存管理机制,包括垃圾回收(GC),使得程序员无需手动管理内存分配和释放。 - **...

    JAVA虚拟机(JVM)规范(中文版).rar

    JVM通过解释器逐条解释执行字节码,也可以使用JIT编译器将热点代码编译为机器码,提高执行效率。 ### 内存管理 JVM内存分为新生代、老年代和持久代(在某些JVM实现中是元空间)。垃圾收集器通过不同的算法(如...

    实战Java虚拟机——JVM故障诊断与性能优化

    《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发人员和运维人员必备技能的书籍。本书作者葛一鸣以其丰富的实战经验,详细阐述了JVM(Java Virtual Machine)的工作原理,以及如何有效地进行故障...

    深入理解Java虚拟机++JVM高级特性与最佳实践1

    书中还探讨了Java编译与代码优化,如即时编译(JIT)、逃逸分析、自动装箱拆箱等特性,以及如何通过HotSpot的即时编译器提升程序性能。这部分内容对于提升Java程序的运行效率至关重要。 最后,书本深入剖析了Java...

Global site tag (gtag.js) - Google Analytics