`
justdoit2000
  • 浏览: 23954 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

java new 一个对象占内存大小研究!

阅读更多
  记得有次面试管问我java new一个对象占多少内存,当时没答对,现在终于清楚了:

Object o=new Object():
    在java中空对象占八个字节,对象的引用占四个字节。所以上面那条语句所占的空间是4byte+8byte=12byte.java中的内存是以8的倍数来分配的,所以分配的内存是16byte.
举个例子:
Class O{
  int i;
  byte j;
  String s;
}
  其所占内存的大小是空对象(8)+int(4)+byte(1)+String引用(4)=17byte,因要是8的整数倍,所以其占大小为24byte.
   当然,如果类里有其他对象的话,也要把其他对象的空间算进去。
分享到:
评论

相关推荐

    JAVA对象所占内存大小计算例子

    在Java编程语言中,了解一个对象占用的内存大小对于优化程序性能、理解内存消耗以及防止内存泄漏至关重要。本文将深入探讨如何计算Java对象所占内存,并通过提供的代码示例进行详细解析。 首先,我们需要理解Java...

    Java 对象(数组)占多大空间(几个字节) 手把手做实验

    2. 关闭压缩参数后的对象内存布局: 如果关闭这两项压缩选项,对象引用将变为64位,即8字节。实验显示`Person`对象占用40字节,这是因为对象头的Klass Pointer从4字节增长到8字节,其他部分保持不变,总大小增加了8...

    java内存对象分配过程研究

    1. **内存分配**:当使用`new`关键字创建对象时,JVM会在堆上为新对象分配一块内存空间,并返回一个指向这块内存空间的引用。例如: ``` new Color(100, 100, 120); ``` 这里`new`运算符负责为对象分配内存空间...

    Java占用内存的研究.pdf

    例如,对象的内存大小总是8的倍数,这意味着即使一个对象的理论内存大小是41字节,它仍然会占用48字节的内存空间,因为JVM会进行向上对齐。 总结而言,本文档提供了一个深入的分析,帮助读者理解在Java编程中,不同...

    Java中堆内存与栈内存分配浅析

    当一个对象被创建时,其数据将被分配到堆内存中。堆内存的特点是动态分配,即对象的大小在创建时不确定,且对象的生命周期也较难预测。由于这些特性,堆内存的管理较为复杂,但同时也为Java应用程序提供了极大的灵活...

    Java对象内存布局 - 小分析

    3. **填充数据(Padding)**:为了对齐,如果实例数据不足一个内存对齐单位,JVM会在对象尾部添加填充字节,确保对象大小为对齐单位的整数倍。 理解对象内存布局有助于优化程序性能,例如减少对象创建、理解和使用...

    java中的栈(深层了解java虚拟机对对象的内存分布)

    ### 深层解析Java虚拟机中的栈与堆:对象的内存分布 #### 核心概念:栈与堆的本质及作用 在Java编程语言中,理解栈(stack)和堆(heap)的概念及其工作原理对于深入掌握Java虚拟机(JVM)如何管理内存至关重要。栈和堆...

    java实现内存动态分配

    当通过`new`关键字创建一个新的对象时,其实际的数据结构和属性值都在堆中分配。由于堆内存是所有线程共享的,因此对象实例的创建和访问需要考虑线程安全问题。 3. **栈内存分配** 栈内存是线程私有的,每个线程都...

    Java的内存管理机制分析

    `,它们会指向同一个值`1`,从而节省内存空间。 2. **堆内存分配**: - 堆内存用于存储通过`new`操作符创建的对象。 - 如:`String s1 = new String("abc");`,其中`"abc"`是字符串字面量,存储在常量池中;`new ...

    Java中堆内存和栈内存详解

    - **对象存储**:每当使用`new`关键字创建一个新的对象时,该对象就会被分配在堆内存中。 - **对象引用**:为了访问堆内存中的对象,可以在栈内存中创建一个引用变量,该变量的值为对象在堆内存中的地址。 - **垃圾...

    Java虚拟机内存管理总结

    声明一个对象rect时,将在栈内存为对象的引用变量rect分配内存空间,但Rectangle的值为空,称rect是一个空对象。空对象不能使用,因为它还没有引用任何"实体"。(2)对象实例化时的内存模型当执行rect=new Rectangle...

    10Java对象的内存布局1

    在内存布局方面,每个Java对象都有一个对象头(object header),它由两部分组成:标记字段和类型指针。标记字段用于存储对象的运行时数据,如对象的哈希码、垃圾收集信息以及锁状态。类型指针则指向对象的类元数据...

    用new创建对象和直接定义的区别

    `new`关键字在Java、C++、C#等面向对象语言中广泛使用,它用于在堆内存中动态分配空间并初始化一个新对象。当我们使用`new`关键字时,通常会伴随着一个类的构造函数调用,以便对新对象进行初始化。 ```java // Java...

    深入理解java对象,包括对象创建和内存分配

    在JVM内部,对象的内存主要分为三个部分: - 帧头(Header):包含对象的类型信息、对齐填充以及用于垃圾收集和同步的元数据。 - 实例变量(Instance Variables):对象的属性和字段,存储实际的数据。 - 对象填充...

    JAVA内存溢出

    每次用new创建一个对象实例后,对象实例存储在堆区域中,这部分空间也被JVM的垃圾回收机制管理。而Java栈跟大多数编程语言包括汇编语言的栈功能相似,主要基本类型变量以及方法的输入输出参数。Java程序的每个线程...

    java对象的概念-new.docx

    初始化句柄时,通常需要使用`new`关键字创建一个新的对象,如`String s = new String("asdf");`,这不仅创建了一个新的String对象,还提供了初始值。 在Java中,对象的创建是通过`new`关键字完成的,它在内存的堆中...

Global site tag (gtag.js) - Google Analytics