博客
关于我
在内存中java类和对象的区别
阅读量:529 次
发布时间:2019-03-09

本文共 718 字,大约阅读时间需要 2 分钟。

在内存中,Java类和对象的差异解析

Java类与对象在内存中的区别主要体现在以下几个方面:

  • 类的内存占用与构造方式
  • 类在内存中的存储是静态的,由编译器在链接阶段确定,通常位于方法区或本地方法区中。这些信息在运行时成为静态值。类本身并不占用动态堆内存,直到需要创建类的实例(对象)时,内存才会被分配。

    1. 对象的内存分配与构造
    2. 对象由new操作符调用构造器创建,它们的内存由运行时堆自动分配。由于对象的数量和内存大小在编译时无法预知,只有在运行时根据需求动态分配内存。这使得对象的内存分配具有高度的灵活性。

      1. 静态和非静态成员的共享机制
      2. 静态成员(包括静态变量和静态方法)在整个应用程序中只有一份拷贝。无论有多少对象访问静态成员,都共享同一份内存。非静态成员(如实例变量和非静态方法)则每个对象独立占用内存空间,具有各自的单独拷贝。

        1. 内存占用的动态特性
        2. 在添加一个对象实例时,该实例及其相关的堆内存都会被分配。这个过程与类本身的结构无关,而是由堆中的内存管理系统(如G NSK和分堆/分堆优化)自行分配。这意味着不同的对象可能占用不同的堆空间大小。

          1. 对方法调用内存的影响
          2. 对于非静态方法调用,差别在于调用方法时会在操作栈中加载相关信息,并绕入受保护的指针和常量池中的指针。这样,虽然方法在所有对象之间共享一份常量池中的方法指针和类指针,但是在执行时会分配线程栈内存空间以支持调用。

            通过以上分析可以看出,类作为调用和描述对象的元信息,具有静态、编译时确定的性质,而对象则是由动态内存分配创建的,适合用来保存一次性的Java实例数据。在程序运行中,Java类和对象共同运作,确保内存管理的双层结构,既保持了计算效率,又提供了灵活的内存使用能力。

    转载地址:http://kmliz.baihongyu.com/

    你可能感兴趣的文章
    CVPR 2021 | 港科大&旷视提出ACON:激活还是不激活?学习自定义激活函数
    查看>>
    EfficientNetV2震撼发布!更小的模型,更快的训练
    查看>>
    python-计网实验二-套接字
    查看>>
    C++学习日记2——多态篇的纯虚函数和抽象类
    查看>>
    F - 数据结构实验之链表四:有序链表的归并
    查看>>
    为什么使用%lf读取double型的值,而用%f进行显示?
    查看>>
    用JavaScript实现希尔排序
    查看>>
    iconfont字体图标导入到vue项目中
    查看>>
    2020.11.30-12.6周报
    查看>>
    Nuxt.js服务器端渲染框架
    查看>>
    Svn commit failed aborting commit
    查看>>
    卧槽!细说JVM内存模型,已拿到offer
    查看>>
    带你一起手撕Dubbo,SpringBoot与Cloud,深入剖析
    查看>>
    dynamo中如何通过节点读取cad图纸数据
    查看>>
    纯干货!深度分析一下AQS原理,一文全懂
    查看>>
    腾讯Java面试题,从基础到源码统统帮你搞定,2年以上经验必看
    查看>>
    字节跳动算法工程师总结:腾讯+字节+阿里面经真题汇总,含面试题+答案
    查看>>
    LeetCode 22. 括号生成
    查看>>
    (二)MyBatis学习笔记——使用映射配置文件进行CRUD、核心配置文件使用
    查看>>
    LeetCode 76. 最小覆盖子串
    查看>>