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

news2024/11/18 9:34:01

在当前Java行业激烈竞争的形式下,唯有掌握技术,心中才不能慌。在多年前,我就开始苦练底层技术,但是眼看百遍也不如手过一遍,所以我打算把虚拟机的精华实现部分用手敲出来,这个过程注定不会轻松,但是心态不能着急,要一步一步来,一年二年三年后终能达成。

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

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等

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

5、实现路径:

大模块的实现路径如下:

内部锁

线程

二分模型

类的加载和解析

堆的简单规划

元数据区

CodeCache

模板解释器解释执行

Serial和Serial Old垃圾收集器

C1编译器

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

6、后续计划

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

在这里插入图片描述

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

有对虚拟机、Java性能故障诊断与调优等感兴趣的人可以入群讨论。
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1106067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于springboot的学生宿舍管理系统(源码+LW+调试)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

副业兼职做什么好呢?七个线上兼职线下副业可供选择

生活节奏的加快,人们的生活压力也与日俱增。为了缓解压力、增加收入,许多人都开始寻找副业兼职的机会。副业兼职不仅可以帮助我们应对经济困境,更可以为我们的生活注入新的乐趣和意义。但是在众多的副业兼职选择中,该如何找到适合…

(1)攻防世界web-Training-WWW-Robots

1.开启环境,查看网页 翻译一下 2.前往robots.txt 命令:http://61.147.171.105:57663/robots.txt 3.前往fl0g.php 命令:http://61.147.171.105:57663/fl0g.php 4.得到flag cyberpeace{92ec1ef9b6d900100399093b9ae9e386}

python烟花代码

下面是一个用Python编写的简单烟花特效代码,使用了Pygame库来实现图形显示。请确保你已经安装了Pygame库,如果没有安装,可以使用pip install pygame来安装。 import pygame import random# 初始化Pygame pygame.init()# 屏幕大小 width, hei…

热点报告 | 解压经济成为新风向,素人改造踩中用户痛点

您是否曾有以下困惑?打开小红书首页推荐,似乎已经被算法教育成了成熟的信息茧房,想要找到下一个热点,又忧虑一叶以障目;看着搜索框热词,又担心无法掌握热词背后的话题命脉,难以在浮光掠影中寻找…

【学位论文】GB/T 7714-2015引用的快捷操作方法

GB/T 7714-2015《信息与文献参考文献著录规则》于2015年12月1日开始实施,成为了目前国内主流的学位论文引用格式之一。本文介绍一种比较方便简单的引用方法。 7714示例: [1] He K, Gkioxari G, Dollr P, et al. Mask r-cnn[C]//Proceedings of the IEEE …

web安全之XSS攻击

什么是XSS攻击 XSS(Cross-Site Scripting)又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行。XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞,是由于 Web 应用程序对用户的输入过滤不足而产生的。 常见…

基于react18+arco+zustand通用后台管理系统React18Admin

React-Arco-Admin轻量级后台管理系统解决方案 基于vite4构建react18后台项目ReactAdmin。使用了reactarco-designzustandbizcharts等技术架构非凡后台管理框架。支持 dark/light主题、i18n国际化、动态路由鉴权、3种经典布局、tabs路由标签 等功能。 技术框架 编辑器&#xff…

pip install huggingface_hub时报错

pip install huggingface_hub时报错: 可以尝试:pip install --upgrade huggingface_hub 进行安装 方法参考了:https://blog.csdn.net/m0_72295867/article/details/132060750

vue.js - 断开发送的请求,解决接口重复请求数据错误问题(vue中axios多次相同请求中断上一个)

描述 进入页面时第一个接口还在请求,立即切换tab请求第二个接口。但是第二个接口响应比第一个接口响应快,页面展示的时第一个接口的数据,如图: 解决方法 判断如果是相同的接

谷歌浏览器跨域及--disable-web-security无效解决办法

谷歌浏览器跨域设置 (1)创建一个目录,例如我在C盘创建MyChromeDevUserData文件夹 (2) 在桌面选择谷歌浏览器右键 -> 属性 -> 快捷方式 -> 目标,添加--disable-web-security --user-data-dirC:\M…

第六届物业管理创新发展论坛在深召开,鹏业受邀参加并发表主题演讲

10月12日至14日,由中国物业管理协会(以下简称“中物协”)主办,物业管理行业唯一报备商务部的国际性展会——2023中国国际物业管理产业博览会(以下简称“物博会”)在深圳会展中心隆重举行。 本届物博会同期还…

Docker是一个流行的容器化平台,用于构建、部署和运行应用程序。

文章目录 Web应用程序数据库服务器微服务应用开发环境持续集成和持续部署 (CI/CD)应用程序依赖项云原生应用程序研究和教育 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:…

基于PHP的创意设计分享系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Cron表达式每月20号晚18点执行

Cron表达式每月20号晚18点执行 0 0 18 20 * ?验证正确性

linux性能分析(一)如何查看网络的性能指标

一 如何查看网络的性能指标 说明: 以下案例中的相关命令只是粗略讲解,后续会有针对性的细讲补充: 各个案例通过不同维度衡量网络的性能指标 ① 如何进行性能分析 思考:如何进行性能分析?1、前提:一定是系统出现不符合预期的…

MS35774,高精度、低噪声的两相步进电机驱动芯片

兼容替代ADI的TMC2225(方案替代).TMC2208(P2P),车规MS35774A 低噪声 256 细分微步进电机驱动 MS35774/MS35774A 是一款高精度、低噪声的两相步进 电机驱动芯片,芯片内置功率 MOSFET ,长时…

Flutter之Widget生命周期

目录 初始化构造函数initStatedidChangeDependencies 运行时builddidUpdateWidget 组件移除deactivatedisposereassemble 函数生命周期说明:实际场景App生命周期 前言:生命周期是一个组件加载到卸载的整个周期,熟悉生命周期可以让我们在合适的…

Android11 移植memtester压测内存

需求如题,从网上下载了memtest源码压缩包,准备放到系统源码编译,然后push到板子上执行,结果,编译出来一堆问题,报build err。 做如下代码改动: external/memtester-4.5.1/Android.mk | 16 exte…

绝地求生msvcp140.dll丢失的解决方法,教你轻松解决

在计算机的使用过程中,我们可能会遇到各种技术问题。其中,“msvcp140.dll丢失”是一个常见的错误提示。这个错误通常出现在运行某些程序或游戏时,表示找不到所需的DLL文件。本文将详细介绍五种解决此问题的有效方法。 方法一:重新…