JVM 的学习要反客为主,站在设计者的角度多去想想,为什么要这么划分?带来了什么好处?才能做到学以致用。
一切的答案,尽在下面的资料中:
Android原理动画( github /feelschaotic/AndroidPrincipleAnimation)
用动画的形式呈现JVM内存结构、GC、DVM、ART的区别,让你印象更深刻。
视频:【java】jvm内存模型全面解析( bilibili /video/BV12t411u726)
视频:【java】10分钟,了解GC过程( bilibili /video/BV1dt411u7wi)
视频:【java】垃圾收集器|g1收集器( bilibili /video/BV13J411g7A1)
考虑到视频学习的方式比较低效,所以我很少把视频类的列入图谱库,但是在 易懂和直观 方面,视频又有着无可比拟的优越性,所以我列在这里,帮助你先快速入门。By the way,发现 up 主讲解分区结构的方式,是用一行行源码来对应结构区,和我的动画项目 AndroidPrincipleAnimation( github /feelschaotic/AndroidPrincipleAnimation) 非常相似,令人惊喜!看来转换个角度,模拟如何教别人来教自己,就会发现更有趣更好玩的学习方式!有更有成效的学习方式,欢迎大家提个 issues 告诉我。
《深入理解Java虚拟机》(第2版)周志明著
JVM入门必读,作者功力极好,深入浅出,其中还穿插着经验、技巧、案例、实战,强烈推荐!
阅读这本书时,要有舍有得,避免拘泥于某处,我们可以先从宏观去理解去阅读,再慢慢深入细节。比如看“类文件结构”这一章,先知道类文件结构都有什么,有魔数、Class文件版本、常量池等,然后再去看魔数是什么,Class文件版本在哪里,常量池是什么?再深入下去,常量池有字面量和符号引用,再慢慢深入下去,如果中途看不下去了,没事,略过看下一节,我们先把最表面的那一层看完,了解,再去深入到某个点。个人推荐重点阅读2、3、4、5、7、12、13这几章。
第三版预计2019年12月份出版,可以期待一下。
JAVA 虚拟机、Dalvik 虚拟机和 ART 虚拟机简要对比
Dalvik 和 ART 有什么区别?深扒 Android 虚拟机发展史,真相却出乎意料!
Android 系统从诞生到现在,经历了几次重要更新,最终选择了折衷的方案,使得系统的安装和运行的时候各项指标都得到了优化。别觉得 JIT 被弃用又被启动充满戏剧性,你看,Tinker 团队本来采用全量合成 dex 方案,为了解决 ART dex2oat过长又花了 1 个多月实现分虚拟机平台合成补丁,在 ART 上不再全量合成,后续又因为 ART 更为激进的内联优化引起了内存错乱,重新选择了全量 dex 方案,方案没有孰优孰劣,适合最重要,优化的道路从来不会停止。

