Java字节码中jvm实例用法

 更新时间:2021年02月22日 15:05:56   作者:小妮浅浅  
在本篇文章里小编给大家整理的是一篇关于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开发者,对技术的追求而不仅仅停留在会用API,会写基本功能上,要想在技术上有更高的造诣,就需要深入到原理层面去认识代码运行的机制。因此,本文从class字节码文件的结构入手,一步步来解剖二进制字节码的内部工作原理,这对深入理解JVM的运行机制大有裨益,同时,对于想要使用BCEL来动态改变Class字节码指令的工作也很有帮助(示例:JVM Class字节码之三-使用BCEL改变类属性)。

什么是Class文件

Java字节码类文件(.class)是Java编译器编译Java源文件(.java)产生的“目标文件”。它是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得class文件非常紧凑, 体积轻巧, 可以被JVM快速的加载至内存, 并且占据较少的内存空间(方便于网络的传输)。

Java源文件在被Java编译器编译之后, 每个类(或者接口)都单独占据一个class文件, 并且类中的所有信息都会在class文件中有相应的描述, 由于class文件很灵活, 它甚至比Java源文件有着更强的描述能力。

class文件中的信息是一项一项排列的, 每项数据都有它的固定长度, 有的占一个字节, 有的占两个字节, 还有的占四个字节或8个字节, 数据项的不同长度分别用u1, u2, u4, u8表示, 分别表示一种数据项在class文件中占据一个字节, 两个字节, 4个字节和8个字节。 可以把u1, u2, u3, u4看做class文件数据项的“类型” 。

到此这篇关于Java字节码中jvm实例用法的文章就介绍到这了,更多相关Java字节码中jvm的使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解java设计模式之六大原则

    详解java设计模式之六大原则

    这篇文章主要介绍了java设计模式之六大原则,对设计模式感兴趣的同学,可以参考下
    2021-05-05
  • Java Date与String的相互转换详解

    Java Date与String的相互转换详解

    这篇文章主要介绍了Java Date与String的相互转换详解的相关资料,需要的朋友可以参考下
    2017-02-02
  • listview点击无效的处理方法(推荐)

    listview点击无效的处理方法(推荐)

    下面小编就为大家带来一篇listview点击无效的处理方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Java中Date类和Calendar类的常用实例小结

    Java中Date类和Calendar类的常用实例小结

    这篇文章主要介绍了Java中Date类和Calendar类的常用实例小结,是Java入门学习中的基础知识的运用,需要的朋友可以参考下
    2015-08-08
  • Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

    Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

    本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • Idea 配置国内 Maven 源的图文教程

    Idea 配置国内 Maven 源的图文教程

    这篇文章主要介绍了Idea 配置国内 Maven 源的教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Springboot 返回文件给前端的示例代码

    Springboot 返回文件给前端的示例代码

    这篇文章主要介绍了Springboot 返回文件给前端的示例代码,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-07-07
  • Java Optional避免空指针异常的实现

    Java Optional避免空指针异常的实现

    空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了Java Optional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因空值处理不当而引发的错误,感兴趣的可以了解一下
    2025-04-04
  • SpringBoot 配置文件总结

    SpringBoot 配置文件总结

    SpringBoot中提供一个全局的配置文件:application.properties,这个配置文件的作用就是,允许我们通过这个配置文件去修改Spring Boot自动配置的默认值,本文详细总结了SpringBoot配置文件,文中有详细的代码示例,感兴趣的同学可以参考下
    2023-05-05
  • 详解Java实现JSONArray转Map的三种实现方式

    详解Java实现JSONArray转Map的三种实现方式

    本文主要介绍了Java实现JSONArray转Map的三种实现方式,本文只是自己常用的三种,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03

最新评论