百姓大小事,一呼百应!

百姓网 | 百姓知道

互联网

如何从零基础开发一个 Java 虚拟机?

中国很少有人涉及 Java 虚拟机的开发,相关的规范书籍对于普通开发者而言也比较晦涩,难以入门。是否有像《Java 编程思想》那样有各种例子的辅助理解关于 Java 虚拟机开发的书籍?是否有培训机构提供相关入门课程?

2 个回答

  • RednaxelaFX | 2017-08-12 17:14:04

    嗯,并不是你一个人有这个想法。我正在尝试从零开始实现一个jvm,用Python实现(因为Python写的快啊),纯属做着玩,顺便能更多理解Jvm,业余时间有限,进展很慢,有兴趣的欢迎参加,https://github.com/scott-zhou/jedy

    本问答由RednaxelaFX提供

  • RednaxelaFX | 2017-08-12 17:05:03

    啊问题描述被修改了。为了保持原问题的原汁原味感觉,特引用在这里:
    标题:做java开发好几年了,感觉最最神秘的就是虚拟机了,今天脑洞大开,怎么开发一个java虚拟机?

    补充说明:做java开发好几年了,觉得最最神秘的就是java虚拟机了,国内也很少有人涉及这一块,一则是国外已经有很多成熟的产品,中国公司涉足这一块的动力不强;第二个原因可能是虚拟机相关的标准等文档都是英文写的,导致很多感兴趣的国人没法深入研究。我个人做java开发好几年了,基本上工作中遇到的问题,基本上在书中、网上都能找到答案。唯独虚拟机这一块似乎去研究它,需要看很多算法相关的东西,我买过一本java虚拟机规范,翻了一下,基本看不懂,太晦涩了,我还完全没入门,有没有像《java编程思想》那样有各种例子的辅助理解的关于java虚拟机方面比较系统的书,请帮忙推荐一下。第二个问题大家是怎么学习java虚拟机的,有没有培训机构有相关课程?怎么入门?

    对广大JVM爱好者同好们(不是只针对题主):

    首先,请学好英语。文档、资料是英文写的又如何,学好英语便不是问题。要知道技术英语一般比文学英语要容易读多了。

    其次,国内的下Java的开发者(或使Scala、Groovy等于JVM上运行的语言的开发者)当是多多于国内JVM的开发者。这在国外也是一样。但我想说的是国内其实现在也有不少JVM开发者的。

    不必深入了解JVM的细节就能够写出能正常运行(而且性能也还行)的Java应用程序,这是JVM做得好的地方。呃呵呵。

    ===================================

    行业状况

    国内有好些公司做涉及JVM的开发工作。

    阿里的JVM团队可能是现在最出名的,聚合了以前淘宝和支付宝的JVM团队,并且从IBM上海吸收了好几位之前参与IBM J9 JVM研发的大大,在美国这边也已经吸收了一位之前在Oracle HotSpot JVM团队的大大。这个团队目前主要是做基于OpenJDK的定制改进以及工具制作的工作,做得非常深入。地点在北京 / 上海 / 杭州应该都有。
    阿里云OS有另外一个做VM的团队,主要针对阿里云OS(移动/嵌入式设备的OS)做JVM、JavaScript引擎等的开发。地点在北京和杭州都有。

    华为也在国内有组织JVM的研发团队,有做OpenJDK HotSpot VM的AArch32、AArch64的移植及性能改进工作等。地点也是在北京和杭州都有。在加拿大Toronto新开的一个办公室吸收了好些以前在IBM做J9 VM的JIT编译器的大大,不知道他们会不会也有机会参与到华为关于JVM的研发中呢。
    然后华为的移动设备团队也有做Dalvik VM、Android Runtime等的定制开发。我不知道国内的团队在哪里,不过在美国这边的话在Santa Clara的美研所是有团队的。

    Intel在国内也有可观的涉及JVM的开发团队。以前有做Harmony的DRLVM开发,后来也有做Dalvik VM、Android Runtime的优化开发。

    龙芯也有把OpenJDK移植到龙芯/MIPS的开发团队。嗯不过人员似乎不够充足… 有兴趣加入的同学请联系 @敖琪 大大。
    传送门:[新闻] 龙芯开源了OpenJDK8的MIPS64 port

    以前IBM上海、HP上海都曾经有过做JVM的团队,分别负责做IBM J9 VM的性能改进和某些全新的功能(例如多租户JVM)、HP版HotSpot VM的C3编译器等。这些团队现在似乎都销声匿迹了。

    以上是直接在做JVM内部的工作的团队,国内还有一些公司会做不少跟JVM有紧密关系的东西,例如各种APM公司会做JVM的性能监控、字节码增强(bytecode instrumentation)之类的工作,然后也有一些顾问公司会做JVM的性能调优工作。做这些工作虽然不需要那么深入到JVM的内部,但也需要对JVM规范和大概实现方式有所了解才行。

    ===================================

    学习资料

    关于JVM的入门学习,我以前发过一个书单,请参考:从表到里学习JVM实现

    那个书单是好几年前发的了,没有更新到现在国内最新的状况。这两年来国内有不少新的原创和翻译的JVM相关书籍,对入门学习的同学来说真是大好消息。我美更新我的书单主要是因为我不在国内没能及时购买和阅读这些新出的书,不敢随便推荐。
    现在国内跟JVM相关的中文书有下面这么几本(有疏漏的欢迎评论提醒我补充):
    • Java虚拟机规范(Java SE 7版)
    • 深入理解Java虚拟机(第2版)
    • HotSpot实战
    • 实战Java虚拟机
    • 自己动手写Java虚拟机<- 作者用Go语言按照JVM规范自己写的一个非常简单的JVM实现
    • Java性能优化权威指南<- Charlie写的对应JDK6的版本
    • Java性能权威指南<- Scott写的对应JDK7的版本
    (深入Java虚拟机(原书第2版)比较过时所以我就不再推荐了。要读的话也请读原版)

    上面的《自己动手写Java虚拟机》一书写的还真是作者自己从零开始实现简单JVM的历程。它虽然没有实现GC(依靠Go语言的运行时自身的GC)也没有实现JIT编译器(只用解释器),但是在核心运行时部分该做的许多东西都做了,挺好的。
    虽说简易JVM与高性能JVM之间有巨大的差距,要最终达到能实现高性能JVM的水平的话总归得迈出第一步。

    高性能的JVM实现涉及的知识面既广又深,有纯粹的编译原理,有垃圾回收,有体系结构,有操作系统,有并行/并发编程,并不是说写一个JVM只要知道JVM自身的规范和一门编程语言(如C++)的入门知识就够的。上面的书单列举的几本进阶书籍是这些额外知识的引导入门和稍微进阶一点的书,供同学们参考。

    要说培训机构…我是没听说国内有哪些培训机构做深入的JVM相关知识的培训的。我以前在淘宝的时候有在淘宝技术大学(当时淘宝的内部技术培训部门)开过深入JVM系列的课程,不过讲得还不够好,经常把来听课的同事讲得睡着了(orz
    我离开了阿里之后应该也还有其它同事做类似的内部培训吧。毕竟有自己的JVM团队在,不怕没人懂行。

    我以前在JavaEye / ItEye组织过一个讨论区是专门讨论跟高级语言虚拟机相关话题的,高级语言虚拟机。里面有写老讨论串还挺有营养的,欢迎大家参考。
    其中我的一些帖子的集合的链接我发在博客里了:自己关于VM的帖的目录

    然后也欢迎大家参考我在百姓知道上对关于JVM的问题的回答,以及相关专栏文章。

    以上。

    本问答由RednaxelaFX提供

* 本站部分内容来源自网络,仅作分享之用,侵删。