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

#我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升

作者:徐凌峰

作为周老师的忠实粉丝,其实一直在微博上关注这本书第三版的消息,之前接触到这本书的时候是从第二版“小蓝“开始的,那会儿搜索JVM相关资料时,基本上都会推荐到这本书,毫不夸张地说,至少在国内,《深入理解Java虚拟机》这本书就是学习JVM的最好资料了。

接下来,我来介绍一下自己跟这本书的故事吧。

学生时代:

我的大学专业是数学,在刚开始转行学习Java的时候,最开始有一个很模糊的概念,简单知道通过Java虚拟机可以实现“一处编写,多处执行”的功能。但是,因为是刚刚处于Java入门阶段,总感觉JVM是一个很高端的概念,基本上接触不到,只知道安装一个JDK,我的“Hello,World”即可跑起来。于是学了常用框架就想着先去找个工作,结果面试的时候被问到JVM的相关问题时,哑口无言。后来便去网上找相关资料,发现网友都在推荐周老师的《深入理解Java虚拟机-JVM高级特性与最佳实践》这本书,于是乎赶紧购买了一本,买来之后通读了一遍,当然那会儿仅仅记住了一些内存模型和结构图之类的,不过也是帮我顺利通过了面试.成功找到了一份工作。

工作后:

随着进入实际的工作中,才发现JVM相关知识的实际作用。特别是项目中偶尔会发生的一些OOM异常、GC日志等,最开始查看起来真是一头雾水,只能看着大佬们通过各种命令工具成功定位解决,然后发现成功定位后要修复这些问题时,就必须掌握JVM的内存结构和运行原理,因此我再度拾起了周老师的这本书。重点关注书中一些实战部分的章节,学习生产环境下对JVM的问题定位。但是实际环境中也不会有这么多OOM的问题,于是我在测试环境中自己调整JVM的启动参数来模拟,经过一番理论加实战的练习,对JVM的问题也有了一定的了解,不再是两眼一抓瞎的状态了。

随着工作年限的增加,对Java的理解也变深了。有时候会思考一些更深的问题了,例如new Object() 这个指令的底层究竟发生了什么,一个类是如何加载到虚拟机里去的,或者一个写好的类在运行时是如何动态的修改它的一些代码的。这些问题,其实在深入研究JVM运行机制后都可以找到答案,在本书中就有他们的原理及解答。

有了周老师这本书的帮助,我的Java技术水平有了一个本质的提升。关于JVM有了更加清晰的认识,通过不断的研究学习这本书,我对于目前线上服务的内存特别敏感。对于各个垃圾收集器的使用也很熟练,有事没事的就去看线上服务的垃圾回收情况和GC日志.对于jinfo、jstack、jmap以及jstat等内存调优命令也是比较熟悉,并且也能熟练的使用mat、arthas等工具。再也不是曾经那个一无所知的懵懂少年了。

周老师的《深入理解Java虚拟机-JVM高级特性与最佳实践》第三版已经出版,看了目录之后,感觉在第二版的基础上进行了很多更新,结合了当前最新的JDK13 EA,给我们讲解全新的JVM相关特性与技术,带领我们与时俱进,真正做到了实战与技术的相结合。

总结:

毫不夸张地说,这本书是Java开发者必备的技术图书,也是我们大多数同学的JVM启蒙书籍,这本书使我们更加系统的接触到了JVM相关的特性与知识。这么经典的书籍,作者也是一直保持着更新,之前第二版用的JDK7或许有一些过时,目前这本第三版基于JDK12和JDK13 EA所写,能够让读者了解到最新的JVM知识,新增的一些垃圾收集器,以及作者更加丰富的经验和沉淀。入手这本书无论是丰富自身知识,提高工作能力,还是应付面试顺利进大厂,都是无比的超值。

推荐阅读

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

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

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

你与世界

只差一个

公众号

相关文章:

  • 华为、阿里等知名公司年终奖发了多少?
  • 2020 云原生 7 大趋势预测
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • 给平庸程序员的12条建议
  • 华章新春献礼 扫码免费领书
  • 编程语言书单(Java核心技术篇)
  • ​人工智能书单(数学基础篇)
  • 中国医院需要什么样的数据中台?
  • 人工智能书单(机器学习理论篇)
  • 智能时代书单
  • 人工智能书单(机器学习实践篇)
  • 人工智能书单(图像处理与计算机视觉篇)
  • 立春好消息:华章图书持续霸榜京东、当当计算机畅销新书榜!
  • 小白入门机器学习必备:编程语言环境介绍及搭建
  • Linux系统运维书单
  • 【个人向】《HTTP图解》阅后小结
  • Git学习与使用心得(1)—— 初始化
  • javascript数组去重/查找/插入/删除
  • leetcode98. Validate Binary Search Tree
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • PHP 小技巧
  • Sequelize 中文文档 v4 - Getting started - 入门
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 对JS继承的一点思考
  • 搞机器学习要哪些技能
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 聚簇索引和非聚簇索引
  • 七牛云假注销小指南
  • 入口文件开始,分析Vue源码实现
  • 使用Gradle第一次构建Java程序
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​渐进式Web应用PWA的未来
  • #微信小程序:微信小程序常见的配置传旨
  • (C++17) std算法之执行策略 execution
  • (C语言)球球大作战
  • (function(){})()的分步解析
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)hibernate配置管理
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (六)c52学习之旅-独立按键
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)原始图像数据和PDF中的图像数据
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • *上位机的定义
  • 、写入Shellcode到注册表上线
  • .gitattributes 文件
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET gRPC 和RESTful简单对比
  • .Net 高效开发之不可错过的实用工具
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET实现之(自动更新)
  • .vue文件怎么使用_我在项目中是这样配置Vue的
  • /etc/skel 目录作用