在武侠的世界里,无论是至刚至强的《易筋经》,还是阴柔无比的《葵花宝典》,都离不开内功修炼。没有了内功心法,这些武术只是花拳绣腿的拙劣表演而已。软件业是武林江湖的一个翻版,也有着大量的模式,套路,规范等外功,但“外功修行,内功修神”,要想成为”扫地僧“一样的绝世高手,此书是必备的。 --秦小波 著有《设计模式之禅》
此篇长文我会更新对 周志明《深入理解Java虚拟机_JVM高级特性与最佳实践》的思想感悟以及内容实践,包括对其中经典思想的碰撞,对作者提问问题的寻根和问题延展,对JVM的感悟,以不定期连载的方式更新此文,感谢计算机大师的著作!
第六章 类文件结构
- 【思想碰撞】Java语言不能仅靠返回值来重载的本质
原因:《Java虚拟机规范(第二版)》与《Java语言规范(第三版)》分别定义了字节码层面的方法特征签名及Java代码层面的方法特征签名,Java代码的方法特征签名只包括 方法名称,参数顺序,参数类型,而字节码文件的特征签名则还包括 方法返回值及受异常表。
解读:Java语言在编译器编译Java代码为class文件时,针对方法体的特征签名(特征签名就是一个方法中各个参数在常量池中的字段符号引用的集合:简单的说就是存在class文件中以二进制表示的可以识别成java方法体各个参数的常量集合)为 方法名称,参数顺序,参数类型 ,不包括返回值,也就是java编译出的class文件压根不会存返回值,自然不能识别出仅有返回值不同的方法体,这种仅有返回值不同的编译会导致报错,另外需要格外注意的是 字节码文件(class)的特征签名包括 方法返回值及受异常表,所以其他语言如果语言规范里允许编译存放返回值,那么仅有返回值不同的方法是合法的。
验证:验证通过,不能仅通过返回值不同重载
第七章 虚拟机类加载机制
【思维延申】从jvm虚拟机类加载机制的角度来分析 jar包冲突导致的 NoSuchMethodError等本质原因了,并设法验证你的说辞。
【小记】Java能作为面向对象语言的一个原因:Java语言中,其类型的加载和连接过程都是在运行期实现的,虽然这会在类加载的过程中增加一些开销,但是也提供了相当大的灵活性,Java语言天生可以动态扩展的语言特性,就是依赖运行期动态加载和动态连接的特点实现的。
09/12/2018 12:07:29