Java 词汇有什么样特点?
单纯初学;流程语言(PCB,承继,隐式);网络平台毫无关系性( Java 软件包同时实现网络平台毫无关系性);全力支持多处理器( C++ 词汇没有内建的多处理器监督机制,因而必须初始化操作控制系统的多处理器功能来进行多处理器面向对象,而 Java 词汇却提供了多处理器全力支持);可靠性;可靠性;全力支持互联网程式设计因而很方便快捷( Java 词汇问世这类就是为精简互联网程式设计设计的,因而 Java 词汇不仅全力支持互联网程式设计而且很方便快捷);校对与说明共存; 修改(参看:issue#544[1]):C++11 开始(2011 年的时候),C++就导入了多处理器库,在 windows、linux、macos 都能采用std::thread和std::async来建立缓存。参照镜像:http://www.cplusplus.com/reference/thread/thread/?kw=thread开拓一下:
“Write Once, Run Anywhere(一场撰写,随地运转)”这句宣传品标语,真诚经典之作,广为流传了好几年!以致于,直至今天,依然有很多人觉得并行计算是 Java 词汇最小的竞争优势。实际上,并行计算早已并非 Java 最小的噱头了,各种 JDK 新优点也并非。目前市售并行计算技术早已非常成形,比如说你通过 Docker 就很容易同时实现并行计算了。事实证明,Java 强悍的自然生态才是!
JVM vs JDK vs JRE
JVM
Java 软件包(JVM)是运转 Java 二进制码的软件包。JVM 有特别针对相同控制系统的某一同时实现(Windows,Linux,macOS),目的是采用完全相同的二进制码,它们单厢得出完全相同的结果。二进制码和相同控制系统的 JVM 同时实现是 Java 词汇“一场校对,随地能运转”的终极目标。
JVM 并并非只有一类!只要满足用户 JVM 规范化,每一公司、组织或者个人都能开发自己的专用 JVM。换句话说他们平常碰触到的 HotSpot VM 实际上是是 JVM 规范化的一类同时实现罢了。
除了他们平常最常用的 HotSpot VM 外,还有 J9 VM、Zing VM、JRockit VM 等 JVM 。维基上就有常用 JVM 的对照:Comparison of Java virtual machines[2],钟爱的能去看看。因而,你能在Java SE Specifications[3]上找出各版的 JDK 相关联的 JVM 规范。

JDK 和 JRE
JDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切,还有校对器(javac)和工具(如 javadoc 和 jdb)。它能够建立和校对流程。
JRE 是 Java 运转时环境。它是运转已校对 Java 流程所需的所有内容的集合,包括 Java 软件包(JVM),Java 类库,java 命令和其他的一些基础构件。但是,它不能用于建立新流程。
如果你只是为了运转一下 Java 流程的话,那么你只需要安装 JRE 就能了。如果你需要进行一些 Java 程式设计方面的工作,那么你就需要安装 JDK 了。但是,这并非绝对的。有时,即使您不打算在计算机上进行任何 Java 开发,仍然需要安装 JDK。例如,如果要采用 JSP 部署 Web 应用流程,那么从技术上讲,您只是在应用流程服务器中运转 Java 流程。那你为什么需要 JDK 呢?因为应用流程服务器会将 JSP 转换为 Java servlet,因而需要采用 JDK 来校对 servlet。
什么是二进制码?采用二进制码的好处是什么?
在 Java 中,JVM 能理解的代码就叫做二进制码(即扩展名为.class的文件),它不面向任何某一的处理器,只面向软件包。Java 词汇通过二进制码的方式,在一定程度上解决了传统说明型词汇执行效率低的问题,同时又保留了说明型词汇可移植的特点。所以, Java 流程运转时相对来说还是高效的(不过,和 C++,Rust,Go 等词汇还是有一定差距的),而且,由于二进制码并不特别针对一类某一的机器,因而,Java 流程无须重新校对便可在多种相同操作控制系统的计算机上运转。
Java 流程从源代码到运转的过程如下图所示:

他们需要格外注意的是.class->机器码这一步。在这一步 JVM 类加载器首先加载二进制码文件,然后通过说明器逐行说明执行,这种方式的执行速度会相对照较慢。而且,有些方法和代码块是经常需要被初始化的(也就是所谓的热点代码),所以后面引进了 JIT(just-in-time compilation) 校对器,而 JIT 属于运转时校对。当 JIT 校对器完成第一场校对后,其会将二进制码相关联的机器码保存下来,下次能直接采用。而他们知道,机器码的运转效率肯定是高于 Java 说明器的。这也说明了他们为什么经常会说Java 是校对与说明共存的词汇。
HotSpot 采用了惰性评估(Lazy Evaluation)的做法,根据二八定律,消耗大部分控制系统资源的只有那一小部分的代码(热点代码),而这也就是 JIT 所需要校对的部分。JVM 会根据代码每次被执行的情况收集信息并相应地做出一些优化,因而执行的次数越多,它的速度就越快。JDK 9 导入了一类新的校对模式 AOT(Ahead of Time Compilation),它是直接将二进制码校对成机器码,这样就避免了 JIT 预热等各方面的开销。JDK 全力支持分层校对和 AOT 协作采用。但是 ,AOT 校对器的校对质量是肯定比不上 JIT 校对器的。为什么说 Java 词汇“校对与说明共存”?
其实这个问题他们讲二进制码的时候早已提到过,因为比较重要,所以他们这里再提一下。
他们能将高级程式设计词汇按照流程的执行方式分为两种:
编译型:校对型词汇[4]会通过校对器[5]将源代码一场性翻译成可被该网络平台执行的机器码。一般情况下,校对词汇的执行速度比较快,开发效率比较低。常用的校对性词汇有 C、C++、Go、Rust 等等。说明型:说明型词汇[6]会通过说明器[7]一句一句的将代码说明(interpret)为机器代码后再执行。说明型词汇开发效率比较快,执行速度比较慢。常用的说明性词汇有 Python、JavaScript、PHP 等等。
根据维基介绍:
为了改善校对词汇的效率而发展出的即时校对[8]技术,早已缩小了这两种词汇间的差距。这种技术混合了校对词汇与说明型词汇的优点,它像校对词汇一样,先把流程源代码校对成二进制码[9]。到执行期时,再将二进制码直译,之后执行。Java[10]与LLVM[11]是这种技术的代表产物。
相关阅读:基本功 | Java 即时校对器原理解析及实践[12]为什么说 Java 词汇“校对与说明共存”?
这是因为 Java 词汇既具有校对型词汇的特征,也具有说明型词汇的特征。因为 Java 流程要经过先校对,后说明两个步骤,由 Java 撰写的流程需要先经过校对步骤,生成二进制码(.class文件),这种二进制码必须由 Java 说明器来说明执行。
Oracle JDK vs OpenJDK
可能在看这个问题之前很多人和我一样并没有碰触和采用过 OpenJDK 。那么 Oracle JDK 和 OpenJDK 之间是否存在重大差异?下面我通过收集到的一些资料,为你解答这个被很多人忽视的问题。
对于 Java 7,没什么关键的地方。OpenJDK 项目主要基于 Sun 捐赠的 HotSpot 源代码。此外,OpenJDK 被选为 Java 7 的参照同时实现,由 Oracle 工程师维护。关于 JVM,JDK,JRE 和 OpenJDK 之间的区别,Oracle 博客帖子在 2012 年有一个更详细的答案:
问:OpenJDK 存储库中的源代码与用于构建 Oracle JDK 的代码之间有什么区别?
答:非常接近 – 他们的 Oracle JDK 版构建过程基于 OpenJDK 7 构建,只添加了几个部分,例如部署代码,其中包括 Oracle 的 Java 插件和 Java WebStart 的同时实现,以及一些闭源的第三方组件,如图形光栅化器,一些开源的第三方组件,如 Rhino,以及一些零碎的东西,如附加文档或第三方字体。展望未来,他们的目的是开源 Oracle JDK 的所有部分,除了他们考虑商业功能的部分。总结:(提示:下面括号内的内容是基于原文补充说明的,因为原文太过于晦涩难懂,用人话重新说明了下,如果你看得懂里面的术语,能忽略括号说明的内容)
上面的也只是基础的知识教程,并并非很好的一个教程,如果你要是对于Java比较钟爱,能在这里好好的学习一下Java的教程。我在这里准备了

