我与虚拟机小红小蓝的故事
《深入理解Java虚拟机》是JVM领域的经典之作,刚工作不久就有大佬强烈推荐,无奈基础较差,读的比较慢,之后短短续续读完了。在之后的工作中,偶尔也会拿出来翻一下,对于学习和工作帮助很大。
JVM是整个虚拟机提醒的底座,是Java的“平台无关性”的基础,了解了JVM才能深入理解到java程序“一次编写,到处运行”的真正原因。同时对于工作中程序性能调优,异常排查有很大的指导意义。
主要的内容包含以下几个方面:
- 走进Java
- 自动内存管理机制
- 虚拟机执行子系统
- 程序编译与代码优化
- 高效并发
作者层层递进,从了解java一致到指导编写高效简洁的程序给了我很多帮助。
走近JAVA
这一部分就不用说了吧,对java技术体系的一个大概介绍。说实话,这是我刚开始读这本书了解最深也是最有印象的一部分,因为其他篇章还读不太懂(逃)。
自动内存管理机制
说实话,很多人喜欢java可能就是因为JVM的自动内存回收机制,因为这一个机制,让我们不用考虑垃圾回收问题,专注于业务代码的编写,但是并不意味着不需要了解JVM的GC机制。程序计数器,堆栈,内存布局……等等对于工作的指导意义很大。刚开始工作的时候写代码比较随意,stackoverflow常有发生,这个时候就需要优化代码,同时调整jvm参数就可以理解。同时像数据库连接池,线程池,等等的配置也和JVM内存有很大的关系。同时这一部分也讲了很多案例,程序的部署策略,集群间的内存异常,堆外内存的溢出错误,JVM进程奔溃,外部命令导致系统缓慢,都有很大的实践意义。刚开始学习netty的时候,遇到了很多堆外内存的溢出错误,也是在实践案例里找到参考,让我顺利的解决了异常。同时这一部分也了解了JConsole的和VisualVM的使用,现在启动新的项目时,一般也会通过VisualVM观察本地的内存占用情况,同时,如有可能也可以通过连接远程来观察服务器上的内存占用情况,优化程序。
虚拟机执行子系统
了解class文件结构,字节码指令,类加载机制等等,实际业务中虽然用的不多,排查问题的时候用过。同时通过了解字节码指令结合javaagent编写一些小的工具,如监控系统等等,对于程序的良好运行都有很大意义。
程序编译与代码优化
了解了Java编译器,可以通过反编译了解代码的执行机制。像泛型,类型擦除,自动装箱、拆箱、与遍历循环,java8的lambda表达式,条件编译等等都可以其实现机制,让我可以编写更好的程序。
高效并发
并发程序的重要性不言而喻,但是如何编写高效的,线程安全的并发程序是一个长久的话题,这一部分从内存模型出发,深入解释了主内存与工作内存,内存交互,特别是线程优化与锁优化讲的很是深入。
总的来说,深入理解Java虚拟机 从底层开始讲起,让我了解了JVM的方方面面,之后的工作学习中也了解了其他的jvm技术,但基本都能在这本书中找到出处,让我受益良多。同时也期待第三版出版,让我有更大的收获。
购买链接: https://item.jd.com/12607299.html?dist=jd