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

#我与Java虚拟机的故事#连载08:书读百遍其义自见

作者 | 稳

最开始学编程是学的C语言,后来工作了就使用了Mac电脑,发现C语言没法移植,感觉很麻烦,代码都得重写一遍,毕业后开始做安卓开发。

接触了Java语言,我第一反应就是,会不会我以后换电脑,代码还需要重写一遍,这不很麻烦?在开发的时候发现了Java会生成 .class文件,开始没觉得怎么样,后来一天用windows开发的同事让我把demo借他看看,发现可以直接在windows上运行,这才知道这都是Java虚拟机的功劳,后来他推荐给我周志明的《深入理解Java虚拟机:JVM高级特性与最佳实践 》 一书,是第二版,买回来就爱不释手,隔段时间就翻看,随着工作年龄的增加,每次翻看,对里面的内容都有更加深刻的理解。 

“write once, run everywhere“ 这个功能太赞了!!可以跨平台了!随着不断地研读才知道他是将 .java生成.class 文件。然后JVM 会将 .class 文件翻译成机器码(101010) 在不同的平台上,JVM会将相同的.class文件转换成不同的机器码。再深入学习就理解了Classloader,Java将class文件的二进制文件加载到JVM中的内存中,放在了方法区里面,然后在堆中创建class对象。用来封装方法区中的数据结构。然后映射为JVM可以识别的数据结果(class对象),这个class对象就是用来访问方法区的入口。然后就是双亲委派,打破双亲委派。这段内容看似简单,但是因为当时水平有限,反复阅读了很多遍才能理解。现在还能记得第一次看这段内容的时候,真的是味同爵蜡。通过反复的看才真正理解周志明老师书中的意思,真的是书读百遍其义自见。

感觉JVM真的很难,工作一两年的去啃英文的Java虚拟机规范更是难上加难,幸亏有了周志明的《深入理解Java虚拟机》这本书,让我们可以最快速的去理解 Java虚拟机的实现原理,代码是怎么跑起来的。 

后来就遇到了更多关于Java虚拟机的问题,因为Java虚拟机自动地进行内存的管理、回收,所以马上就出现了oom等问题,根本就无从下手,这个时候就想到了《深入理解Java虚拟机》赶紧拿起来翻看,这才得知内存泄漏、内存溢出等问题。知道了栈上分配、内存逃逸、MLAB等技术,也理解了gc的流程、新生代、来年代、minorgc、fullgc等等。感觉JVM虚拟机内存自动管理真是个双刃剑,也需要开发者了解其内部原理。 

同时也很感谢周志明写出了《深入理解Java虚拟机:JVM高级特性与最佳实践》 这本书,让国内Java开发者能快速的了解Java虚拟机的原理,解决了很多开发上的问题。 

Java还在不断的进步,JVM也不断的迭代,作为Java开发者不断的去研究JVM是非常有必要的,只有不断地了解底层的原理,才能在工作中解决棘手问题,在同事中脱颖而出。

推荐阅读

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

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

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

你与世界

只差一个

公众号

相关文章:

  • 新书推荐 | 深入浅出图神经网络:GNN原理解析
  • 新书推荐 | 现代机器人学:机构、规划与控制
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • 什么是机器学习?有哪些应用?终于有人讲明白了
  • TIOBE 1 月编程语言排行榜:C 语言再度「C 位」出道!
  • 新书推荐 | 数据流机器学习:MOA实例
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • 2020大风口!什么是图神经网络?有什么用?终于有人讲明白了
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • 机器学习入门必读:6种简单实用算法及学习曲线、思维导图
  • 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • 小程序三周年:超8000亿交易额,商业生态正当时
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • .pyc 想到的一些问题
  • 【391天】每日项目总结系列128(2018.03.03)
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ES2017异步函数现已正式可用
  • HashMap剖析之内部结构
  • JS字符串转数字方法总结
  • k8s 面向应用开发者的基础命令
  • Leetcode 27 Remove Element
  • magento 货币换算
  • Nacos系列:Nacos的Java SDK使用
  • Otto开发初探——微服务依赖管理新利器
  • python3 使用 asyncio 代替线程
  • windows-nginx-https-本地配置
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 工程优化暨babel升级小记
  • 基于axios的vue插件,让http请求更简单
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 区块链共识机制优缺点对比都是什么
  • 双管齐下,VMware的容器新战略
  • 新版博客前端前瞻
  • 赢得Docker挑战最佳实践
  • 鱼骨图 - 如何绘制?
  • 你对linux中grep命令知道多少?
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (NSDate) 时间 (time )比较
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转载)Linux 多线程条件变量同步
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .axf 转化 .bin文件 的方法
  • .net core开源商城系统源码,支持可视化布局小程序