vue运行java代码_Java代码是如何运行的?

本文详细探讨了Java与C++的区别,着重讲解了Java虚拟机(JVM)的工作机制。Java代码在JVM中以字节码形式运行,实现了跨平台的“一次编译,到处运行”。HotSpot虚拟机采用解释执行和编译执行两种方式来运行字节码,其中C1和C2编译器协同工作,提升性能。JVM还负责内存管理,如垃圾回收,以及提供动态类型检测等安全特性,降低了开发难度。
摘要由CSDN通过智能技术生成

问题一:Java与C++区别

1.Java需要运行时环境,包括Java虚拟机以及Java核心类库等。

2.C++无需额外的运行时,通常编译后的代码可以让机器直接读取,即机器码

问题一:Java为什么要在虚拟机运行?

1.一次编译,到处运行。

这里涉及到一个概念:字节码。

Java字节码指的是设计一个面向Java特性的虚拟机,通过编译器将Java程序转换成该虚拟机所能识别的指令序列

为什么是叫字节码呢?原因还是Java 字节码指令的操作码(opcode)被固定为一个字节。

2.托管环境。

虚拟机能够代替我们处理一些代码中冗长而且容易出错的代码的部分,比如C++中经常出现的垃圾回收问题,程序员经常忘记回收垃圾。

另外,虚拟机还为我们提供了如数组越界,动态类型等动态检测,极大地降低了Java开发的难度。

问题二:Java虚拟机具体是如何运行Java字节码的?

以Hotspot虚拟机为例子,Java虚拟机细分为方法区、堆、Java方法栈、面向本地方法的本地方法栈、PC寄存器

b09128011da1ec895bc432b3f9a48291.png

从虚拟机的视角看,

1.执行Java代码首先需要将它编译成class文件加载到Java虚拟机中,加载后的Java类会被保存到方法区中。实际运行时,虚拟机会执行方法区中的代码。

2.上图中的堆和栈是用来存储运行时数据的。其中,栈被分成了面向Java方法的Java方法栈和面向本地方法(C++写的native方法)本地方法栈,以及存放各个线程执行位置的PC寄存器

3.在运行过程中,每当调用一个方法,虚拟机就会在当前线程的Java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。当方法执行完毕之后,该栈帧也随着被弹出。

从硬件角度看,

fbb587c7fee6cca14249ab2eddca60a8.png

在HotSpot里面,编译Java代码有两种方式,一种是解释执行,另一种是编译执行。

解释执行:逐条将字节码翻译成机器码并执行(边翻译边读)

编译执行:将一个方法中包含的所有字节码编译成机器码之后执行。(翻译完之后,再读)

前者优势在于:无需等待编译完全

后者优势在于:热点代码比较多的时候,读取的执行效率快于前者。

HotSpot使用的是多个即时编译器共同协作:C1,C2,和Java10正式使用的Graal。

链接:《深入理解Java虚拟机》-Java代码是如何运行的
出处:博客园
作者:一只喜鹊
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值