openjdk jvm

简介与历史

众所周知,从Java 7开始,OpenJDK是Java的参考实现(RI)。 下面的时间轴使您对OpenJDK的历史有了一个了解:

OpenJDK的历史(2006年至今)

有关更多详细信息,请参见采用OpenJDK –过去,现在和将来 [1] 。

如果您想知道从Oracle,Red Hat等供应商处下载的JDK或JRE二进制文件,则可能是这些线索都来自OpenJDK。 然后,每个供应商都会添加一些由于安全性,专有性或其他原因而尚未开源的人工制品。

OpenJDK由什么制成?

OpenJDK由许多存储库组成,即corba,hotspot,jaxp,jaxws,jdk,langtools和nashorn。 在OpenjJDK8和OpenJDK9之间,没有引入任何新的存储库,而是进行了许多新的更改和重组,这主要归功于Jigsaw – Java本身的模块化[ 2 ] [ 3 ] [ 4 ] [ 5 ]。

回购构成,语言细分(估计指标)

多年来,Java语言和平台是如何构建的?

Java是通过引导Java的较早(先前)版本来构建的,即Java是使用Java本身作为其构建块来构建的。 将旧的组件放在一起以创建新的组件,该组件在下一阶段将成为构建块。 在Scratch [6 ]或Wikipedia [7]上的Scheme中可以找到引导的一个很好的例子。

使用JDK7编译和构建OpenJDK8 [8],类似地,使用JDK8编译和构建OpenJDK9 [9]。 理论上,可以使用从OpenJDK8创建的映像来编译OpenJDK8,类似于使用OpenJDK9的OpenJDK9。 使用称为启动周期映像的过程–创建OpenJDK的JDK映像,然后使用同一映像,再次编译OpenJDK,这可以使用make命令选项来完成:

$ make bootcycle-images # Build images twice, second time with newly built JDK

make在OpenJDK8和OpenJDK9下提供了许多选项,您可以通过命名它们来构建单个组件或模块,即

$ make [component-name] | [module-name]

甚至并行运行多个构建过程,即

$ make JOBS=<n> # Run <n> parallel make jobs

最后使用install选项安装构建的人工制品,即

$ make install

一些神话破灭了

更具体地说,OpenJDK或Hotspot并不是完全用C / C ++编写的,代码库的很大一部分是好的ole Java(请参见上面的组成图)。 因此,您不必成为铁杆开发人员即可为Open JDK做出贡献。 甚至底层的C / C ++代码代码库也不令人恐惧或令人生畏。 例如,这是从vm / memory / universe.cpp中提取的代码片段。
在HotSpotrepo中– http://hg.openjdk.java.net/jdk6/jdk6/hotspot/raw-file/a541ca8fa0e3/src/share/vm/memory/universe.cpp [10]:

.
.
.
Universe::initialize_heap()if (UseParallelGC) {#ifndef SERIALGCUniverse::_collectedHeap = new ParallelScavengeHeap();#else // SERIALGCfatal("UseParallelGC not supported in this VM.");#endif // SERIALGC} else if (UseG1GC) {#ifndef SERIALGCG1CollectorPolicy* g1p = new G1CollectorPolicy();G1CollectedHeap* g1h = new G1CollectedHeap(g1p);Universe::_collectedHeap = g1h;#else // SERIALGCfatal("UseG1GC not supported in java kernel vm.");#endif // SERIALGC} else {GenCollectorPolicy* gc_policy;if (UseSerialGC) {gc_policy = new MarkSweepPolicy();} else if (UseConcMarkSweepGC) {#ifndef SERIALGCif (UseAdaptiveSizePolicy) {gc_policy = new ASConcurrentMarkSweepPolicy();} else {gc_policy = new ConcurrentMarkSweepPolicy();}#else // SERIALGCfatal("UseConcMarkSweepGC not supported in this VM.");#endif // SERIALGC} else { // default old generationgc_policy = new MarkSweepPolicy();}Universe::_collectedHeap = new GenCollectedHeap(gc_policy);
}
.
.
.

(请注意,以上代码段自此处发布以来可能已更改)
从上面的代码块中可以明显看出,我们正在研究如何使用预编译器符号来创建支持某种类型的GC(即串行GC或并行GC)的Hotspot代码。 同样,在切换一个或多个GC开关时,在上面的代码块中也选择了GC策略的类型,即,启用后使用UseAdaptiveSizePolicy选择“ 异步并发标记 和扫描”策略。 如果未选择“使用串行GC”或“使用并发标记扫描GC”,则所选的GC策略是“标记并扫描”策略。 所有这些以及更多内容都清晰易读且冗长,而不仅仅是格式精美的代码,其读取效果类似于英语。

可以在“ 采用OpenJDK中级和高级体验 [11]”文档中名为“深潜热点”的部分中找到更多评论。

建立您自己的JDK或JRE的步骤

早先我们提到过JDK和JRE映像–这些不再仅对Java世界的大型公司开放,您和我可以很容易地构建此类映像。 该过程的步骤已得到简化,有关快速入门的信息,请参见《 采用OpenJDK入门工具包》 [12]和《 采用OpenJDK中级和高级体验》 [11]文档。 有关相同步骤的详细版本,请参见“ 采用OpenJDK 主页” [13]。 基本上,从OpenJDK代码库构建JDK映像可归结为以下命令:
(设置步骤简短,省略了一些命令,有关详细步骤,请参见上面的链接)

$ hg clone http://hg.openjdk.java.net/jdk8/jdk8 jdk8 (a)...OpenJDK8

要么

$ hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk9 (a)...OpenJDK9

$ ./get_sources.sh(b)

$ bash配置(c)

$制作清晰的图像(d)

(设置步骤简短,省略了一些命令,有关详细步骤,请参见上面的链接)

要解释以上每个步骤中发生的情况:

(a)我们像使用git clone一样克隆openjdk mercurial回购。

(b)完成步骤(a)后,我们转到创建的文件夹,然后运行get_sources.sh命令,该命令等效于git fetch或git pull,因为步骤(a)仅降低了基础文件而不是所有文件和文件夹。

(c)在这里,我们运行一个脚本,该脚本检查并创建进行编译和构建过程所需的配置

(d)步骤(c)成功完成后,我们将执行完整的编译,构建并从构建的工件中创建JDK和JRE映像

如您所见,这些是构建伪影或JDK / JRE图像所遵循的简单步骤[步骤(a)仅需要运行一次]。

好处

  • 有助于Java语言和平台的发展和改进
  • 了解语言和平台的内部知识
  • 在执行上述操作的同时,了解OS平台和其他技术
  • 参与F / OSS项目
  • 紧随Java / JVM领域的最新变化
  • 从专业上获得帮助的知识和经验,但其他来源也难以获得(例如书籍,培训,工作经验,大学课程等)
  • 职业发展
  • 个人发展(软技能和人际网络)

有助于

加入Adopt OpenJDK [14]和Betterrev [15]项目,并通过向我们提供有关Java包括这些项目的所有内容的反馈来做出贡献。 加入Adoption Discuss邮件列表和其他与OpenJDK相关的邮件列表开始,这些将使您了解最新的进展和对OpenJDK的更改。 分叉您看到的任何项目,并通过拉取请求提交更改。

谢谢和支持

在JCP [21], Openjdk团队 [22],JUG(例如伦敦Java Community [16], SouJava [17])和巴西的其他JUG的帮助下, 采用OpenJDK [14]和伞项目得到了支持和进展。欧洲的水罐,例如BGJUG(保加利亚水罐) [18], BeJUG(比利时水罐) [19], 马其顿水罐 [20],以及许多其他小型水罐。 我们希望在不久的将来有更多的JUG和个人参与其中。 如果您或您的JUG希望参加,请联系。

翻译自: https://www.javacodegeeks.com/2014/12/how-is-java-jvm-built-adopt-openjdk-is-your-answer.html

openjdk jvm

openjdk jvm_Java / JVM是如何构建的? 采用OpenJDK是您的答案!相关推荐

  1. Java / JVM是如何构建的? 采用OpenJDK是您的答案!

    简介与历史 众所周知,从Java 7开始,OpenJDK是Java的参考实现(RI). 下面的时间轴使您对OpenJDK的历史有了一个了解: OpenJDK历史(2006年至今) 有关更多详细信息,请 ...

  2. JVM,JDK,JRE和OpenJDK有什么区别?

    本文翻译自:What is the difference between JVM, JDK, JRE & OpenJDK? What is the difference between JVM ...

  3. Java虚拟机(JVM源码):编译OpenJDK源码

    为什么要自己编译JDK源码 作为一个搞技术的同学,如果想在技术这条路上走下去,还是多研究些本质性的东西,修炼下内功.尤其是现在JDK都出到10了,如果你没有研究过,还是停留在之前的时代,那么确实说不过 ...

  4. 一周一论文(翻译 总结)— [SOCC 13] jVerbs Ultra-Low Latency for Data Center Applications 在JVM虚拟机上构建RDMA的verbs操作

    目录 Abstract 1. Introduction 2. Motivation 3. Background 4. Challenges 5.Desgin of jVerbs 5.1 Full RD ...

  5. Micronaut教程:如何使用基于JVM的框架构建微服务

    \ 本文要点 \\ Micronaut是一种基于jvm的现代化全栈框架,用于构建模块化且易于测试的微服务应用程序.\\t Micronaut提供完全的编译时.反射无关的依赖注入和AOP.\\t 该框架 ...

  6. 关于gradle加快构建速度采用阿里云中央仓库的配置

    近期开始了一段新的开始,在一家在线教育的公司开始下一阶段的工作,鉴于之前的面试中问到了spring的内容基本快要到源码层面的问题了,想要把spring的源码导到idea中,结果出现了下载极慢的问题,如 ...

  7. AI新基建如何构建?浪潮给出了一个答案

    作者 | Just 出品 | AI科技大本营(ID:rgznai100) 伴随生产力升级,社会基础设施也正在发生变化.而智慧时代的新型基础设施,要能够对外提供各种算力服务.数据服务和AI服务.浪潮认为 ...

  8. 2022年字节跳动JAVA面试,JVM调优和调优,附面试题答案

    面试必问:JVM原理和调优(附面试题) 一.详解JVM内存模型 二.JVM中一次完整的GC流程是怎样的 三.GC垃圾回收的算法有哪些 四.简单说说你了解的类加载器 五.双亲委派机制是什么,有什么好处, ...

  9. 与 Josh Bloch 探讨 Java 未来

    作者 Josh Long 译者 宋玮 发布于 2010年5月5日 下午9时7分 Josh Bloch在Sun公司多年为Java平台作出了杰出贡献(如果你用过Java Collections框架就会了解 ...

最新文章

  1. 基于MATLAB的交流电动机调速系统仿真
  2. 在MFC中使用Static text控件显示消息
  3. 达尔文进化奖_使用Kydavra GeneticAlgorithmSelector将达尔文进化应用于特征选择
  4. java work set没有显示出来_eclipse里新建work set,将项目分组放在不同文件夹
  5. 上线当天程序员锁死服务器,致公司破产解散
  6. 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
  7. OPCServer:使用Matrikon OPC Server Simulation
  8. 设置MyEclipse编码、补全快捷键、字体大小
  9. 【从线性回归到BP神经网络】第四部分:BP神经网络
  10. vue 中如何引入字体(思源黑体)
  11. FANUC主板图纸 电路图
  12. json解析小冒号:出错
  13. U3D AudioSource 完整音效截取部分
  14. 必应搜索引擎关键词网站采集URL域名工具国际版英文网址
  15. 深度解析dubbo源码系列
  16. 2018 Multi-University Training Contest 1 部分简单题解析
  17. 数学 计算机 生物学,数据:中国高校数学、物理、化学、生物、计算机5大学科实力排名!...
  18. element vue 上传模板_Vue Element UI upload 组件上传文件之后 file list 依旧是空数组
  19. PHP家长互助沙龙流程,亲子沙龙活动策划方案
  20. C语言-多层for循环详解

热门文章

  1. P2050-[NOI2012]美食节【费用流,动态连边】
  2. 51nod-诺德街【数学期望】
  3. P2048-[NOI2010]超级钢琴【RMQ,堆】
  4. 欢乐纪中某A and B组赛【2019.1.23】
  5. 【数论】ZAP-Queries(P3455)
  6. JavaFX图表(五)之气泡图
  7. SSL / TLS 协议运行机制详解
  8. Oracle入门(十二E)之视图操作
  9. 高级Java必看的10本书
  10. HikariCP-史上最快速的连接池