`
ymq267
  • 浏览: 130360 次
  • 性别: Icon_minigender_1
  • 来自: 吉林
社区版块
存档分类
最新评论

Java虚拟机工作原理

 
阅读更多

Java虚拟机工作原理虚拟机工作原理Java虚拟机Java虚拟机原理虚拟机 .

一、什么是Java虚拟机
   jav虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。java虚拟机有自己想象的硬件,如处理器、堆栈、寄存器、还有相应的指定系统。
   总结:java虚拟机--处理器、堆栈、寄存器、指令系统。
二、为什么使用Java虚拟机
   Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。
   总结:java平台无关性、把目标代码编译成字节码
三、Java虚拟机的生命周期
    一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时它才运行,程序结束时它就停止。假如你同时运行三个Java程序,就会有三个运行中的Java虚拟机。
   Java虚拟机总是开始于一个main()方法,这个方法必须是公有public、返回void、直接接收一个字符串数组。在程序执行时,你必须给Java虚拟机指明这个包含有main()方法的类名。
   Main()方法是程序的起点,它被执行的线程初始化为程序的初始线程。程序中其它的线程都由他来启动。Java中的线程分为两种:守护线程 (daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可以把自己的程序设置为守护线程。包含Main()方法的初始线程不是守护线程。
     只要Java虚拟机中还有普通的线程在执行,Java虚拟机就不会停止。如果有足够的权限,你可以调用exit()方法终止程序。
   总结:Main()方法是程序的起点、守护线程和普通线程、权限足够调用exit()终止程序

三、Java虚拟机的体系结构
   在Java虚拟机的规范中定义了一系列的子系统、内存区域、数据类型和使用指南。这些组件构成了Java虚拟机的内部结构,他们不仅仅为Java虚拟机的实现提供了清晰的内部结构,更是严格规定了Java虚拟机实现的外部行为。
   每一个Java虚拟机都由一个类加载器子系统(class loader subsystem),负责加载程序中的类型(类class和接口interface),并赋予唯一的名字。每一个Java虚拟机都有一个执行引擎(execution engine)负责执行被加载类中包含的指令。
   总结:类加载子系统、执行引擎
   程序的执行需要一定的内存空间,如字节码、被加载类的其他额外信息、程序中的对象、方法的参数、返回值、本地变量、处理的中间变量等等。Java虚拟机将这些信息统统保存在数据区(data area)中。虽然每个Java虚拟机的实现中都包含数据区,但是Java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了 Java虚拟机实现者自己发挥。不同Java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他以下可能只占用很少的内存;一些实现可能会使用虚拟内存,而其它的则不使用。这种比较精炼的Java虚拟机内存规约,可以使得Java虚拟机可以在广泛的平台上被实现。
     数据区中的一部分是整个程序共有,其他部分被单独的线程控制。每一个Java虚拟机都包含方法区(method area)和堆(heap),他们都被整个程序共享。Java虚拟机加载并解析一个类以后,将从类文件中解析出来的信息保存与方法区中。程序执行时创建的 对象都保存在堆中。
     当一个线程被创建时,会被分配只属于它自己的PC寄存器“pc register”(程序计数器)和Java堆栈(Java stack)。当线程不调用本地方法时,PC寄存器中保存线程执行的下一条指令。Java堆栈保存了一个线程调用方法时的状态,包括本地变量、调用方法的 参数、返回值、处理的中间变量。调用本地方法时的状态保存在本地方法堆栈中(native method stacks),可能再寄存器或者其他非平台独立的内存中。
     Java堆栈有堆栈块(stack frames (or frames))组成。堆栈块包含Java方法调用的状态。当一个线程调用一个方法时,Java虚拟机会将一个新的块压到Java堆栈中,当这个方法运行结束时,Java虚拟机会将对应的块弹出并抛弃。
     Java虚拟机不使用寄存器保存计算的中间结果,而是用Java堆栈在存放中间结果。这是的Java虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java虚拟机。
   总结:栈区是存放局部变量的。          方法区是存放类的类型信息,包括类的静态变量和方法
          堆:存放类对象
四、数据类型(Data Types)
     所有Java虚拟机中使用的数据都有确定的数据类型,数据类型和操作都在Java虚拟机规范中严格定义。Java中的数据类型分为原始数据类型 (primitive types)和引用数据类型(reference type)。引用类型依赖于实际的对象,但不是对象本身。原始数据类型不依赖于任何东西,它们就是本身表示的数据。
   所有Java程序语言中的原始数据类型,都是Java虚拟机的原始数据类型,除了布尔型(boolean)。当编译器将Java源代码编译为字节码时,使用整型(int)或者字节型 (byte)去表示布尔型。在Java虚拟机中使用整数0表示布尔型的false,使用非零整数表示布尔型的true,布尔数组被表示为字节数组,虽然它们可能会以字节数组或者字节块(bit fields)保存在堆中。除了布尔型,其它的原始类型都是Java虚拟机中的数据类型。在Java中数据类型被分为:整形的byte,short,int,long;char和浮点型的float,double。Java语言中的数据类型在任何主机上都有同样的范围。
   在Java虚拟机中还存在一个Java语言中不能使用的原始数据类型----返回值类型(return value)。这种类型被用来实现Java程序中的“finally classes”,具体的参见“Finally Classes”。
   引用类型可能被创建为:类类型(class type),接口类型(interface type),数组类型(array type)。他们都引用被动态创建的对象。当引用类型引用null时,说明没有引用任何对象。

1.TypeRange  
2.byte8-bit signed two's complement integer (-27 to 27 - 1, inclusive)  
3.short16-bit signed two's complement integer (-215 to 215 - 1, inclusive)  
4.int32-bit signed two's complement integer (-231 to 231 - 1, inclusive)  
5.long64-bit signed two's complement integer (-263 to 263 - 1, inclusive)  
6.char16-bit unsigned Unicode character (0 to 216 - 1, inclusive)  
7.float32-bit IEEE 754 single-precision float  
8.double64-bit IEEE 754 double-precision float  
9.returnValueaddress of an opcode within the same method  
10.referencereference to an object on the heap, or null  


  总结:原始数据类型和引用数据类型。boolean:0-false、非零整数-true
五、字节长度
   Java虚拟机中最小的数据单元是字(word),其大小由Java虚拟机定义。但是一个字必须容纳byte、short、int、char、float、returnValue、reference;两个字必须足够容纳long,double。所以虚拟机的实现者至少提供的字不能小于31bits的字,但是最好选择特定平台上最有效率的字长。 在运行时,Java程序不能决定所运行机器的字长。字长也不会影响程序的行为,他只是在Java虚拟机中的一种表现方式。
    总结:Java虚拟机中最小的数据单元是字
六、类加载器子系统
  
分享到:
评论

相关推荐

    Java虚拟机工作原理详解

    Java虚拟机工作原理详解 Java虚拟机工作原理详解是 Java 程序执行的核心组件之一。了解 Java 虚拟机的工作原理对 Java 开发人员来说非常重要。本文将详细介绍 Java 虚拟机工作原理的详细过程和类加载器的工作机理。...

    java虚拟机工作原理

    以下是关于Java虚拟机工作原理的详细解释: 1. Java体系结构: - **程序设计语言**:Java编程语言定义了语法和语义,使得开发者能够编写源代码。 - **字节码文件格式**:Java源代码经过编译后生成的字节码文件,...

    JAVA虚拟机工作原理.pptx

    JAVA虚拟机工作原理.pptx

    Java虚拟机工作原理详解.doc

    Java虚拟机(JVM)是Java编程语言的核心组成部分,它允许开发者编写一次,到处运行的代码。JVM通过软件模拟实现了其自身的硬件环境,包括处理器、堆栈、寄存器等,使得Java程序能够在任何支持JVM的平台上无缝运行。 ...

    java虚拟机工作原理详解

    Java虚拟机(JVM)是Java程序的核心执行环境,负责运行编译后的Java字节码。本文将深入探讨JVM的工作原理,主要包括类加载器、类加载过程以及运行数据区。 ### 类加载器 类加载器是JVM的重要组成部分,它们负责从...

    Java虚拟机工作原理(JVM).docx

    Java虚拟机(JVM)是Java平台的核心组成部分,它的设计基于栈机制,使得它能够高效地执行Java字节码。字节码是Java程序编译后的产物,存储在类文件中,而JVM的主要任务就是加载这些类文件,并执行其中的字节码指令。...

    java虚拟机的详细原理

    ### Java虚拟机的详细原理 #### 一、什么是Java虚拟机 Java虚拟机(Java Virtual Machine,简称JVM)是一种可以执行Java字节码(Bytecode)的虚拟计算机。它为Java程序提供了一个运行环境,使得Java程序可以在任何...

    java虚拟机的原理和作用

    java虚拟机的原理和作用,更深层地了解java程序的运行

    自己动手写Java虚拟机 (Java核心技术系列)@

    Java虚拟机非常复杂,要想真正理解它的工作原理,最好的方式就是自己动手编写一个! 本书是继《深入理解Java虚拟机》之后的又一经典著作,它一方面遵循《Java虚拟机规范》,一方面又独辟蹊径,不仅能让Java虚拟机的...

    Java虚拟机规范 Java SE 8版-带目录-pdf

    pdf,本书完整而准确地阐释了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。...

    Java虚拟机规范.Java SE 8版.zip

    围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。同时,书中不仅完整地讲述了由Java SE 8所引入的新特性,...

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

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

    Java虚拟机特性JAVA SE 7.pdf-中文完整书签文字版

    《Java虚拟机特性JAVA SE 7.pdf》为Java开发者提供了一个深入理解Java虚拟机工作原理的机会。通过学习本书,开发者不仅能够更好地理解Java程序是如何在不同平台上运行的,还能够掌握如何优化Java应用程序的性能。...

    Java虚拟机实现原理分析.pdf

    Java虚拟机(JVM)是实现Java程序跨平台运行的关键技术,它的实现原理和工作过程是Java语言能够运行在各种不同硬件平台的基础。JVM的存在使得Java程序员可以编写一次代码,到处运行,这得益于JVM提供的一套平台无关...

    Java运行原理与Java虚拟机.pdf

    ### Java运行原理与Java虚拟机 #### 一、Java运行原理概述 Java作为一种跨平台的编程语言,其独特之处在于它的编译和解释过程。Java程序的执行涉及到两个主要步骤:首先是编译阶段,其次是解释执行阶段。 1. **...

Global site tag (gtag.js) - Google Analytics