`
zhhphappy
  • 浏览: 120088 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java虚拟机体系结构

    博客分类:
  • java
阅读更多

java虚拟机(Java Virtual Machine)是运行所有Java程序的抽象计算机,是Java语言的运行环境。支持Java面向网络体系结构三大支柱的所有方面:平台无关性、安全性和网络移动性。

 

jvm体系结构图

 

根据上图所示,java虚拟机体系结构中最重要的部分就是类装载子系统、运行时数据区、执行引擎等

 

类装载子系统

 Java虚拟机中,负责查找并装载类型的那部分称为类装载子系统。
  Java虚拟机有两种类装载器:启动类装载器和用户自定义类装载器。启动类装载器是Java虚拟机实现的一部分。用户自定义类装载器是Java程序的一部分。
  类装载器的动作:

   1. 装载---查找并装载类型的二进制数据

   2. 连接---执行验证,准备,以及解析(可选)
      验证:确保被导入类型的正确性
      准备:为类变量分配内存,并将其初始化为默认值
      把类型中的符号引用换为直接引用

   3. 初始化---把类变量初始化为正确的初始值 

 

运行时数据区
(1) 方法区

当JVM使用类装载器定位Class文件,并将其输入到内存中时。会提取Class文件的类型信息,并将这些信息存储到方法区中。同时放入方法取中的还有该类型中的类静态变量。下面我们具体看看需要存储哪些信息?
●该类型的全限定名。
●该类型的直接超类的全限定名。
●该类型是类类型还是接口类型。
●该类型的访问修饰符(public、abstract、final)。
●任何直接超接口的全限定名的有序列表。
●该类型的常量池。比如所有类型、方法和字段的符号。基本数据类型的直接数值等。
●字段信息。对类型中声明的每个字段,方法区中必须保存下面的信息。除此之外,这些字段在类或者接口中的声明顺寻也必须保存。

      字段名

      字段的类型

      字段的修饰符(public, private, protected, static, final, volatile, transient的某个子集)

●方法信息。和字段一样保存方法的相关信息。

      方法名

      方法的返回类型

      方法的参数的数量和类型

      方法的修饰符

      方法的字节码

      操作数栈和栈帧中局部变量的大小 (见下面Java栈的内容)

      异常表
●类静态变量。这里要注意:类中的静态变量时存放在方法区中的。并不是存放在堆中某一个该类型的对象中的。 也就是我们常说的“类静态变量属于类,而不属于对象”这句话的由来了。
●指向ClassLoader类的引用。任何类都需要被类装载器装入内存。如果是被用户自定义类装载器装载的,那么JVM必须在类型信息中存储对该装载器对象的引用。

●指向Class类的引用。对于每一个被装载的类型,虚拟机都会相应的为它创建一个java.lang.Class类的实例,而且虚拟机还必须以某种方式把这个实例和存储在方法区中的类型信息关联起来。 这就使得我们可以在程序运行时查看某个加载进内存的类的当前状态信息。也就是反射机制实现的根本。

●方法表。 为了能快速定位到类型中的某个方法。JVM对每个装载的类型都会建立一个方法表,用于存储该类型对象可以调用的方法的直接引用,这些方法就包括从超类中继承来的。而这张表与Java动态绑定机制( 参见《java动态绑定机制实现多态 》 )的实现是密切相关的。

(2) 堆

堆存放所有生成的对象及对象的实例变量。JVM会根据new指令在堆中开辟一个确定类型的对象内存空间。但是堆中开辟对象的空间并没有任何 人工 指令可以回收,而是通过JVM的垃圾回收器负责回收。


(3) 程序计数器

对于一个运行的Java而言,每一个线程都有一个PC寄存器。当线程执行Java程序时,PC寄存器的内容总是下一条将被执行的指令地址。


(4) Java栈 

每启动一个线程,JVM都会为它分配一个Java栈,用于存放方法中的局部变量,操作数以及异常数据等。当线程调用某个方法时,JVM会根据方法区中该方法的字节码组建一个栈帧。并将该栈帧压入Java栈中,方法执行完毕时,JVM会弹出该栈帧并释放掉。

注意,Java栈中的数据是线程私有的,一个线程是无法访问另一个线程的Java栈的数据。这也就是为什么多线程编程时,两个相同线程执行同一方法时,对方法内的局部变量时不需要数据同步的原因。

 

执行引擎

执行引擎处于JVM的核心位置,在Java虚拟机规范中,它的行为是由指令集所决定的。尽管对于每条指令,规范很详细地说明了当JVM执行字节码遇 到指令时,它的实现应该做什么,但对于怎么做却言之甚少。Java虚拟机支持大约248个字节码。每个字节码执行一种基本的CPU运算,例如,把一个整数 加到寄存器,子程序转移等。Java指令集相当于Java程序的汇编语言。

Java指令集中的指令包含一个单字节的操作符,用于指定要执行的操作,还有0个或多个操作数,提供操作所需的参数或数据。许多指令没有操作数,仅由一个单字节的操作符构成。

 

分享到:
评论

相关推荐

    Java虚拟机

    Java虚拟机 Java虚拟机体系结构 Java虚拟机的运行过程

    深入理解Java虚拟机体系结构

    主要介绍了深入理解Java虚拟机体系结构,具有一定借鉴价值,需要的朋友可以参考下

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

     本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...

    java虚拟机的详细原理

    一、什么是Java虚拟机 二、Java虚拟机的生命周期 三、Java虚拟机的体系结构

    Java虚拟机体系结构深入研究总结

     要对Java程序进行内存优化和性能调优,不了解虚拟机的内部原理(或者叫规范更严谨一点)是肯定不行的,这里推荐一本好书《深入Java虚拟机 (第二版)》(Bill Venners著,曹晓刚 蒋靖 译,实际上本文正是作者阅读本书...

    JAVA虚拟机精讲

    《Java虚拟机精讲》以极其精练的语句诠释了HotSpot VM 的方方面面,比如:字节码的编译原理、字节码的内部组成结构、通过源码的方式剖析HotSpot VM 的启动过程和初始化过程、Java 虚拟机的运行时内存、垃圾收集算法...

    Java虚拟机简介

    Java虚拟机简介 介绍了java虚拟机的体系结构组成,已经java虚拟机的执行过程

    JAVA虚拟机.ppt

    定义 简介 特点 使用主题 安装方法 支持的数据类型 规格描述 JVM指令系统 ... 体系结构 8.1Java指令集 8.2寄存器 8.3栈 8.4单位收集堆 8.5方法区 JVM的运行过程 Java虚拟机命令行参数说明 JVM存储区

    《深入Java虚拟机第二版》 高清完整PDF版

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    深入Java虚拟机(中文版第二版高清版)-带书签

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    深入Java虚拟机(原书第二版清晰版)

    本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及...

    Java虚拟机和Java程序的生命周期?

    类加载器分为:Java虚拟机自带的加载器和用户自定义的类加载器; Java虚拟机自带的类加载器包括:启动类加载器,扩展类加载器,系统类加载器三种。 用户自定义的类加载器是ClassLoader类的实例,通过它来定制类的...

    深入JAVA虚拟机第二版.pdf 目录

    第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...

    深入java虚拟机第二版

    第1-4章介绍了java虚拟机的体系结构,包栈、堆,方法区、执行引擎等; 第5-20章深入介绍了java的内部细节,垃圾回收、java安全模型、java的连接模型和动态扩张机制,class文件,运算及流程控制。 本书以利于理解的...

    深入Java虚拟机(原书第2版)及书中源代码

    第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...

    jvm虚拟机原理.ppt

    经典JVM PPT,可以直接讲课的 java虚拟机原理介绍 Java虚拟机生命周期 Java虚拟机体系结构 Java 的class文件

    深入Java虚拟机

    5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 5.3.9 本地方法栈 5.3.10 执行...

Global site tag (gtag.js) - Google Analytics