JVM学习笔记(一) JVM学习回顾--概述与思考

前后断断续续花费一个月的时间,算是把《深入理解Java虚拟机–JVM高级特性与最佳实践.周志明》过了一遍,之所以说是过了一遍,是因为在阅读过程中基于目前知识体系看不懂或与个人主线相关性不大的部分给过滤了。

简谈JVM

说到JVM首先来说一下java这门语言,相对于C、C++,java更加的高级、智能化、自动化;对于开来说封装了许多底层的操作,如内存回收、即时编译、指针封装等。Java的许多特性都依赖于JVM,JVM一开始为java设计的平台无关性逐渐被其他开发语言pick上,作为下一代java的scala也运行在JVM上,此外还诸如Python(Jython)、Ruby(JRuby)也可在JVM上运行,单就JVM的语言无关性结合平台无关性已值得我们去学习一番。记得在网上看到过一句话:对于java开发人员,无论代码写的有多烂,都有JIT作为托底,而C++不行,只需要一个指针越界就足以让程序崩溃。严格来说,事实并非如此,JVM也有内存泄漏、GC抖动、并发死锁等问题,为了写出更加高效、优雅的代码,迈出这一步,需要更多地去了解“糖衣”背后的真相,在遇到问题时才知道如何更好的去解决。

知识框架

首先关于JDK体系咋就不说了,来搬搬HotSpot JVM,目前主流虚拟机版本还是这款(本人电脑上的):
在这里插入图片描述
个人从这本书学到的部分知识点(计划后期根据这些知识图谱进行一个展开复习):

一、内存管理
1、JVM内存划分:新生代与老年代对象分布特性以及相关GC机制。
2、JDK常用工具:jps、jconsole、javap、jmap等,利用jconsole工具监控idea内存分布。
3、Eclipse调优案例学习:通过修改eclipse配置文件来优化启动运行效率。

二、JVM执行子系统
1、Class文件存储与访问:class文件结构、字节码指令(为什么在java中的byte、short类型运算会转化为int型的数据计算)。
2、类加载过程:JVM中对class文件的加载处理及相关安全验证机制,有趣的魔数。
3、字节码执行引擎:运行时栈帧结构与方法调用(多态的实现机制)。

三、程序编译与代码优化
1、语法糖:泛型与类型擦除、装箱与拆箱、条件编译。
2、JIT与代码优化:解释运行与编译运行、编译触发条件、编译优化技术(公共子表达式消除、数组边界检查消除、方法内敛、逃逸分析)。

四、并发与锁机制
1、java内存模型与线程:主内存与工作内存、内存交互操作、volatile与synchronized。
2、Java线程:线程实现、调度与状态转换。
3、锁优化:自旋锁与自适应锁、锁粗化与消除、轻量级锁、偏向锁。

总结:器具之论

个人感觉Java虚拟机内容就像计算机学科的“四大宝典”一般,对于初学者来说,偏深层理论的东西学习起来并不会像流行技术框架学习一样可以在短时间内取得太过明显的收益,但在学习的后期,这些理论是可以成为跳板;也可以成为瓶颈的所在。可能在大学里就被灌输着器具之别的理论有关系吧,一直都认为语言在开发中是作为工具的角色存在,决定着是否能够把需求实现,而在理论内功的指引下决定着能否把需求优雅地实现。记得在大学里学过各种开发语言,而今回想起来,似乎这些语言很多在今天的作用无非就是给自己开了一条缝,通过这条缝隙看到了另一边世界的一角。
从个人实践的角度来讲,开发语言的学习在开始时作为打开IT行业的一道门,它为我们揭开这个行业的神秘面纱提供了更多亲身实践的机会,在有一定的表层理解后,我们还要去探索事务的本质,知其然还要知其所以然。新技术层出不穷,而最本质的东西在短时间内很难有根本性的改变或说是突破。

读书是一个从厚到薄,从薄到厚的过程,在不断地回顾总结中总能有不一样的体会。复利思维(放篇鸡汤)真的很重要。

你可能感兴趣的:(JVM,JVM)