当前位置: 首页 > 面试题库 >

如何测试对象引用在Java中使用多少字节?

赏梓
2023-03-14
问题内容

我想测试对象引用在我使用的Java VM中使用了多少字节。你们知道如何测试吗?

谢谢!


问题答案:

从字面上考虑这个问题,在大多数JVM上,在32位JVM上的所有引用都占用4个字节,一个64位JVM则占用8个字节,除非已使用-XX:+
UseCompressedOops,在这种情况下,它需要4个字节。

我假设您在问如何分辨一个对象占用了多少空间。您可以使用Instrumentation(这不是一件简单的事情),但这只会给您带来深度。Java倾向于将您分解为许多对象,而C
++可能只是一个单一的结构,因此它没有那么有用。

但是,如果您遇到内存问题,建议您使用内存分析器。这将为您提供浅层和深层空间物体的使用,并为您提供整个系统的图像。这通常会更有用,因为您可以从最大的使用者开始并进行优化,就算您已经开发Java十多年以上,除非您拥有硬数据,否则您只会猜测最佳的优化位置。

如果您不想使用事件探查器,则获取对象大小的另一种方法是分配一个大数组并查看消耗了多少内存。您必须多次执行此操作才能很好地了解平均大小。我会设置很高的年轻空间,以避免GC混淆您的结果,例如-XX:NewSize=1g



 类似资料:
  • 问题内容: 我是第一次使用JUnit进行Java测试。我必须使用Java,并且想使用单元测试。 我的问题是:我有一个带有一些抽象方法的抽象类。但是有些方法不是抽象的。如何使用JUnit测试此类?示例代码(非常简单): 我要测试并运行。 在“JUnit常见问题解答”部分中,我找到了此链接,但我不理解作者想在此示例中说些什么。这行代码是什么意思? 问题答案: 如果您没有该类的具体实现,并且方法不是测试

  • 问题内容: 我需要存储大量的日期(可能足够大,以至于需要考虑使用的堆空间量,因此请不要讲授过早的优化),我想知道使用某种原始表示是否有意义java.util.Date(或其他一些现有的Date类)的形式。我知道我可以进行一些性能分析来尝试一下,但是有人知道一个Date对象使用多少字节的内存吗? 问题答案: 我的直觉反应是Date的内存开销非常小。检查源代码,似乎该类仅包含一个实例字段(长为毫秒)。

  • 问题内容: 我想从Java方法返回对Scala对象的引用。我怎样才能做到这一点? 我的Scala对象是这样的: …并且我希望我的Java方法像这样: 有没有办法做到这一点? 问题答案: 应该管用。 编辑:之所以可行,是因为这是Scala表示单例对象的方式。该类中有一个名为的字段,其中填充有该类的单个有效实例。但是还有一个叫做的类,它将所有方法复制为静态方法。这样一来,您就可以在大多数情况下像Jav

  • 问题内容: 我必须String对象: 我需要做的是找出第二个对象在第一个对象中重复多少次,您能告诉我该怎么做吗? 问题答案: 最简单的方法是在循环中使用,每次找到该单词时都会提高起始索引: 如果一个单词包含自我重复,它将多次找到该单词。请参阅上面的注释,以避免这种“重复”的发现。 ideone演示。

  • 本文向大家介绍如何计算Java对象占用了多少空间?,包括了如何计算Java对象占用了多少空间?的使用技巧和注意事项,需要的朋友参考一下 本文介绍了计算Java对象占用了多少空间的方法,分享给大家供大家参考,具体内容如下 一、对象头 对象的头部至少有两个WORD,如果是数组的话,那么三个WORD,内容如下: 1、对象的HashCode,锁信息等 2、到对象类型数据的指针 3、数组的长度(如果是数组的

  • 问题内容: 我的朋友给我发了一个问题,他在一次关于字符串对象的Java认证模拟考试中看到了一个问题: 调用此方法时将创建多少个字符串对象?考试给出的正确答案是3。但是我认为是5。 “嗨” “ 5” “ HI5” “H” “H” 我错了吗? 问题答案: String makeStrings() { String s = “HI”; //String literal s = s + “5”; //co