java代码如何能运行起来_Java代码如何运行

Java作为高级语言,高度抽象,无法直接运行在机器上,这样就必须设计一个面向Java语言特征的虚拟机,并通过编译器将Java程序转化成虚拟机所能识别的指令序列,也成Java字节码。

Java 虚拟机将运行时内存区域划分为五个部分,分别为方法区、堆、PC 寄存器、Java 方法栈和本地方法栈。Java 程序编译而成的 class 文件,需要先加载至方法区中,才能在 Java 虚拟机中运行。最左列是偏移;中间列是给虚拟机读的机器码;最右列是给人读的代码

0x00:  b2 00 02        getstatic java.lang.System.out

0x03:  12 03            ldc "Hello, World!"

0x05:  b6 00 04        invokevirtual java.io.PrintStream.println

0x08:  b1                  return

Java虚拟机如何运行Java字节码(HotSpot 虚拟机为例):

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

在运行时,当调用进入到方法时,虚拟机会在当前线程的Java方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数(以解释器使用的解释栈帧为例,这种栈帧有两个主要的组成部分,分别是局部变量区,以及字节码的操作数栈。这里的局部变量是广义的,除了普遍意义下的局部变量之外,它还包含实例方法的“this 指针”以及方法所接收的参数)。当方法执行完之后(不管是正常退出还是异常退出),虚拟机均会弹出当前线程的当前栈帧,丢弃。

5b496584fe97

如果想让机器识别代码,还需要将字节码转化成机器码。

①解释执行:逐条将字节码翻译成机器码。无需等待,运行哪编译哪。

②即时编译:将一个方法中的所有字节码编译成机器码。提前编译完成,需要等待,实际运行速度快。

Hotspot采用了混合模式。先解释执行,将解释执行多的热点代码以方法为单位即时编译。

HotSpot 内置了多个即时编译器:C1、C2 和 Graal(Java10引入)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值