Java虚拟机架构

本文为翻译的文章,作者Bill Venners,原文https://www.artima.com/insidejvm/ed2/jvm2.html

 

在Java虚拟机规范中,一个虚拟机实例的行为通过以下四个方面来进行描述:子系统,内存区域,数据类型和指令。这些组件描述了Java虚拟机抽象的内部架构。这些组件的目的主要不是用来规定JVM实现的内部架构,它们更多的是提供了一种严格定义了JVM实现的外在行为的方式。按照这些抽象的组件和组件之间的交互,JVM规范定义了任何JVM实现所必须具备的行为。

图5-1是JVM的框图,它包括了JVM规范中描述的比较重要的子系统和内存区域。前面的章节提到过,每个JVM都有一个类加载器子系统:根据全路径名加载类型(类和接口)的一种机制。而且JVM都有一个执行引擎:负责执行类方法中指令的一种机制。

Java虚拟机架构

 

图 5-1. JVM的内部架构

 

JVM运行程序的时候,它需要内存空间来存储很多的东西,包括字节码和从类文件中获取的其它信息,程序实例化的对象,方法的参数,返回值,局部变量和计算的中间结果等。JVM把运行程序所需要的内存分成了几个运行时数据区域

尽管相同的运行时数据区域在每一个JVM实现中都以某种方式存在,但它们的规范却是相当的抽象。关于运行时区域的结构性细节,留给了JVM实现的设计者们来决定。

不同的JVM实现可以有完全不同的内存限制。某些JVM实现可能有充足的内存,其他的可能只有很少量的内存。某些JVM实现可能利用了虚拟内存,但其他的没有使用。JVM规范中运行时区域的抽象本质,有助于在多种多样的电脑和设备上更容易的实现这些规范。

某些运行时区域在多个线程中共享,某些只对特定的线程所独有。每个JVM实例都有一个方法区和一个。运行在虚拟机中的所有线程都共享这些区域。当虚拟机加载一个类文件时,它从类文件中的二进制数据中解析出类型信息,并把这些类型信息放置在方法区中。程序运行时,虚拟机把程序实例化的所有对象放在堆中。图5-2展示了这些内存区域的图形化描述。

Java虚拟机架构

 

图 5-2. 所有线程共享的运行时区域

新线程启动时,它取得了自己的pc regisgter(程序计数器)Java栈。如果线程正在执行一个java方法(不是本地方法),程序计数器的值指定了下一个要执行的指令。一个线程的Java栈保存了该线程的Java方法(不是本地方法)调用的状态。Java方法调用的状态包括它的局部变量,所调用方法的参数,方法的返回值(如果有),以及中间计算结果。本地方法调用的状态,以一种与实现无关的方式保存在本地方法栈中,也可能保存在寄存器或者其他与实现无关的内存区域中。

Java栈由栈帧(帧)组成。一个栈帧包含了java方法调用的状态。当一个线程调用某个方法时,JVM把一个新的栈桢加入到那个线程的Java栈中。方法结束时,虚拟机弹出并舍弃该方法的栈桢。

JVM没有寄存器来保存中间数据。指令集使用Java栈来保存中间数据。Java的设计者们采用这种方法使用指令集变得精简,并且在没有通用寄数或者寄存器很少的架构上实现JVM规范变得更加容易。另外,JVM指令集基于栈的架构,使得JIT和某些JVM实现在运行时才生效的动态编译器更容易实现代码优化的工作。

图5-3是JVM为每个线程创建的内存区域的图形化描述。这些区域是线程私有的。没有线程能够获取其他线程的程序计数器或者Java栈。

Java虚拟机架构

 

图 5-3. 线程独有的运行时区域

图5-3展示了有三个线程正在运行的虚拟机实例的快照。在这个快照的时间点,线程一和线程二正在执行java方法,线程三正在执行一个本地方法。

在图5-3中,就象本书中所有Java栈的图形化描述一样,栈都是从上到下的。每个栈的“顶”部显示在图形的底部。正在执行方法的栈桢显示在浅色的阴影中。对于正在执行方法的线程,程序计数器指定了下一个要执行的指令。在图5-3中,这些程序计数器(线程一和线程二的)显示在浅色的阴影中。因为线程三正在执行一个本地方法,它的程序计数器(就是深灰色的区域)是没有定义的。

 

欢迎关注微信公众号,获取更多信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值