Java/Android阿里面试JVM部分理解

作者: 何时夕 | 来源:发表于2017-03-06 17:34 被阅读1658次

    最近选择性的看了深入理解java虚拟机这本书,挑了几章对于深入android开发有帮助的章节,大厂面试android或者java的时候也可能会问到,所以大家有爱自取。

    1.java内存管理

    很多人都只知道java的内存分为堆和栈,但是其实里面有更多东西,要成为一个高级java/android 开发者对于虚拟机简单了解是必不可少的,所以上一张图,让大家方面记忆。

    java内存管理

    简书上传图片会被压缩所以大家用这张图片吧:
    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文件的结构图,大家可以看看。

    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指令来调用,但是其依然是非虚方法。
    • 2.分派: [http://blog.csdn.net/ns_code/article/details/17965867](http://blog.csdn.net/ns_code/article/details/17965867 分派")

    相关文章

      网友评论

      • 3c2cf1f7612e:图片地址403了 楼主
        c25fe4cb884f:直接点图片,查看原图,点放大。
      • lanzry:刚刚简单总结了一下自己看《深入理解JVM虚拟机》的笔记,发现自己只稍微看明白一点内存管理的部分,对比大佬的第一张图,恰好全部对上。借大佬第二张图理解字节码部分的知识。打call
        何时夕:两位大佬好
        lanzry:@new洪彬 哈哈 很巧 按着这个大佬的文章检验学习成果
        newPencil:哈哈哈,在这里看到了你
      • 时间沉淀出芳华:同14,感觉项目经验不足的时候看没多大帮助
        何时夕: @时间沉淀出芳华 课 请请假就好了
        时间沉淀出芳华:@何时夕 你如果面试上了,你接下来的课怎么办,你们不是十月份实习的吗?
        何时夕: @时间沉淀出芳华 是的,商业项目的代码量是前提条件
      • he_321:说的太浅了,建议你好好看看深入理解jvm虚拟机。
      • 纳兰寒明:这两张图可以收藏,加油!
        何时夕: @纳兰寒明 thanks

      本文标题:Java/Android阿里面试JVM部分理解

      本文链接:https://www.haomeiwen.com/subject/oyyugttx.html