Hotspot源码解析-开篇

开篇

​ 接下来的一段时间,我将开始读取Hotspot源码,并输出源码解析文档。写这些文档的意义,一是为了加深自己的技术基础,二是为了分享技术,同时也为了大家一起探讨技术。所有的源码解析文档,都是以我个人的理解为基础,难免会出现一些问题,届时也希望大家发现指正,我将第一时间修改,另外写的不好,也不要喷,毕竟写这玩意,一不收钱,二不坑人,纯粹是为了技术交流。好了,废话不多说,言归正转。

前置知识

​ JVM顾名思义,就是虚拟出来的一个计算机,所以需要对计算机、操作系统等有一定的理解,当然也不要太在意,做开发的,原则上对计算机和操作系统多少都会有点认知的,我会尽量用Java程序员能懂的方式描述出来,下面列出一些前置知识要点:

1、C/C++语言

2、汇编语言

3、操作系统(这里主要是Linux)

4、计算机组成原理

说明

​ 关于源码解析文档怎么写,之前一直有两种想法,第一种是挑重点写;第二种是逐行解析,第一种怕缺失源码解析过程的连贯性,第二种篇幅又过多,过于冗余,所以还是两种结合着写吧,尽量做到既有连贯性,又不那么冗余。

了解Hotspot源码的意义

​ 从工程学角度讲,一个Java程序员,只要在JVM的基础上会使用对应的API解决日常工作中的问题就行,JVM创建的初衷就是为了使程序员可以花更多的时间处理自己的业务,而减少甚至完全消除对底层机器的认识,从这个角度讲,了解Hotspot的毫无意义。但是现实并非如此,随着Java语言的广范使用,且进入Java编程行业的人越来越多,业务也越来越复杂,对系统或服务调优的需求也逐渐增多,这就使得市场对Java编程人员的要求越来越高,开发人员为了面试、为了生活,技术上也越来越卷,10几年前,可能写个hello world就可以找到工作,现在不仅要会复杂业务,还要懂底层原理。从这个角度讲,了解Hotspot源码是很有必要的。至少了解后,你再也不用去背面试题了,也不会因为面试官对你背的题目做灵活面试的时候答不上来。在我看来了解源码更重要的意义,在于求证。我们历来受的教育大多是记忆型的,老师们经常会说,这个知识点大家记住就行,很少会引发学生的思考和提问。求证就是一个推导知识的过程,为什么是这样,可不可以是那样等,很多东西需要多多推导,多多求证,而不是死记硬背。当然,这不是叫大家过多的卷技术底层,除了兴趣爱好之外,这并没有太大的意义,纯属是资源浪费,内耗,我个人是呼吁大家别太卷了,多留点时间给生活、给家庭吧。

​ 近些年Java虚拟机技术在不断的优化和性能提升,这两年崭露头角的Graalvm就是一个代表,Graalvm为了提升性能把Java源文件直接编译成机器码,这样就省去了字节码这一层,性能理论上是有所提升的,但是同时也失去了Java本身的一些特性,比如反射、跨平台,至于这种改变到底是好是好坏,不予置评。

你可能感兴趣的:(Java虚拟机,java)