• 手写商用Java虚拟机HotSpot,疯狂磨练技术中


    在当前Java行业激烈竞争的形式下,唯有掌握技术,心中才能不慌。在多年前,我就开始苦深度钻研Java底层实现,将HotSpot虚拟机的各种实现看了个遍,但是眼看百遍也不如手过一遍,所以我打算把HotSpot虚拟机的精华实现部分用手敲出来,这个过程注定不会轻松,但主要是不能心急,心态一定要好,每天坚持一点点,终将实现这个目标。

    这个过程还会录制一些免费视频,简单介绍一下这个视频适合的目标人群,达到的目的等。

    1、目标人群

    对虚拟机底层实现有浓厚兴趣的人

    想提升Java技术,精通Java语言的人

    想切入虚拟机和编译器领域研发的人

    想通过大型复杂的项目提升C++水平的人

    不过HotSpot VM项目太过复杂,对C++、Linux系统编程、汇编指令、机器指令、编译原理等各方面都有较高的要求,如果这些方面的基础比较弱的话,还需要多加强。

    2、达到的目的

    精通Java的底层实现

    对虚拟机的性能调优和故障排查得心应手

    能够对虚拟机整体的实现有一个清晰的认识,达到动手开发虚拟机的能力

    对后续研究更为复杂的C2编译器和G1等垃圾收集器有非常大的帮助

    熟练使用C++

    熟练掌握汇编语言

    当研究lua、python等虚拟机时会感到更简单,研究v8等时感觉代码许多都很熟悉,很类似

    另外,开课也会让许多人坚持下来,毕竟有人引路,也能节省非常多的时间和精力

    3、编译调试环境

    Linux(Ubuntu 16.04)

    CPU架构为X86,位数为64

    版本仅支持JDK1.8(也就是向前兼容的代码全部省略)

    Linux内核版本 4.4.0-210-generic

    GNU 5.4.0版本的编译器

    编辑器:Visual Studio Code1 .51.0

    使用语言:主体为C++语言,少量汇编有C语言

    4、功能说明

    商用HotSpot VM手写内容时,由于整个工程的代码在50万行左右,其中95%以上都是C++。我们只实现其实的精华部分即可,所以许多功能都不会实现。

    不实现的功能如下:

    (1)只实现C1编译器,不实现C2编译器

    (2)没有指针压缩版实现

    (3)堆不支持大页

    (4)字节码解释器不再手写实现(PC上的效率太低,不适合生产用,但是会详细介绍)

    (5)只包含Serial/Serial Old收集器,后期会实现G1,不实现Parallel和CMS等收集器

    (6)不对类加载过程中的类进行合法性验证,也就是没有验证阶段

    (7)不实现偏向锁和轻量级锁,直接使用重量级锁,会详细介绍偏向锁和轻量级锁

    (8)线程采用NPTL 2.23版本,不兼容LinuxThreads

    (9)不对一些统计做实现,如写PerfData, NMT等功能,记录GC日志等

    (10)不实现SharedCDS

    (11)省略SecurityManager和Protected Domain,类型安全检查约束

    (12)不实现调试信息记录

    (13)FlatProfiler不实现

    (14)不实现一些实验性质的逻辑

    (15)可省略的一些验证逻辑,如验证AdapterBlob的正确性,加上-XX:-VerifyAdapterCalls命令省略

    (16)不对一些支持Java层Deprecated方法的功能进行实现,如线程的suspend和resume

    (17)对默认选项为false的逻辑不实现,如UseNUMA等

    (18)JNI和JVMTI选择性实现

    (19)不实现vmStructs,不支持 SA(Serviceability Agent)

    (20)不实现JMX、Attach及内部一些命令,如dumpheap、threaddump、jcmd及load等

    (21)atomic及orderaccess等涉及到多处理器问题时,针对多核处理器来写代码

    当然,后续还有非常多需要补充和完善的地方,请持续关注...

    5、实现路径:

    大模块的实现路径如下:

    内部锁

    线程

    二分模型

    类的加载和解析

    堆的简单规划

    元数据区

    CodeCache

    模板解释器解释执行

    Serial和Serial Old垃圾收集器

    C1编译器

    由于各个模块都是耦合紧密,相互交错,所以具体编写时会是一个循序渐进,逐步完善的过程。不会是一个模块写完再另外一个模块,需要以基本面完善点这样一个过程。

    6、后续计划

    在B站上免费更新一部分视频,后续有收费开课的打算。免费课程大纲如下:

    手写Java虚拟机HotSpot终于要录制一系列视频啦!

    有对虚拟机、Java性能故障诊断与调优等感兴趣的人可以入群讨论。

     

     

     

     

     

     

  • 相关阅读:
    K8S基础笔记
    《高效能人士的七个习惯》思维导图
    薅羊毛必备之-------青龙面板白嫖京东
    ssm079基于SSM框架云趣科技客户管理系统+jsp
    golang中常用的定义map的两种方法
    时间序列分析的表示学习时代来了?
    回溯法 n皇后
    【校招VIP】java开源框架之redis
    EDUCoder编程练习题解(编辑与调试)
    python xlrd+xlwt+xlutils处理excel
  • 原文地址:https://www.cnblogs.com/mazhimazhi/p/17771509.html