技术文章 > java >  java基础 > 正文

Java字节码中jvm的使用

小妮浅浅

要想使Java运行,我们可以设计一个面向Java语言特性的虚拟机,并通过编译器将Java程序转换为它可以识别的指令序列,也称为Java字节码。由于Java字节码指令的操作码被固定为一个字节,所以它的名字就这样命名了。本篇要带来的是Java字节码中jvm的使用,主要分为两个操作视角,一起来看看具体内容吧。

1、虚拟机视角

在执行Java代码时,首先需要将编译后的class文件装入Java虚拟机。装入的Java类将存储在方法区(MethodArea)中。虚拟机会在实际运行时执行方法区内的代码。JavaVirtualMachines将堆和栈分割为内存,以存储运行时数据。JavaVirtualProfessional将栈细分为面向Java方法的Java方法栈、面向本地方法(用C++写的native方法)的本地方法栈和存放各个线程执行位置的PC寄存器。

该调用将进入Java方法,而Java虚拟机会将在当前线程的Java方法栈中生成用于存储本地变量和字节码操作数的栈帧。该栈帧的大小是事先计算好的,并且Java虚拟机不需要连续地在内存空间中分布栈帧。Java虚拟机在退出当前执行的方法时,无论是正常还是异常,都将弹出当前线程的当前栈帧,并放弃该帧。

2、硬件视角

Java字节代码不能直接执行,因此Java虚拟机需要将字节代码翻译成机器代码。在HotSpot中,翻译过程有两种形式

1、是说明执行,把字节代码翻译成机器代码执行

2、是即时编译(Just-In-Timecompilation、JIT),将一种方法包含的所有字节代码编译成机器代码后执行。

前者的优势是不需要等待编译,后者的优势是实际运行速度更快。

以上就是Java字节码中jvm的使用,大家可以结合字节码和虚拟机的知识点,对本篇的内容进行理解。对于不懂的地方,可以反复的查阅和研究。

免费视频教程
本教程部分素材来源于网络,版权问题联系站长!
相关文章
  java一维数组的深拷贝方式
  java中ThreadLocal的线程隔离
  java ThreadLocal的对象存储和获取
  java中如何下载Http的内容
  Java虚拟机的发展变化
  Java之jvm的执行程序过程
  java数组中如何对内存进行回收?
  java下载后文件名错误的解决
相关视频章节
  索引和切片(上)
  数组创建和属性
  Python数据分析常用库
  高级函数(下
  高级函数(上)
作者信息
推荐视频
视频教程分类