Java基础知识:Java代码是怎么运行的

Java代码在虚拟机中运行

语法复杂,抽象程度高,直接在硬件上运行程序不现实。需要在执行前做一个转换。
转换的思路: 设计一个面向对象的语言的虚拟机,通过编译器将Java程序转换为虚拟机识别的指令序列。
Java的指令的操作码是一个字节。

虚拟机是用软件实现,那么可以让程序实现不同平台上的虚拟机上实现程序。一次编写,到处运行。

带来一个托管环境,能帮助处理一些代码中存在的问题。包含内存管理与垃圾回收。还提供了数组越界动态类型安全权限等动态检测。

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

虚拟机 将Java代码百年已成class文件加载到Java内存中,Java类会被放在方法区中。虚拟机执行的是方法区的代码


Java基础知识:Java代码是怎么运行的_第1张图片
虚拟机

调用一个Java方法,虚拟机会在当前线程的方法栈中形成一个栈帧,存放字节局部白能量以及字节码的操作数。不需要使用连续内存进行存储。

虚拟机将字节码翻译成机器码。

在HotSpot中两种形式。
解释性:逐条的将字节码翻译成机器码并执行。
即时编译:一个方法中包含的所有字节编译成机器码之后执行。


Java基础知识:Java代码是怎么运行的_第2张图片
编译模式对比

后者比前者优势在于运行速度快。
HotSpot采用的是混合模式。先解释执行字节码,而后对反复执行的热点代码以及方法进行即时编译。

Java虚拟机效率

大部分不常用的代码采取解释执行的方式运行。热点代码采用编译成机器码达到理想的运行速度。
Java7开始HotSpot采用分层的编译方式,热点代码首先使用C1编译,然后热点代码在进一步被C2编译。。
即时编译是放在额外的编译线程中执行的。根据CPU的数量设置编译线程的数目。1:2的比例分配给C1以及C2。
C1与C2是java中提供的即时编译器。

计算机资源充足的情况下,活解释执行与编译执行同时进行,编译完成后的机器码会在下次调用时候启用,代替解释执行。

你可能感兴趣的:(Java基础知识:Java代码是怎么运行的)