作者 | 稳
最开始学编程是学的C语言,后来工作了就使用了Mac电脑,发现C语言没法移植,感觉很麻烦,代码都得重写一遍,毕业后开始做安卓开发。
接触了Java语言,我第一反应就是,会不会我以后换电脑,代码还需要重写一遍,这不很麻烦?在开发的时候发现了Java会生成 .class文件,开始没觉得怎么样,后来一天用windows开发的同事让我把demo借他看看,发现可以直接在windows上运行,这才知道这都是Java虚拟机的功劳,后来他推荐给我周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践 》 一书,是第二版,买回来就爱不释手,隔段时间就翻看,随着工作年龄的增加,每次翻看,对里面的内容都有更加深刻的理解。
“write once, run everywhere“ 这个功能太赞了!!可以跨平台了!随着不断地研读才知道他是将 .java生成.class 文件。然后JVM 会将 .class 文件翻译成机器码(101010) 在不同的平台上,JVM会将相同的.class文件转换成不同的机器码。再深入学习就理解了Classloader,Java将class文件的二进制文件加载到JVM中的内存中,放在了方法区里面,然后在堆中创建class对象。用来封装方法区中的数据结构。然后映射为JVM可以识别的数据结果(class对象),这个class对象就是用来访问方法区的入口。然后就是双亲委派,打破双亲委派。这段内容看似简单,但是因为当时水平有限,反复阅读了很多遍才能理解。现在还能记得第一次看这段内容的时候,真的是味同爵蜡。 通过反复的看才真正理解周志明老师书中的意思,真的是书读百遍其义自见。
感觉JVM真的很难,工作一两年的去啃英文的Java虚拟机规范更是难上加难,幸亏有了周志明的《深入理解Java虚拟机》这本书, 让我们可以最快速的去理解 Java虚拟机的实现原理,代码是怎么跑起来的。
后来就遇到了更多关于Java虚拟机的问题,因为Java虚拟机自动地进行内存的管理、回收,所以马上就出现了oom等问题,根本就无从下手,这个时候就想到了《深入理解Java虚拟机》赶紧拿起来翻看,这才得知内存泄漏、内存溢出等问题。知道了栈上分配、内存逃逸、MLAB等技术,也理解了gc的流程、新生代、来年代、minorgc、fullgc等等。感觉JVM虚拟机内存自动管理真是个双刃剑,也需要开发者了解其内部原理。
同时也很感谢周志明写出了《深入理解Java虚拟机:JVM高级特性与最佳实践》 这本书,让国内Java开发者能快速的了解Java虚拟机的原理,解决了很多开发上的问题。
Java还在不断的进步,JVM也不断的迭代,作为Java开发者不断的去研究JVM是非常有必要的,只有不断地了解底层的原理,才能在工作中解决棘手问题,在同事中脱颖而出。
推荐阅读
推荐语: 这是一部从工作原理和工程实践两个维度深入剖析JVM的著作, 自2011年上市以来, 前两个版本累计印刷36次,销量超过30万册,大厂面试最佳参考手册,进阶架构师必读、Java优化神书,这些标签成就了它成为原创计算机图书领域不可逾越的丰碑。
第3版在第2版的基础上做了重大修订,内容更丰富、实战性更强:根据新版JDK对内容进行了全方位的修订和升级,围绕新技术和生产实践新增逾10万字,包含近50%的全新内容,并对第2版中含糊、瑕疵和错误内容进行了修正。