作为一名Java程序员,你应该知道Java有很多种运行方式.比如说可以在开发工具中运行,可以双击jar包运行,可以在网页端运行.当然这些运行方式都离不开JRE「也就是java运行时环境」.

实际上, JRE仅仅包含了运行Java程序的必须组件, 包括java虚拟机及核心类库等.Java程序员经常使用的JDK「Java程序开发包」同样包含了JRE, 并且还附带了一些开发、诊断的工具.

为什么Java要在虚拟机当中运行?

由于Java是一种高级层面上的语言,其语法复杂、更为抽象.直接运行在硬件上不太现实,所以在运行Java之前需要做一些转换的工作.

这就好比列位要和日本人做生意, 但是不会日文,不能直接与日本人交谈.这个时候我们就需要一个翻译了.把我们说的中文翻译成日语再与对方交流.

这里的面的「列位」就相当于「Java字节码」, 请的「翻译」就相当于「虚拟机」, 交谈的「日本人」对象就相当于「执行代码的cpu」.

再解释一下, java程序经过编译之后生成「Java字节码」,Java的字节码经过「Java虚拟机」的加工转换成cpu能执行的机器码.

  • Java虚拟机可以由硬件实现,但是更为常见的是各个平台上的软件实现.那么这么做的意义大于一旦程序被转换成java字节码那么它就可以在不同平台上的虚拟机里运行.这就是java强大的跨平台特性的原因.
  • 另外java虚拟机还提供了一个托管环境. 这个环境代替我们处理一些代码中冗长且容易出错的部分,比如说内存管理与垃圾回收.
  • 此外托管环境还提供了诸如数组越界、动态类型、安全权限等等的动态检查.

从硬件视角来看, java字节码无法直接运行,因此java虚拟机需要将字节码翻译成机器码

在hotspot里, 翻译过程有两种方式:

  • 解释执行

    • 逐条将字节码翻译成机器码并执行.
  • 第二种是即时编译「Just-in-time compilation, JIT」即将一个方法的所有字节码编译成机器码再运行.
java字节码执行

解释执行的优势在于无需等待编译, 即时编译的优势在于实际运行速度快.

在hotspot中,默认的采用的是混合模式, 综合的解释执行与即时编译的优点. 它会先解释执行代码, 然后将其中反复执行的「热点代码」, 以方法为单位进行「即时编译」.

在线运行java代码并得到结果_Java代码是如何运行的?相关推荐

  1. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  2. java代码块执行顺序_JAVA代码块执行顺序分析测试

    在实际的工作过程中,几乎从没用过JAVA的代码块.不过既然做了这方面的学习与测试,就索性记录下来防止忘记.同一个招式,圣斗士是不会学习第二遍的... 首先,上代码: public class Code ...

  3. 运行java黑窗口是什么意思_黑窗口运行java文件步骤

    误区纠正:运行java文件可以不用配置jdk环境变量,配置jdk只是为了方便运行时找到它 未配置环境变量运行java程序步骤: 1.安装jdk,在G盘下建一个java文件测试类 2.win+r 快捷键 ...

  4. 电脑运行java程序很卡_我的世界卡运行不流畅解决办法

    在玩我的世界时候很卡怎么办?今天游戏园小编为大家带来了我的世界卡机不流畅的解决办法,一直被这个问题困扰的同学快来看看吧! 运行Mc很卡,但配置是达标的,可为java程序增加内存量提升流畅程度 方法一. ...

  5. java css网页布局实例_java代码例子

    JAVA 类名.方法名(这里面写的是什么)能不能写个代要是类名直接调用的方法,那这个方法就是静态的(static)方法,是不用new出新对象实例就可以直接调用的方法.看下面例子: class A{ p ...

  6. java 输入五种水果_java代码,实现输入编号,输出对应水果的单价~~~~

    总结:总感觉有问题,因为输出我写的太不对劲了,直接把price的价格写了出来然输出显示-- package com.badu; import java.util.Scanner; //从键盘输入次数, ...

  7. java 随机生成简体汉字_Java代码实现随机生成汉字的方法|chu

    一.背景知识 GB 2312-80 是中国国家标准简体中文字符集,全称<信息交换用汉字编码字符集・基本集>,由中国国家标准总局发布,1981年5月1日实施.GB2312 编码通行于中国大陆 ...

  8. java ip加密如何访问_java代码中如何实现http访问

    作者:释怀Na 出自:CSDN 原文:blog.csdn.net/qq_35906921/article/details/98076258 java代码中如何实现http访问 大概的实现就是 请求ht ...

  9. java 中组合与复用_Java 代码复用(组合与继承)

    java中的类都是围绕着类进行的.可以通过创建新类来复用代码,而不必从头编写.可以使用别人已经开发并调试好的类.此方法使用的窍门在于使用类而不破坏现有的程序代码.达到这一目的的方法有两种: 第一种方法 ...

最新文章

  1. “睡眠猴子”团队项目及成员介绍
  2. Javascript继承机制的设计思想
  3. python数组合并、输入三行数据,如何在python中合并两个或三个3D数组?
  4. 假如我们的坦克继续前进队——需求改进系统设计
  5. 说说计算机发展史在你印象里都有哪些内容,《老王》导学案及答案
  6. 年轻人,被领导骂是怎样一种感觉?
  7. gpu云服务器运行游戏_追求高性能游戏,高帧高画质运行,你的手机需要多强的GPU才够?...
  8. 手机语音翻译的小妙招,一步一步教你!一键音频转文字
  9. Linux 进程服务查看(服务启动时间或运行时间查看)
  10. python 66:re正则表达式5(全- tcy)
  11. 手机音乐计算机软件,盘点适合手机音频剪辑软件
  12. 琵琶行用计算机弹,琵琶行中的三次弹奏
  13. An illegal reflective access operation has occurred警告
  14. 你的必备技能 —— 方法
  15. LinkedIn高级分析师王益:大数据时代的理想主义和现实主义
  16. Unity3D项目Plugins目录组织
  17. 软件测试基础知识学习
  18. c#操作word图表(二)
  19. 学习如何利用docker建立容器,然后用fastqc分析数据
  20. 水源热泵机组变流量水系统节能优化探讨

热门文章

  1. jQuery Mobile中按钮button的data-*选项
  2. scrapy 命令行基本用法
  3. 在同一个数据库表中添加不同的数据(笛卡尔积)
  4. leetcode解题笔记-Summary Ranges
  5. 采样干扰十大滤波算法程序大全
  6. 【整理】C#2.0特性之局部类、空属类型和静态类
  7. TD8.0管理员工具
  8. [转载] Python3 open()函数
  9. [转载] Python3接口自动化框架:第三方openpyxl库读取excel之命名元组namedtuple承载数据
  10. java连接oracle数据库jdbc