Java对象的大小[重复]

2024-04-04

我们怎样才能知道Java对象的大小呢?

Example:

class Person{
    String name;  
    int age;  

    public Person(String n, int a){  
        name = n;  
        age = a;  
    }
}  

Person person = new Person("Andy", 30);  

我怎样才能知道人物对象的大小?


这个问题没有意义,至少没有进一步的背景。

Java 中“大小”的概念仅针对原语进行了相当明确的定义:一个字节是 8 位(毫不奇怪)int是 32 位,一个long64位等(参见例如http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html以获得完整列表)。

对于对象实例,情况更加复杂,因为:

  • 对象实例可以(并且通常会)在内部包含对其他实例的引用,因此您必须决定是否对这些依赖实例进行计数以及如何计数。如果多个实例共享依赖项怎么办?
  • 有时,对象实例可以被重用(例如,实习java.lang.String, see http://en.wikipedia.org/wiki/String_interning http://en.wikipedia.org/wiki/String_interning)。因此,如果您使用 x 个大小为 y 的对象,则总大小可能小于 x*y
  • JVM 对于如何在内部实现对象和实例有很大的余地。 它可能对不同的实例使用不同的技术(例如共享内部数据结构),因此甚至可能没有有意义的“大小”来分配给单个对象。

也许你可以解释一下为什么你对物体的大小感兴趣。

有一些经验法则可用于估计实例使用的堆内存(例如,在 Sun JVM 中,java.lang.Object实例使用 8 个字节),但这些取决于您使用的 JVM。

一般来说,如果您想了解堆使用情况,请使用内存/堆分析器。

Edit:

好吧,(从 JDK 6 开始)有一种方法可以获取对象使用的内存量的近似值:http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29 http://download.oracle.com/javase/6/docs/api/java/lang/instrument/Instrumentation.html#getObjectSize%28java.lang.Object%29

这仍然只是一个近似值...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java对象的大小[重复] 的相关文章

随机推荐

  • 当overflow-x:hidden时禁用鼠标滚动[CSS,HTML]

    问题 我的 div 的内容定位为 绝对 并且内容的宽度大于 div 根据需要 使用 overflow x hidden 剪辑 额外 内容 不过 如果我尝试使用鼠标滚动进行水平滚动 内容就会变得可见 我怎样才能不让这种事发生呢 我可以使用 J
  • While 循环不运行indexOf 搜索

    我试图找出一个字符串在另一个字符串中出现了多少次 在我的测试中 我对第一个单词使用 ea 对第二个单词使用 Ilikedthebestontheeastbeachleast 我的输出为 appearance 变量返回 0 该变量应该存储 e
  • 如何在 SwiftUI 中删除 List 和 ScrollView 的底部填充

    我想删除底部填充 即红色空间之间的空白 有什么办法可以实现吗 测试代码 struct ContentView View var body some View return NavigationView VStack the same res
  • Fabric.js 鼠标右键单击

    有没有办法在 Fabric js 画布上接收右键单击鼠标事件 以下代码仅适用于左键单击 canvas observe mouse down function console log mouse down NOTE 上面的大多数答案都已经过时
  • Rails 项目中的 rake 范围?

    我在我正在从事的项目中使用了许多解析器 当使用另一个 rake 中已经存在的方法名称时 并且因为它们都使用相同的环境 所以我会遇到冲突 有没有办法限制 rake 文件在其命名空间内的范围 我认为这就是命名空间的全部意义 Example na
  • 如何在WebLogic上查找JNDI资源?

    我在 WebLogic 11g 上部署了一个遗留应用程序 该应用程序具有以下代码 Context context new InitialContext dataSource javax sql DataSource context look
  • vaadin gwt 编译器错误未知参数:-war

    我的 vaadin 项目有问题 由于我对 vaadin 相当陌生 所以我不确定如何解决它 我想重新编译我的小部件集 但即使在自定义 Eclipse 之后 我也会收到相同的错误消息 首先它通过命令行执行编译器 接下来它告诉我小部件集是从某个类
  • Azure API 无法识别来自 Terraform 的服务主体

    为了使 Terraform azurerm 提供程序能够对将使用以下代码创建的服务主体进行身份验证 需要对下面的语法进行哪些具体更改 问题 A secondTerraform 模块需要通过 azurerm 提供程序向 Azure 进行身份验
  • 蓝牙连接无需配对

    连接蓝牙设备的正常方式是通过配对 我们需要以非正常方式连接到设备 仅使用蓝牙 MAC 地址 我们不希望系统提示输入 PIN 我们知道该设备支持此技术 但我们找不到在 Android 上执行此操作的方法 缩写代码如下所示 String mac
  • 如何使用 Storyboards 引用 UISearchController

    我添加了一个搜索栏和搜索显示控制器 假设这是我在情节提要中添加的内容 因为它们没有可拖出的 SearchController 对象 我的问题是现在如何设置 SearchController 的属性 self searchController
  • groupby 对象 pandas 的绝对值平均值

    我想计算分组对象的绝对值的平均值 I e grouped df groupby pd TimeGrouper 3MS dct x grouped profit agg mean grouped cost abs agg mean 但是 上面
  • 在 Raphael js 中使路径和图像可拖动

    是否可以使用 Raphael js 在页面周围拖放除圆形和矩形之外的对象 我想添加路径和图像 然后您可以移动它们 但事实证明这很棘手 我想与 Raphael 一起解决这个问题 因为它支持触摸界面 这是代码
  • 如何在标签下方水平对齐单选按钮

    因此 我使用以下 HTML 在 jsp 中的各自标签下方水平居中显示 4 个单选按钮
  • 在 onPostExecute 中调用另一个类的方法导致 nullPointerException

    这也可能对某人有帮助 由于 AsyncTask 是一个单独的类 如何将 OnPostExecute 的结果获取到主活动 https stackoverflow com questions 12575068 how to get the re
  • 无法在Windows上启用rabbitmq管理插件

    所以 这就是我所做的 在我的 Windows x64 位机器上安装了 Erlang 安装 RabbitMQ 启动 RabbitMQ 服务 这一步我没有任何错误 但是 当我尝试启用rabbitmq management时 我在控制台中收到一些
  • 使用 Prototype 迭代 javascript 中对象的每个属性?

    有没有办法使用 Prototype JavaScript 框架迭代对象的每个属性 情况如下 我收到 JSON 格式的 AJAX 响应 如下所示 foo 1 bar 2 barobj 75 true 76 false 85 true 如果我评
  • MySQL 如何在使用 Group By 时为不匹配的列分配空值

    我有以下 MovieTheaterTbl 表 Name Location Date TicketRevenue SnackRevenue BeverageRevenue AMC Alpine St 8 14 100 80 60 Atlas
  • 无法在数据库更新时保存更改。奇怪的延迟加载行为可能吗?

    现在 我的代码看起来就像这样简单 public class FooController Controller private readonly ApplicationDbContext db public FooController db
  • 8086 asm中的struct类型数据无法打印

    outputstring macro x push ax push dx mov ah 9 mov dx offset x int 21h pop dx pop ax endm inputstring macro x push ax pus
  • Java对象的大小[重复]

    这个问题在这里已经有答案了 我们怎样才能知道Java对象的大小呢 Example class Person String name int age public Person String n int a name n age a Pers