Java36 讲笔记 第一讲 谈一谈你对Java平台的理解

Java是解释执行这句话对吗  这句话不太准确 

我们开发的Java的源代码,首先通过Javac编译成字节码(bytecode),然后,在运行时,用过Java虚拟机(JVM)内嵌的解释器将字节码转换成为最终的机器码。jit编译器,动态编译器,JIT能够在运行时将热点代码编译成机器码,这种情况下部分热点代码就属于编译执行,而不是解释执行。

Java本身是一种面向对象的语言,两个特性:1,书写一次到处运行 2,垃圾收集

除了我们日常最常见的Java使用模式,其实还有一种新的编译方式,即所谓的AOT,直接将字节码编译成机器代码,这样就避免了JIT预热等各方面的开销,比如Oracle JDK 9引入了实验性的AOT特性,并且增加了jaotc工具,。

JVM作为一个强大的平台,不仅仅只有Java语言可以运行在JVM上,本质上合规的字节码都可以运行,Java语言自身也为此提供了便利类似的Clojure、Scala、Groovy、JRuby、Jython等大量JVM语言

谈谈你对Java平台的理解

大神回答:

“一次编译、到处运行”说的是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特性:
面向对象(封装,继承,多态)
平台无关性(JVM运行.class文件)
语言(泛型,Lambda)
类库(集合,并发,网络,IO/NIO)
JRE(Java运行环境,JVM,类库)
JDK(Java开发工具,包括JRE,javac,诊断工具)

Java是解析运行吗?
不正确!
1,Java源代码经过Javac编译成.class文件
2,.class文件经JVM解析或编译运行。
(1)解析:.class文件经过JVM内嵌的解析器解析执行。
(2)编译:存在JIT编译器(Just In Time Compile 即时编译器)把经常运行的代码作为"热点代码"编译与本地平台相关的机器码,并进行各种层次的优化。
(3)AOT编译器: Java 9提供的直接将所有代码编译成机器码执行

扫描二维码关注公众号,回复: 2722999 查看本文章

大神回复:

1,JVM的内存模型,堆、栈、方法区;字节码的跨平台性;对象在JVM中的强引用,弱引用,软引用,虚引用,是否可用finalise方法救救它?;双亲委派进行类加载,什么是双亲呢?双亲就是多亲,一份文档由我加载,然后你也加载,这份文档在JVM中是一样的吗?;多态思想是Java需要最核心的概念,也是面向对象的行为的一个最好诠释;理解方法重载与重写在内存中的执行流程,怎么定位到这个具体方法的。

2,发展流程,JDK5(重写bug),JDK6(商用最稳定版),JDK7(switch的字符串支持),JDK8(函数式编程),一直在发展进化。3,理解祖先类Object,它的行为是怎样与现实生活连接起来的。4,理解23种设计模式,因为它是道与术的结合体。


 

猜你喜欢

转载自blog.csdn.net/weixin_41888669/article/details/81274171