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

  1. 1、本文档共31页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
As the Java Virtual Machine is a stack-based machine, almost all of its instructions involve the operand stack in some way. Most instructions push values, pop values, or both as they perform their functions. ?Java虚拟机是基于栈的(stack-based machine)。几乎所有的java虚拟机的指令,都与操作数栈(operand stack)有关.绝大多数指令都会在执行自己功能的时候进行入栈、出栈操作。 Java体系结构介绍 Javaís architecture arises out of four distinct but interrelated technologies, each of which is defined by a separate specification from Sun Microsystems: Java体系结构包括哪几部分? Java体系结构包括4个独立但相关的技术 the Java programming language ?程序设计语言 the Java class file format ?字节码文件格式 the Java Application Programming Interface?应用编程接口 the Java Virtual Machine ?虚拟机 什么是JVM java虚拟机和java API组成了java运行时。 JVM的主要任务。 Java虚拟机的主要任务是装载class文件并执行其中的字节码。 Java虚拟机包含了一个类装载器。 类装载器的体系结构 二种类装载器 启动类装载器 用户定义的类装载器 启动类装载器是JVM实现的一部分 当被装载的类引用另外一个类时,JVM就是使用装载第一个类的类装载器装载被引用的类。 为什么java容易被反编译? 因为java程序是动态连接的。从一个类到另一个类的引用是符号化的。在静态连接的可执行程序中。类之间的引用只是直接的指针或者偏移量。相反在java的class文件中,指向另一个类的引用通过字符串清楚的标明了所指向的这个类的名字。 如果引用是指向一个字段的话。这个字段的名字和描述符(字段的类型)会被详细说明。 如果引用指向一个成员方法,那么这个成员方法的名字和描述符(方法的返回值类型,方法参数的数量和类型)会被详细说明。 包含对自己字段和成员方法的符号引用。 包含可选的调试信息。(包括局部变量的名称和类型) 垃圾回收器缺点: 无法确认什么时候开始回收垃圾,无法确认是否已经开始收集,也无法确认要持续多长时间 平台无关 安全 网络移动性 Java虚拟机 每个JVM都有一个类装载子系统。 运行时数据区:方法区,堆,java栈,pc寄存器,本地方法栈 每个JVM实例都有一个方法区和堆。他们是由该虚拟机中所有线程共享的。 每个线程都会得到自己的pc寄存器和java栈, pc寄存器的值指示下一条将被执行的指令。 java栈记录存储该线程中java方法调用的状态。(包括局部变量,参数,返回值,运算的中间结果。) 这些内存区域是私有的。任何线程都不能访问另一个线程的pc寄存器和java栈 java栈由许多栈帧组成。一个栈帧包含一个java方法的调用的状态。 当线程调用一个方法的时候,虚拟机压入一个新的栈桢到该线程的java栈中。 当方法返回时,这个栈桢被从java栈中弹出并抛弃。 引用有3中,类类型,接口类型,数组类型。 JVM中,最基本的数据单元是字。至少选择32位作为字长。 JVM有两种类装载器: 启动类装载器(JVM实现的一部分,每个JVM都必须有一个) 用户自定义的类装载器(JAVA程序的一部分,必须继承java.lang.CloassLoader)。 由不同的类装载器装载的类被放在虚拟机内部的不同的命名空间中。 方法区: 大小不固定,根据需要动态调整 方法区可以被垃圾回收 包含 提取装载的类的信息,放到方法区 JVM总能通过存储于方法区的内存信息来确定一个对象需要多少内存 类的静态变量也放到方法区。 虚拟机为装载的每个类存储如下信息: 这个类型的全限定名 这个类型的直接超类的全限定名 这个类型是类类型还是接口类型 这个类的访问权限修饰符 任何直接超接口的全限定名的有序列表 该类型的常量池 该类型所用常量的一个有序集合,包括直接常量(String,Integer,floating point),和对其他类型,字段,方法的符号引用 字段信息 字段名 字段类型 字段的修饰符 声明的顺序 方法信息 方法名 方法的返回值类型 方法

文档评论(0)

676200 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档