美文网首页
实现和继承在JVM内存中的一些情况

实现和继承在JVM内存中的一些情况

作者: 聊发少年狂魔 | 来源:发表于2018-08-07 16:28 被阅读0次

讲到实现和继承在内存中的区别,首先我们讲讲语法上他们的区别:

Java只允许单继承却能实现多接口。

对于单继承,试想一下,如果有两个父类ParentA和ParentB、一个子类ChildC,如果ChildC想super.两个父类的一个同样的方法F即super.F(),请问是调用了ParentA中的F还是ParentB中的F,明显就很难分清。

对于多实现,会在实现类里具体定义方法体,你可以说他是实现了ParentA的F,也可以说是实现了ParentB的F,因为实际运行的都是ChildC中具体F()实现的过程,不存在上面那种分不清的情况。

那对于JVM就内存的加载和调用来说,A是接口,B是具体实现类:

A a =new B();

在堆中创建一个B实例对象内存空间,在栈中创建一个引用变量a,a的地址指向B的内存空间。

a.print();

用A中的方法去调用B中的同名方法,这当然是正确的,因为B类实现了A接口。

B的实例方法存在一个专门的区叫方法区,B中所有的方法在创建B实例的时候B类的class方法二进制字节码就已经加载到了方法区,所有此类的方法调用的类对象均可以共享此代码空间,常量池会存放在堆里,当调用B中的方法的时候,先从方法区通过方法表快速拿到调用方法的字节码指令入栈并创建栈帧。对于a.print(),实际上在创建B对象的堆空间的时候,声明在栈里的a引用指向了B对象的内存空间首地址,所以在调用print方法的时候会去这个对象空间找对应的方法字节码,所以最终执行的是B中的print方法。

相关文章

  • 实现和继承在JVM内存中的一些情况

    讲到实现和继承在内存中的区别,首先我们讲讲语法上他们的区别: Java只允许单继承却能实现多接口。 对于单继承,试...

  • 4.JVM

    JVM知识 什么情况下会发生栈内存溢出。 JVM的内存结构,Eden和Survivor比例。 JVM内存为什么要分...

  • JVM如何分配和回收堆外内存

    JVM内存模型 在JVM中内存被分成两大块,分别是堆内存和堆外内存,堆内存就是JVM使用的内存,而堆外内存就是非J...

  • 2020-04-16 Jvm虚拟机

    27课 第3节 JVM参数调优总结 在JVM启动参数中,可以设置跟内存、垃圾回收相关的一些参数设置,默认情况不做任...

  • jmap jhat 查看java对象的内存占用情况

    **jmap **能查看jvm内存中,对象占用内存的情况,还提供非常方便的命令将jvm的内存信息导出的文件。 Sh...

  • JVM-OOM排查思路

    JVM 内存溢出排查思路: 一般来讲,我们会先用 free 命令先来检查一发内存的各种情况, 堆内内存 JVM 中...

  • 垃圾收集算法

    垃圾收集算法 在Java内存中,不停的有对象的创建与消亡,在内存一定的情况下,内存的动态分配和垃圾收集都由JVM去...

  • 《深入理解java虚拟机》之JVM内存结构总结

    JVM内存结构 JVM内存结构不光是只有堆内存和栈内存,实际情况要复杂很多,主要包含以下结构。 程序计数器 每个线...

  • Java开发

    JVM 内存溢出实例 - 实战 JVM(二) 介绍 JVM 内存溢出产生情况分析Java - 注解详解 详细介绍 ...

  • JVM的大管家:自动内存管理机制

    和C语言手动管理内存不同,JVM实现了自动内存管理机制,这也是Java语言的一大特点。 简而言之,JVM自动内存管...

网友评论

      本文标题:实现和继承在JVM内存中的一些情况

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