首页 > 试题广场 >

关于对象成员占用内存的说法哪个正确?( )

[单选题]

关于对象成员占用内存的说法哪个正确?(


  • 同一个类的对象共用同一段内存
  • 同一个类的对象使用不同的内存段,但静态成员共享相同的内存空间
  • 对象的方法不占用内存
  • 以上都不对
当你创建一个新的实例对象时,它会得到一块新的内存空间。但是类中的静态成员变量是所有对象共有的,也就是在一片属于类的存储空间中,被所有对象共有。
发表于 2017-06-09 16:57:06 回复(1)
发表于 2017-09-28 19:17:13 回复(5)
选B
静态成员属于类成员,在方法区分配内存,而不是堆。静态变量属于类本身,成员变量属于类的某个实例。
发表于 2018-07-06 09:16:55 回复(0)
如果我2个对象同时指向一个地址呢?
发表于 2018-10-12 00:24:37 回复(1)
Threadlocal怎么解释?
发表于 2018-05-13 09:45:23 回复(0)
一个类的静态属性是存储在方法区的,该类的实例存储在堆中,实例属性存储在堆中的该实例中。
发表于 2017-10-18 09:57:56 回复(0)
沙发
发表于 2017-06-05 21:40:56 回复(0)
静态成员会存储在方法区,所有的对象都共享,实力成员存储在堆中,是new出来的
发表于 2024-09-14 22:58:40 回复(0)
C选项没人解释一下吗?
发表于 2023-03-30 12:03:05 回复(0)
  • JVM类的整个加载过程(这题静态变量都存储在一起jdk8在堆里面,不在元空间内部,也就是在_java_mirror后面
  • 加载
    将类的字节码载入方法区(1.8后为元空间,在本地内存中)中,内部采用 C++ 的 instanceKlass 描述 java 类,它的重要 field 有:
    _java_mirror 即 java 的类镜像,例如对 String 来说,它的镜像类就是 String.class,作用是把 klass 暴露给 java 使用
    _super 即父类
    _fields 即成员变量
    _methods 即方法
    _constants 即常量池
    _class_loader 即类加载器
    _vtable 虚方法表
    _itable 接口方法
    如果这个类还有父类没有加载,先加载父类
    加载和链接可能是交替运行的
  • instanceKlass保存在方法区。JDK 8以后,方法区位于元空间中,而元空间又位于本地内存中
    _java_mirror则是保存在堆内存中
    InstanceKlass和*.class(JAVA镜像类)互相保存了对方的地址
    类的对象在对象头中保存了*.class的地址。让对象可以通过其找到方法区中的instanceKlass,从而获取类的各种信息

  • 连接

    static 变量在 JDK 7 之前存储于 instanceKlass 末尾,从 JDK 7 开始,存储于 _java_mirror 末尾
  • 验证
    验证类是否符合 JVM规范,安全性检查
    用 UE 等支持二进制的编辑器修改 HelloWorld.class 的魔数,在控制台运行
    准备
    为 static 变量分配空间,设置默认值

    static 变量在 JDK 7 之前存储于 instanceKlass 末尾,从 JDK 7 开始,存储于 _java_mirror 末尾
    static 变量分配空间和赋值是两个步骤,分配空间在准备阶段完成,赋值在初始化阶段完成
    如果 static 变量是 final 的基本类型,以及字符串常量,那么编译阶段值就确定了,赋值在准备阶段完成 
  • 如果 static 变量是 final 的,但属于引用类型,那么赋值也会在初始化阶段完成将常量池中的符号引用解析为直接引用
  • 解析

  • 。。。。。。。。。。。。。。。。。。。。。。。。。。。。
发表于 2022-10-13 09:36:54 回复(0)
同一个类实例化不同的对象时产生的地址不同,所以也就在不同的内存段。 但是类中可以包含用static修饰的静态成员,静态成员是在类被加载的时候就创建的,只会创建1次,所有由该类实例化的对象共享该静态成员,静态成员变量可以通过类名.静态成员变量名直接访问
发表于 2022-03-28 15:26:44 回复(0)
当你创建对象的时候肯定会创建空间的,而static确实大家共享的,在类初始化的时候就会加载
发表于 2021-12-31 19:26:54 回复(0)
类中的静态成员共用一块内存,创建一个新的实例对象,会产生新的内存空间
发表于 2021-09-04 23:03:34 回复(0)
静态成员变量是所有对象共有的
发表于 2021-08-26 08:44:40 回复(0)
mmmmhnee
发表于 2021-03-14 14:32:34 回复(0)
每一个对象在堆中都有各自的内存区域,静态变量是所有对象共有的
发表于 2020-09-30 20:18:30 回复(0)
不是一个对象,一个地址值,分配一个内存吗?
发表于 2020-09-23 11:01:09 回复(0)
虽然是同一个类的对象,但是这个对象并不是一个共享的资源,而静态成员是可以共享的资源
发表于 2020-03-24 15:02:13 回复(0)

题目有问题吧,一个类***用一个对象,就是这个对象就new了一次?既然只new一次不管谁用了地址都是指向同一个啊

发表于 2019-09-13 09:36:19 回复(0)
还是考察jvm各个区里面的内容区分
发表于 2019-08-29 21:26:56 回复(0)