谈谈对 java 平台的理解?

谈谈你对 Java 平台的理解 ? java 是解释执行的这句话正确?

回答

首先呢,java 是一门面向对象语言,有着反射,泛型,lambda等语言特性,并且有着诸多的Java 类库,比如 IO/NIO ,网络,util,安全类库,并发等。

它有着两种显著特性,第一种是容易跨平台,这种跨平台不同于C/C++ 需要考虑不同操作系统之间的差异性。java 的跨屏平台更像是中间件,屏蔽了操作系统的细节,达到解耦的目的,实现跨平台的优势。第二种是垃圾回收机制,java 通过垃圾回收机制,可以在大部分情况下,让程序员不必考虑内存的分配和使用问题。

日常接触到 JRE 和 JDK ,它们分别表示的是,JRE 是 java 的运行时环境,包括 java 虚拟机(jvm) 和 java 类库,而 jdk 则是包含 jre ,像是 jre 的一个超集,它里面还提供了各种诊断工具。

对于 java 是不是解释运行的说法并不准确,因为开发的 java 源代码经过 javac 的编译称为 .class 字节码文件,而不是机器码,在 jvm 运行时才被解释为机器码。但是常见的 jvm,大多数情况下都是使用 Oracle JDK 提供的 Hotsopt JVM ,都提供了 JIT 编译器,JIT 编译器能在运行时将热点代码编译成机器码,在这种情况下就属于编译执行而不是解释执行了。

知识扩展

面试时可以从很多方面谈起
从语言的本身特性和包含的工具,类库说起

  • java 是一门面向对象语言,有着反射,泛型,lambda等语言特性
  • Java核心类库包含集合类、线程相关类、IO、NIO、J.U.C并发包等;
  • JDK提供的工具包含:基本的编译工具、虚拟机性能检测相关工具,安全工具、诊断和监控工具等。

java 虚拟机说起

  • jvm 的概念
  • jvm 的运行机制
  • 大部分情况下,编程者只需要关心Java语言本身,而无需特意关心底层细节。包括对内存的分配和回收,也全权交给了GC。
  • 对于虚拟机而言,只要是符合规范的字节码,它们都能被加载执行,当然,能正常运行的程序光满足这点是不行的,程序本身需要保证在运行时不出现异常。所以,Scala、Kotlin、Jython等语言也可以跑在虚拟机上。

是否时解释执行?

java 分为 编译期和运行时。与 C/C++ 的编译不同。javac 编译生产的 .class 为字节码而不是机器码,java 通过 字节码和 jvm 这种跨平台抽象,屏蔽了操作系统和硬件的细节。

在运行时,JVM 会通过类加载器(Class-Loader)加载字节码,解释或者编译执行。主流 Java 版本中,如 JDK8 实际是解释和编译混合的一种模式,即所谓的混
合模式(-Xmixed)。通常运行在 server 模式的 JVM ,会进行上万次调用以收集足够的信息进行高效的编译,client 模式这个门限是 1500 次。Oracle Hotspot JVM 内置了两个不同
的 JIT compiler,C1 对应前面说的 client 模式,适用于对于启动速度敏感的应用,比如普通 Java 桌面应用;C2 对应 server 模式,它的优化是为长时间运行的服务器端应用设计的。
默认是采用所谓的分层编译(TieredCompilation)。

Java虚拟机启动时,可以指定不同的参数对运行模式进行选择。 比如,指定“-Xint”,就是告诉 JVM 只进行解释执行,不对代码进行编译,这种模式抛弃了 JIT 可能带来的性能优势。毕竟解释器(interpreter)是逐条读入,逐条解释运行的。与其相对应的,还有一个“-Xcomp”参数,这是告诉JVM关闭解释器,不要进行解释执行,或者叫作最大优化级别。那你
可能会问这种模式是不是最高效啊?简单说,还真未必。“-Xcomp”会导致JVM启动变慢非常多,同时有些 JIT 编译器优化方式,比如分支预测,如果不进行profling,往往并不能进行有效优化。

除了我们日常最常见的 Java 使用模式,其实还有一种新的编译方式,即所谓的 AOT(Ahead-of-Time Compilation),直接将字节码编译成机器代码,这样就避免了 JIT 预热等各方面的开销,比如 Oracle JDK 9 就引入了实验性的 AOT 特性,并且增加了新的 jaotc 工具。而且,Oracle JDK 支持分层编译和 AOT 协作使用,这两者并不是二选一的关系。

以上是对于极客时间的 java 核心技术面试精讲的学习心得和笔记

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值