最近关于虚拟机的学习

之前面试的时候每次都避免不了虚拟机之类的问题,似乎不问下GC之类的问题、或者类加载之类的问题,java基础等于没过关。

恩,不得不说确实很重要。

国庆几天,花了4天时间把周志明的《深入理解Java虚拟机》第二版,剩余的10、11、12章、3、4、5章读完了,6、7、8、9章在9月份的时候看完了,这次阅读这本书,称的上是认认真真的阅读了,Class类结构那章是17年12月份开始看的,断断续续的18年1月份才看完那章,并认认真真的做了个例子,写了个文章。之后过完年就去看设计模式了,3、4、5月份主要把设计模式看了,也是那本经典的《Head First设计模式》,设计模式看了3个月,每个月的周末,后来6、7月份孩子们过来,耽误了俩月,之后8月份的时候,把剩余的两章终结了。然后9月份加上国庆这几天,把JVM的这本啃下来了。想想其实也就花了1个多月的时间,周末用起来,加上十一这几天假期,很快也就看完了。想想这本书我买的时间大概已经是3年前了。荀子说:学不可以已。我想我没有大的发展,跟没有持续的自律学习关系很大。但是今年的学习也让我认识到,学习、持续的学习,进步还是很大的。

啰里啰嗦的这么多,下边进入正题吧。

其实这次阅读的时候从第6章开始看,感觉挺好的,因为2、3章是讲内存部分的,内存划分、GC处理,这两部分,刚开始就看有些早了,对于阅读来说。而从第6章Class类结构开始,其实就好接受很多了,慢慢的从类结构开始你会解除越来越多的专业术语,这样 你再回过头来看前边5章,关于内存、GC部分的时候就会游刃有余很多,同时正好也复习了后边几章关于类结构、类加载、虚拟机执行子系统、早起优化、晚期优化之类的内容。

这次主要的深入理解觉得有一下几个方面:

1:java文件到底如何执行的

那么就牵扯Class类结构了。Class类文件结构,详细的理解下常量池,其结构也不过以下:

Class文件是由一组8位字节为基础单位的二进制流。

魔数、次版本号、主版本号这些都一目了然,接下来常量池就是比较重要的了。常量池是接下来后续的各项需要用到的最频繁的地方了。常量池里14钟常量项的结构

Constant Type Value
CONSTANT_Class 7
CONSTANT_Fieldref 9
CONSTANT_Methodref 10
CONSTANT_InterfaceMethodref 11
CONSTANT_String 8
CONSTANT_Integer 3
CONSTANT_Float 4
CONSTANT_Long 5
CONSTANT_Double 6
CONSTANT_NameAndType 12
CONSTANT_Utf8 1
CONSTANT_MethodHandle 15
CONSTANT_MethodType 16
CONSTANT_InvokeDynamic 18

每一项第一个u1类型的tag对应上述表格中的数字,然后对应找到相应的结构就能知道里边存储的内容具体是什么了。

访问标志:是当前类的访问标志,即我们常用来形容类的关键字、Public、Final、Super、注解、接口Interface等等

类索引、接口索引、父类索引,这些去常量池中找到相应的String类型的全限定名即可。当然父类只有一个,接口可以多个,查看结构就知道了。

接下来就是字段表、方法表、属性表集合的内容了。

猜你喜欢

转载自www.cnblogs.com/aquariusm/p/9745952.html
今日推荐