当前位置: 首页 > news >正文

#我与Java虚拟机的故事#连载06:收获颇多的经典之作

作者:佐乌

《深入理解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技术,但基本都能在这本书中找到出处,让我受益良多。同时也期待第三版出版,让我有更大的收获。

推荐阅读

《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》

推荐语:这是一部从工作原理和工程实践两个维度深入剖析JVM的著作, 自2011年上市以来,前两个版本累计印刷36次,销量超过30万册,大厂面试最佳参考手册,进阶架构师必读、Java优化神书,这些标签成就了它成为原创计算机图书领域不可逾越的丰碑。

第3版在第2版的基础上做了重大修订,内容更丰富、实战性更强:根据新版JDK对内容进行了全方位的修订和升级,围绕新技术和生产实践新增逾10万字,包含近50%的全新内容,并对第2版中含糊、瑕疵和错误内容进行了修正。

你与世界

只差一个

公众号

相关文章:

  • 中台四杰与阿里往事
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • InfoQ 编辑部开年聊聊 2020 年值得关注的十大技术趋势
  • 达摩院十大科技趋势发布:2020 非同小可!
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • 新书推荐 | 深入浅出图神经网络:GNN原理解析
  • 新书推荐 | 现代机器人学:机构、规划与控制
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • 什么是机器学习?有哪些应用?终于有人讲明白了
  • TIOBE 1 月编程语言排行榜:C 语言再度「C 位」出道!
  • 新书推荐 | 数据流机器学习:MOA实例
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • 2020大风口!什么是图神经网络?有什么用?终于有人讲明白了
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • 【391天】每日项目总结系列128(2018.03.03)
  • Codepen 每日精选(2018-3-25)
  • ES6系列(二)变量的解构赋值
  • JAVA SE 6 GC调优笔记
  • jQuery(一)
  • mysql innodb 索引使用指南
  • Next.js之基础概念(二)
  • python docx文档转html页面
  • React as a UI Runtime(五、列表)
  • Sequelize 中文文档 v4 - Getting started - 入门
  • SSH 免密登录
  • TCP拥塞控制
  • 彻底搞懂浏览器Event-loop
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于 Cirru Editor 存储格式
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试总结JavaScript篇
  • 如何进阶一名有竞争力的程序员?
  • 微服务核心架构梳理
  • 物联网链路协议
  • 在Mac OS X上安装 Ruby运行环境
  • AI算硅基生命吗,为什么?
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • #图像处理
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (pytorch进阶之路)扩散概率模型
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (补)B+树一些思想
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (规划)24届春招和25届暑假实习路线准备规划
  • (力扣记录)235. 二叉搜索树的最近公共祖先
  • (三)uboot源码分析
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (转)VC++中ondraw在什么时候调用的
  • ./和../以及/和~之间的区别
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息