最近选择性的看了深入理解java虚拟机这本书,挑了几章对于深入android开发有帮助的章节,大厂面试android或者java的时候也可能会问到,所以大家有爱自取。(有简书的同学可以关注一波:何时夕)
1.java内存管理
很多人都只知道java的内存分为堆和栈,但是其实里面有更多东西,要成为一个高级java/android 开发者对于虚拟机简单了解是必不可少的,所以上一张图,让大家方面记忆。
简书上传图片会被压缩所以大家用这张图片吧:
http://img.blog.csdn.net/20170423141113568?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTEwMTg5OTg2MzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
2.class文件的结构
查看java字节码也是高级java开发者所不可缺少的技能,所以我总结了一张class文件的结构图,大家可以看看。
简书上传图片会被压缩所以大家用这张图片吧:
http://img.blog.csdn.net/20170306172800420?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTEwMTg5OTg2MzI=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast
3.java虚拟机的方法调用
方法的调用并不等于方法的执行,java的方法调用不像c++一样在编译期就知道了方法的具体内存地址,当一个方法被调用了,只是class的常量池中的符号引用被调用,而符号引用会在类加载期间或者运行期间指向真正的方法的内存地址,这就给java带来了强大的动态扩展能力。
1.解析:所有方法调用都是Class文件中的一个符号引用,在Class加载的阶段,有一些符号引用会转化成直接引用(内存中具体方法的地址),这个解析成功的前提就是在运行过程中这个方法是不能被改变的。这类运行期不变的方法调用被称为解析。
1.私有方法和静态方法就是这类方法,前者不可被外部调用,后者与类直接相关。所以会在类加载阶段被解析。
2.invokestatic和invokespecial这两条字节码指令就与上面的俩者对应,这些方法统称为非虚方法。此外还有一种被final的方法,因为这种方法不能被覆盖所以虽然其是由invokevirtual指令来调用,但是其依然是非虚方法。
共同学习,写下你的评论
评论加载中...
作者其他优质文章