深入理解Java虚拟机 - 01.Java代码是怎么运行的?

作为一名Java程序员,你应该知道,Java代码有很多不同的运行方式。比如说可以在开发工具中运行,可以双击执行jar文件运行,也可以命令行运行。当然这些执行方式都离不开JRE,也就是Java运行时环境。

实际上,JRE仅包含运行Java程序的必须组件,包括Java虚拟机以及Java核心类库等。我们用的JDK同样包含了JRE,并且还附带了一些工具。

那么你有没有想过,为什么Java要在虚拟机中运行呢。Java虚拟机具体优势怎样运行Java代码的呢,他的效率又如何呢?

 

为什么Java要在虚拟机里与运行?

Java作为一门高级程序语言,它的语法非常复杂,抽象程度也很高。因此,直接在硬件上运行这么复杂的程序是不现实的。所以在运行Java程序之前,需要对其进行一番转换。

当前主流思路是这个样子的,设计一个面向Java语言特性的虚拟机,通过编译器将Java程序转换成改虚拟机所能识别的指令序列,也称Java字节码。一旦一个程序呗转换成Java字节码,那么它便可以在不同平台上的虚拟机实现里运行。这也就是我们常说的”一次编译,到处运行“。

虚拟机的另外一个好处是它带来了一个托管环境。这个托管环境能够代替我们处理一下容易出错的部分。其中最广为认知的当属自动内存管理与垃圾回收,除此之外还提供了诸如数组越界、动态类型、安全权限等等的动态检测。

Java虚拟机具体是怎样运行Java字节码的?

从虚拟机视角来看,执行Java代码首先需要将他编译成的class文件加载到Java虚拟机中。加载后的Java类会被存放在方法区(Method Area )中。实际运行时,虚拟机会执行方法区内的代码。 

                                                                   

在运行过程中,每当调用进入一个Java方法,Java虚拟机会在当前线程的Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。这个栈帧的大小是提前计算好的,而且Java虚拟机不要求栈帧在内存空间连续分布。

当退出当前执行的方法时,不管是正常返回还是异常返回,Java虚拟机均会弹出当前线程的当前栈帧,并将之舍弃。

Java字节码无法直接执行。因此,Java虚拟机需要将字节码翻译成机器码。

 

总结与实践

今天简单介绍了Java代码如何在虚拟机中运行,以及如何在虚拟机中运行。

之所以要在虚拟机中运行,是因为它提供了可移植性。一旦Java代码被编译成Java字节码,便可以在不同的Java虚拟机上运行。此外虚拟机还提供了一个代码托管的环境,代替我们处理容易出错的事务,例如内存管理。

Java虚拟机将运行时内存划分为五部分,分别是方法区、堆、PC寄存器、Java方法栈和本地方法栈。Java程序编译而成的 class文件,需要先加载至方法区中,方能在Java虚拟机中运行。

 

 

图文来源网络 如有侵权请联系删除。

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值