谈谈你对java平台的理解?

问题:谈谈你对java平台的理解?java是解释执行,这句话对吗?

典型回答:java本身是一种面向对象的语言,具有很好的跨平台的能力,能够做到“write once ,run anywhere”。另外就是GC机制,java通过垃圾回收器回收分配内存,程序员无需自己操心内寸的回收问题。

我们日常会接触到jre和jdk。jre是java运行环境,包含了jvm和java类库等。jdk则是在jre的基础上提供了更多的工具,比如编译器,和一些诊断工具等。

java是解释执行,这句话不是很准确。java代码在执行时,先通过javac编译为字节码bytecode,在运行时,通过jvm内嵌解释器转换为最终机器码。但常见jvm,比如Oracle JDK提供的Hotspot JVM,都提供了jit(just in time)动态编译器,能够在运行时将热点代码编译成机器码,这部分属于编译执行。

对于这个问题,还有其他方面可以扩展,比如:

java语言特性,包括泛型,lambda表达式等特性。

基础类库,包含集合,IO/NIO,网络,并发,安全等。

对于日常使用较多的类库,可以整理一下。

jvm的知识和概念,如java类加载机制,常用版本jdk的内嵌Class-Loader,如Bootstap,Application,Extension Class-Loader,自定义Class-Loader等。还有GC机制,常见垃圾回收器如Serial GC,Paraller GC,CMS,G1等。

如下图所示:

关于解释执行和编译执行的问题,可以深入讨论一下。

通常我们不是java分为编译期和运行时。java的编译期和C/C++是不同的,java编译生成的是.class字节码文件,而不是可以直接执行的机器码。

java是通过字节码和jvm来实现一次编译,到处执行的。

运行时,java通过类加载器Class-Loader加载字节码,解释或编译执行。主流jdk版本,如jJDK 8实际上是一中混合模式(Xmixed)。Oracle Hotspot JVM内置两个JIT编译器,C1对应对启动速度敏感的client模式,C2对应长时间运行的sever模式。默认采用分层编译(TieredCompilation)。

虚拟机启动时可以指定不同参数对于运行模式进行选择。如使用-Xint只使用解释执行,不使用编译执行。这样的话摒弃了JIT编译器的性能优势。解释器是逐条读入,逐条解释执行的。-Xcomp参数是关闭解释器,这种模式会使jvm的启动慢得多。同时有些JIT优化方式,不进行profiling往往不能有效优化。

Jdk9提供一种AOT(Ahead-of-Time compilation)的编译模式,直接将字节码编译成机器码。避免了JIT预热等方面的开销。

原文地址:https://www.cnblogs.com/wangzepu/p/9351133.html

时间: 2024-10-11 02:02:56

谈谈你对java平台的理解?的相关文章

java面试题(杨晓峰)---谈谈你对java平台的理解

从你接触java开发到现在,你对java最直观的印象是什么呢?是他宣传的"write once ,run anywhere"还是目前看已经有些形式主义的语法呢?你对于java平台到底了解到什么程度?请先停下来总结思考一下. 今天我要问你的问题是,谈谈你对java平台的理解?"java是解释执行"这句话正确吗? 典型回答. java本身是一种面向对象的语言,最显著地特征有两个方面,一是所谓的"书写一次,到处运行.write once,run anywhere

Java核心-01谈谈你对Java平台的理解

今天我要问你的问题是,谈谈你对 Java 平台的理解?“Java 是解释执行”,这句话正确吗? 典型回答 Java本身是一种面向对象的语言,最显著的特性有两个.一是所谓的“书写一次,到处运行”,能够非常容易获得跨平台能力:另一个就是垃圾收集,Java通过垃圾收集器回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收. 我们日常接触到 JRE( Java Runtime Environment) 或者 JDK( Java Development Kit).JRE 也就是 Java 运行

谈谈你对Java 平台的理解

经典回答 Java语言是一种面向对象的高级语言,它最显著的有两个特性,一是通过平台中立的class文件格式和屏蔽底层硬件差异的jvm实现'一次编写,到处运行':二是通过'垃圾收集器'管理内存的分配和回收. Java 是一种简单.严谨并且适合编写的语言,它不像C/C++ 那样有很多晦涩难懂的内容,如头文件.指针.结构等等.我们编写java 会接触到 JRE(Java Runtime Environment)或者 JDK(Java Development Kit). JRE,也就是 Java 运行环

谈谈对Java平台的理解

从我第一次接触Java的时候,老师就说"Write once,run anywhere",这句话虽然听起来有一点太过于形式主义,但是也突出了它的特点.那么,现在的我们应该总结一下和思考一下,自己对于Java平台的理解. Java本身是一种面向对象的语言,最显著的两个特性有两个方面: ①.书写一次,到处运行,具有跨平台的能力: ②.具有垃圾收集(GC,Garbage Collection)功能,Java通过垃圾收集器(GC)回收分配内存,大部分情况下,程序员不需要自己担心内存的分配和回收

对Java平台的理解(ing)

1)  Java是一种面向对象的语言,最显著的特性有两个方面: ----书写一次,到处运行(Write once,run anywhere) 能够非常容易的获得跨平台的能力 ----垃圾收集(GC,Garbage Collection) Java通过垃圾收集器(Garbage Collector)回收分配内存,大部分情况下,程序员不需要自己操心内存的分配和回收. 2) JRE(Java Runtime Environment),是指Java运行环境,包含了JVM和Java类库,以及一些模块等.

java 平台的理解

一:java不仅仅是解释执行(java编译成字节码,在转换成机器码),还有动态编译,在程序运行时,利用jit编译将热点代码编译成机器码,这时候就是编译执行,不是解释执行 二: 三:jdk8是解释和编译混合模式,也有server和client模式,也有c1,c2的内置的jit编译 四:-xint 就是告诉虚拟机解释执行,放弃编译执行 ,-xcomp 就是关闭解释执行. 五:aot编译.优化了jit的预热,直接将字节码转成机器码 原文地址:https://www.cnblogs.com/hanguo

谈谈我对Java中CallBack的理解

谈谈我对Java中CallBack的理解 http://www.cnblogs.com/codingmyworld/archive/2011/07/22/2113514.html CallBack是回调的意思,熟悉Windows编程的人对"回调函数"这四个字一定不会陌生,但是Java程序员对它可能就不太了解了."回调函数"或者"回调方法"是软件设计与开发中一个非常重要的概念,掌握"回调函数"的思想对程序员来说(不管用哪种语言)

谈谈我对Spring IOC的理解

转自京东开涛大神的微博,这是我看过最好的对IOC DI的解释. 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种设计思想.在Jav

如何在Java平台上使用脚本语言做Java开发

如何在Java平台上使用脚本语言做Java开发     最近开始流行区分Java平台和Java语言,但很多Java开发者还是不能确定如何在 Java应用程序开发中结合脚本.本篇文章,Gregor Roth给出了在Java平台上使用脚本的方法.通过这篇文章,你可以了解怎样在你的Java应用程序中使用脚本,是否你要通过使用Groovy和 Jython把不同的Java应用程序模块粘合在一起,或者写一个你自己的基于JRuby的应用程序,适用于Java平台. 作为一个Java开发者,你可能已经注意到了,J