java虚拟机规范 51cto_java虚拟机

最近学习java虚拟机做了一些整理,会陆续发完。

Java虚拟机

一、概念:当我们谈到java虚拟机的时候,有可能指下面3个方面:

1):抽象java虚拟机的规范。

2):一个java虚拟机具体的实现。------实现是指:实现需要有接口,用类实现接口,并实现接口所有方法。就是说先有一个接口,然后写一个类实现接口中的所定义的方法。

3):一个运行中的java虚拟机实例。

而我们经常说的大多数是第三种。也就是一个正在运行的java虚拟机实例。

java虚拟机之所以被称为“虚拟”的,就是因为它仅仅是有一个规范定义的抽象计算机。因此,运行某个java程序,首先需要一个符合该规范的具体实现。

当运行一个java程序的同时,也就在运行一个java虚拟机实例。每个java程序都运行于某个具体的java虚拟机实现的实例上。它是java编译器和os平台之间的虚拟处理器。负责与操作系统之间的交互

二、java虚拟机生命周期:

Java虚拟机的产生和消亡是伴随java程序的运行和停止。也就是说当java程序运行的时候,相应的java虚拟机也就诞生了,反正消亡。其具体的实现是通过调用内部main方法来实现。

6d4633352ff23c3b04708cb6d37bdba4.png

三:jvm执行java程序的顺序是什么呢?

大致如下:

Java(源代码)——>class(字节码)——>类加载器——>字节码校验器——>硬件

具体过程: 1、加载class文件

2、管理分配内存

3、执行垃圾回收

四、Java虚拟机的体系结构:

8bbd51361c09266efc852d536ce909f7.png

组成部分:一系列的子系统、内存区域、数据类型和使用指南。这些构成java虚拟机的内部结构。这些组成结构实现了外部行为(java虚拟机与OS之间的实现)和实现内部行为(java虚拟机的内部之间的实现)。

类加载器子系统(class loader  subsystem)作用:每个java虚拟机都由类加载器子系统(class  loader subsystem)。负责加载程序中类型(类和接口)。

执行引擎(execution  engine):负责执行被加载类中的包含的指令。每个java虚拟机都有一个执行引擎(execution engine)。

内存区域:程序的执行需要一定的内存空间。如字节码、被加载的其他额外信息、程序中的对象、方法参数、返回值、本地变量、处理中间变量等等。Java虚拟机将这些的信息统统保存在数据区中(data areas)。虽然每个java虚拟机的实现中都包含数据区,但是java虚拟机规范对数据区的规定却非常的抽象。许多结构上的细节部分都留给了java虚拟机实现者的发挥。不同 的java虚拟机实现上的内存结构千差万别。一部分实现可能占用很多内存,而其他一下可能只占用很少的内存。一些实现可能会使用虚拟内存。

Data  areas:数据区中的一部分是整个程序的共有的,有其他部分被单独的线程控制。每个虚拟机都包含方法去(method area)和堆(heap),他们被整个程序的共享的。

8e041cca7d331d7759f8a7f2e74fbcc3.png

方法区(method area):当java虚拟机加载并解析一个类后,将从类文件中解析出来信息保存在方法区中(method area)。

堆(heap):程序执行时的创建的对象保存在堆中。

5255e0930bae64121c881e4ccc7df552.png

其他的内存区域:

PC寄存器概念:又叫指令计数器。中央处理机中的一种寄存器,用来保存计算机的执行程序的指令地址。

作用:保存线程执行的下一条指令。这其中包括是否调用本地方法情况:

当不调用本地方法的时候:PC寄存器保存线程执行下一条指令。

当线程调用本地方法的时候,pc寄存器不保存线程的下一条执行指令。

Javastacks(java 堆栈)作用:保存一个线程的调用方法的状态,包括本地变量、调用方法的参数、返回值、处理的中间变量。调用本地方法的时的状态保存在本地方法堆栈中(native method stacks),也可能在寄存器中。

Javastacks是由java堆栈块组成。而堆栈块包含java方法调用的状态。

e7538de6ca86ef6e81617483957e6c27.png

Java虚拟机不使用寄存器保存中间结果,而是用java堆栈中存放中间结果。

好处:使java虚拟机的指令更紧凑,也更容易在一个没寄存器的设备上实现java虚拟机。

e147c005dac2ddcfa159808ac6753ed7.png

数据类型(data types):每个java虚拟机中使用的数据都有确定的数据类型。

数据类型和操作都在java虚拟机规范中严格定义的。其中数据类型包括原始数据类型和引用数据类型。

引用类型依赖于实际对象,但不是对象本身。

原始数据类型不依赖任何东西,他们就是本身表示的数据。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值