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

#我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习

作者:崔浩博

Java作为最成熟的工业级编程语言,其从业人员也是世界上最多的。刚从学校毕业时候,对于编程世界一知半解的我,也随着大流懵懵懂懂地成为了一名Java初级工程师。

得益于多年的改进与发展,Java底层封装的相当之好,“一次编译,处处运行”的特点,也屏蔽了底层操作系统的差异,对于刚入门的学习者相当友好,使用者免于纠缠在大量繁杂的细节,专心于上层逻辑,因此也会给初学者一种“学习Java很容易”的错觉。然而这是不可能的,代码界前辈有云:“计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决----抽象过多这个问题除外。”虽然Java通过引入了Java虚拟机,解决了C++中令无数开发者头痛的内存控制问题,但是不可避免的,JVM本身也成为了Java开发者工作中进一步攀升需要克服的一座大山。

对于我来说,经过了“make it run”甜蜜的初级阶段之后,很快遇到了一系列令人头疼的问题:为什么这个Java程序耗费的内存如此之多?程序中报出的“OutOfMemoryError”错误是什么意思?为什么技术老大说这个程序延迟过大是因为gc频繁的原因......一连串的疑问迎面而来,让我意识到我在之前的学习中忽略了一些东西,通过在网上搜索和请教他人,我知道了这些都和Java虚拟机有关,那么应该怎么学习JVM呢?网上大部分人都对周志明老师的《深入理解Java虚拟机:JVM高级特性与最佳实践》交口称赞,推荐初学者通过这本书入门。怀着将信将疑的心情,我马上入手了一部周志明老师的书,开始了对JVM的学习。

第一次对JVM的学习,是通过第二版的“小蓝”,开篇对于Java世界的技术体系进行了介绍,并对Java虚拟机一路走来的历史娓娓道来,让我觉得兴趣盎然。接着介绍了对JVM内存区域的划分,以及至今为止有哪几种垃圾收集策略,并以Hotspot JVM为例,阐明了各种收集策略对应的垃圾收集器。还对如何解读GC日志进行了分析,这些都让我受益匪浅。然而我高兴地太早了,在我觉得自己已经大有长进的时候,看到了虚拟机执行子系统这一章节,JVM复杂的类文件结构以及各种繁杂的字节码指令,让我学的昏昏欲睡,痛苦的坚持了一段时间之后,我放弃了对JVM的进一步学习。

一段时间之后,我在工作中需要用到Java并发编程的一些技术,而这又和Java的内存模型,线程安全以及锁等知识密不可分。我回忆起《深入理解Java虚拟机》书中后面章节正是对这些知识的介绍,于是重拾起对JVM的学习,钻研理解了happens-before原则,Java线程状态与调度等等,这些使得我大大增强了Java并发编程的技巧。

回顾过往短短几年编程经历,周志明老师的书发挥了不可或缺的作用,最近听说周老师又出版了第三版的《深入理解Java虚拟机》,其中增加了JDK 12和预览版JDK 13的相关知识,准备继续研读一遍,相信对最新的java技术能够有所裨益。

推荐阅读

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

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

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

你与世界

只差一个

公众号

相关文章:

  • InfoQ 编辑部开年聊聊 2020 年值得关注的十大技术趋势
  • 达摩院十大科技趋势发布:2020 非同小可!
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • 新书推荐 | 深入浅出图神经网络:GNN原理解析
  • 新书推荐 | 现代机器人学:机构、规划与控制
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • 什么是机器学习?有哪些应用?终于有人讲明白了
  • TIOBE 1 月编程语言排行榜:C 语言再度「C 位」出道!
  • 新书推荐 | 数据流机器学习:MOA实例
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • 2020大风口!什么是图神经网络?有什么用?终于有人讲明白了
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • 机器学习入门必读:6种简单实用算法及学习曲线、思维导图
  • 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了
  • 77. Combinations
  • es6要点
  • Git的一些常用操作
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • React中的“虫洞”——Context
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 如何优雅地使用 Sublime Text
  • 入门级的git使用指北
  • 设计模式 开闭原则
  • 写给高年级小学生看的《Bash 指南》
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 自定义函数
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • 积累各种好的链接
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #单片机(TB6600驱动42步进电机)
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (C语言)共用体union的用法举例
  • (第27天)Oracle 数据泵转换分区表
  • (多级缓存)缓存同步
  • (二)JAVA使用POI操作excel
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (十六)串口UART
  • (转载)Linux网络编程入门
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .Net中间语言BeforeFieldInit
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [20170705]diff比较执行结果的内容.txt
  • [20180129]bash显示path环境变量.txt
  • [bzoj1901]: Zju2112 Dynamic Rankings
  • [C#]科学计数法(scientific notation)显示为正常数字