面试题“谈谈你对java平台的理解” Java 是解释执行”,这句话正确吗?

本文来次杨晓峰老师的课程,外加自己的理解总结。

典型回答

Java 本身是一种面向对象的语言,最显著的特性有两个方面,一是所谓的“书写一次,到处运行”(Write once, run anywhere),能够非常容易地获得跨平台能力;另外就是垃圾收集(GC, Garbage Collection),Java 通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收。 我们日常会接触到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit)。 JRE,也就是 Java 运行环境,包含了 JVM 和 Java 类库,以及一些模块等。而 JDK 可以看作是 JRE 的一个超集,提供了更多工具,比如编译器、各种诊断工具等。 对于“Java 是解释执行”这句话,这个说法不太准确。我们开发的 Java 的源代码,首先通过 Javac 编译成为字节码(bytecode),然后,在运行时,通过 Java 虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。但是常见的 JVM,比如我们大多数情况使用的 Oracle JDK 提供的 Hotspot JVM,都提供了 JIT(Just-In-Time)编译器,也就是通常所说的动态编译器,JIT 能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行了。

“一次编译、到处运行”说的是Java语言跨平台的特性,Java的跨平台特性与Java虚拟机的存在密不可分,可在不同的环境中运行。比如说Windows平台和Linux平台都有相应的JDK,安装好JDK后也就有了Java语言的运行环境。其实Java语言本身与其他的编程语言没有特别大的差异,并不是说Java语言可以跨平台,而是在不同的平台都有可以让Java语言运行的环境而已,所以才有了Java一次编译,到处运行这样的效果。
严格的讲,跨平台的语言不止Java一种,但Java是较为成熟的一种。“一次编译,到处运行”这种效果跟编译器有关。编程语言的处理需要编译器和解释器。Java虚拟机和DOS类似,相当于一个供程序运行的平台。
程序从源代码到运行的三个阶段:编码——编译——运行——调试。Java在编译阶段则体现了跨平台的特点。编译过程大概是这样的:首先是将Java源代码转化成.CLASS文件字节码,这是第一次编译。.class文件就是可以到处运行的文件。然后Java字节码会被转化为目标机器代码,这是是由JVM来执行的,即Java的第二次编译。
“到处运行”的关键和前提就是JVM。因为在第二次编译中JVM起着关键作用。在可以运行Java虚拟机的地方都内含着一个JVM操作系统。从而使JAVA提供了各种不同平台上的虚拟机制,因此实现了“到处运行”的效果。需要强调的一点是,java并不是编译机制,而是解释机制。Java字节码的设计充分考虑了JIT这一即时编译方式,可以将字节码直接转化成高性能的本地机器码,这同样是虚拟机的一个构成部分。

下面我们来看看我们的Java代码编译步骤(mixed模式下)。

1.Java代码经过javac编译成class文件(字节码)

2.class(字节码)文件经过JVM编译成机器码进行解释执行(解释执行)

3.对于热点代码,JIT(JustInTime)编译器会在运行时将其编译为机器码执行(编译运行)

从上面我们可以看出,在JVM默认的mixed模式下JAVA既不完全是解释运行也不完全是编译运行。

扩展

1.Oracle Hotspot JVM 是我们从Oracle下载的JDK中默认使用的JVM。

2.Oracle Hotspot JVM 中有两个JIT compiler 一个是C1,对应的模式是client, 一个是C2,对应的模式是server。

3.server和client模式的使用场景是什么, 我举个简单的例子client一般在我们进行开发的时候使用,server模式一般在生产环境使用,如果还想具体了解可以进一步搜索。

4.JVM运行方式不是一成不变,你可以根据场景在虚拟机启动的时候自己制定不同的运行模式
5.mixed模式: 用-Xmixed开启,即混合运行模式,也是Hotspot的默认模式

6.int模式: 用-Xint开启,即解释模式, 在这种模式下全部采取解释模式运行

7.comp模式: 用-Xcomp开启,这种模式下通知JVM关闭解释模式,采用编译模式运行。但往往导致无法得到良好的自动优化

8.在JDK9中提供了实验特性AOT(Ahead-of-Time Compilation)编译器允许将代码编译成机器码交给JVM运行

java理解图片

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值