当前位置: 首页 > 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领域
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 〔开发系列〕一次关于小程序开发的深度总结
  • Facebook AccountKit 接入的坑点
  • Mybatis初体验
  • PAT A1017 优先队列
  • PermissionScope Swift4 兼容问题
  • 程序员最讨厌的9句话,你可有补充?
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 近期前端发展计划
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 前端面试之CSS3新特性
  • 思维导图—你不知道的JavaScript中卷
  • 物联网链路协议
  • 一个SAP顾问在美国的这些年
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 正则与JS中的正则
  • k8s使用glusterfs实现动态持久化存储
  • Spring第一个helloWorld
  • 如何在招聘中考核.NET架构师
  • #if 1...#endif
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (转)四层和七层负载均衡的区别
  • *Django中的Ajax 纯js的书写样式1
  • .net Application的目录
  • .NET Remoting学习笔记(三)信道
  • .NET 指南:抽象化实现的基类
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET文档生成工具ADB使用图文教程
  • .net下简单快捷的数值高低位切换
  • [ linux ] linux 命令英文全称及解释
  • [ 手记 ] 关于tomcat开机启动设置问题
  • []我的函数库
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [bzoj2957]楼房重建
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C#]C# OpenVINO部署yolov8图像分类模型