写在前面

本文隶属于专栏《100个问题搞定Java虚拟机》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和文献引用请见100个问题搞定Java虚拟机

解答

补充

Java 代码 -> Java 字节码

从虚拟机角度来看,执行 Java 代码需要将编译好的字节码文件加载到 Java 虚拟机中。

在运行过程中,每当调用进入一个 Java 方法,Java 虚拟机会在当前线程的 Java 方法栈中生成一个栈帧,用以存放局部变量以及字节码的操作数。

栈帧的大小是提前计算好的,JVM不要求栈帧在内存空间里连续分布。

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

Java 字节码 -> 机器码

从硬件视角来看,Java 字节码无法直接执行,JVM需要将字节码翻译成机器码。

上述翻译过程有两种形式

  1. 解释执行,即逐条将字节码翻译成机器码并执行;

  2. 即时编译(Just-In-Time compilation,JIT),即将一个方法中包含的所有字节码编译成机器码后再执行。

前者的优势在于无需等待编译,而后者的优势在于实际运行速度更快。
HotSpot 默认采用混合模式,综合了解释执行和即时编译两者的优点。它会先解释执行字节码,而后将其中反复执行的热点代码,以方法为单位进行即时编译。

Java代码如何在虚拟机中运行?相关推荐

  1. java代码怎么在cmd中运行?cmd怎么打开java代码?

    java代码怎么在cmd中运行是一个比较简单的问题,但还是有很多人频繁询问,今天本篇文章为大家统一解答一下这个问题. java代码怎么在cmd中运行? 1.首先用记事本写一个简单的Java程序,保存成 ...

  2. 虚拟主机可以运行java_下面哪种类型的文件可以在Java虚拟机中运行( ).

    下面哪种类型的文件可以在Java虚拟机中运行( ). 答:.class 舌尖前送气清塞擦音是 答:c 中国大学MOOC: 已知 [X]原=10101100,[Y]补=11000110, 求 [X+Y] ...

  3. unity3d android 后台运行,unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android...

    易采站长站为您分析unity3d发布apk在android虚拟机中运行的详细步骤,需要的朋友可以参考下 unity3d发布apk在android虚拟机中运行的详细步骤(unity3d导出android ...

  4. 轻易解决VMware 虚拟机中被提示“请不要在虚拟机中运行此程序“

    决 VMware 虚拟机 中被提示 "请不要在虚拟机中运行此程序"或者"Themida Sorry, this application cannot run under ...

  5. 虚拟机中被提示请不要在虚拟机中运行此程序 解决方法,“Themida Sorry, this application cannot run...

    虚拟机中被提示"请不要在虚拟机中运行此程序" 解决方法. 英文提示:"Themida Sorry, this application cannot run under a ...

  6. VxWorks入门06:虚拟机中运行

    在下载的VxWorks安装包中,包含了一份在虚拟机下安装测试的文档,我们按照这个文档测试一下. VxWorks 6.8.3 + VxWorks Workbench 3.2.3 + VMware 16. ...

  7. 【一站式】虚拟机中运行博途V15

    [一站式]虚拟机中运行博途V15 所使用的的软件 步骤 一.安装虚拟机 二.安装一个Win 10系统的虚拟机 三.对客户机进行网络设置 四.对客户机系统内部进行设置 结尾 可供参考的相关文章 所使用的 ...

  8. 如何在虚拟机中运行知乎App

    经过知乎大佬们的指点迷津,我将目光转向了模拟器,简单的尝试了几款模拟器之后,发现都不能打开知乎App,可气呀,抖音都能打开,为啥知乎打不开呢?难度知乎做了反欺诈检测?不会这么高级吧.于是我又重新把目光 ...

  9. Tiny4412裸机程序之代码在DDR SDRAM中运行

    转载:http://www.techbulo.com/1509.html Tiny4412裸机程序之代码在DDR SDRAM中运行 2014年11月13日 ⁄ 裸机程序 ⁄ 共 8647字 ⁄ 字号  ...

最新文章

  1. 谈谈对 Canal( 增量数据订阅与消费 )的理解--大数据平台技术栈系列(3)
  2. Java基础:成员变量的继承与覆盖
  3. Linux apache源码安装自定义Server
  4. 三调地类代码_FME实现三调地类变化流量表制作
  5. C++对象的动态建立
  6. SiameseRPN详解
  7. 2G,3G ,4G 到 5G 变了什么 ?
  8. 互斥与同步——local_irq_enable与local_irq_disable
  9. Python在应用层实现UDP协议的可靠传输
  10. 数组模拟加法(每日一练 11.30)
  11. 个人计算机预防勒索病毒,Windows10如何开启预防勒索病毒功能|电脑安全开启防御勒索软件的方法...
  12. iphone已停用怎么解锁_iPhone锁屏密码忘记了怎么办?维修店老板说出了绝招
  13. 时间同步服务器搭建实验
  14. android导入excel文件格式,android 把数据导入到excel文件中的三种方法
  15. android辅助功能demo,Android中的辅助功能实现问题
  16. 宝石与石头(简单难度)
  17. 【华人学者风采】韩亚洪 天津大学
  18. TeamTalk部署详细过程(跳过各种坑)
  19. 单词翻转字母顺序c语言,单词翻转(C语言实现)
  20. WebGL探索——抉择:实践方向(twgl.js、Filament、Claygl、BabylonJS、ThreeJS、LayaboxJS、SceneJS、ThinkJS、ThingJS)

热门文章

  1. 小程序中如何正确使用换行符‘\n‘
  2. 线程的 run() 和 start() 有什么区别?
  3. 在线预览pdf文件(pdfJS)
  4. 生日快乐程序_推荐丨5款工具类小程序应用
  5. oracle dba 有哪些权限,Oracle DBA应知应会 -- 权限管理
  6. 根据经纬度判断车辆是否进度电子围栏
  7. 小梅哥FPGA时序分析和约束实例演练课程
  8. swi prolog 和java_制作适用于GNU和SWI的Prolog代码
  9. 华为云设计语言_如何评价华为软件开发云?
  10. ACM 各种模板整理