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

在Java中,确定对象大小的最佳方法是什么?

阴迪
2023-03-14
问题内容

我有一个应用程序,它读取带有大量数据行的CSV文件。我根据数据类型为用户提供了行数的摘要,但我想确保不会读取太多的数据行并导致OutOfMemoryErrors。每行转换为一个对象。有没有一种简便的方法以编程方式找出该对象的大小?是否有一个引用定义了一个原始类型和对象引用有多大VM?

现在,我的代码可以读取多达32,000行,但我还想让代码显示尽可能多地读取行,直到使用32 MB内存为止。也许这是一个不同的问题,但我仍然想知道。


问题答案:

你可以使用java.lang.instrument包

编译该类并将其放在JAR中:

import java.lang.instrument.Instrumentation;

public class ObjectSizeFetcher {
    private static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation inst) {
        instrumentation = inst;
    }

    public static long getObjectSize(Object o) {
        return instrumentation.getObjectSize(o);
    }
}

将以下内容添加到你的MANIFEST.MF:

Premain-Class: ObjectSizeFetcher

使用getObjectSize:

public class C {
    private int x;
    private int y;

    public static void main(String [] args) {
        System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
    }
}

调用:

java -javaagent:ObjectSizeFetcherAgent.jar C


 类似资料:
  • 问题内容: 是什么导致内存中单个对象的大小? 我知道原语和引用会,但是还有其他吗?方法的数量及其长度是否重要? 问题答案: 这完全取决于实现,但是有一些因素会影响Java中的对象大小。 首先,Java对象中字段的数量和类型肯定会影响空间使用,因为您至少需要拥有容纳该对象所有字段所需的存储空间。但是,由于填充,对齐和指针压缩的优化,没有直接公式可用于精确计算以这种方式使用了多少空间。 对于方法,通常

  • 问题内容: 如果设置最大Java堆大小,那么单个对象可能的最大大小是多少? 假设我的应用程序只有一个类,而我正在创建一个对象。 该对象有大约大小限制吗? 我的课看起来像下面的课: 注意 正如我提到的JVM堆大小一样,我要求定量地回答。 问题答案: 理论上最大的Java对象(如果您有足够大的堆)将是带有2 31-1个元素的Java对象。那是16Gb。 但是,对于给定的堆大小,您将能够创建的最大对象取

  • 问题内容: 这是一个小问题,因为我可以轻松地参加一对班做这项工作。我并不是真的想要这样做,我觉得应该有一些简单的,内置的,类似于Java的方法来返回两个值。你们最好的,最简单的方法是什么?数组?其他一些数据结构? 问题答案: 据我所知,不幸的是在Java中没有对的内置表示(我当然希望有)。就个人而言,当我编写一个项目时发现配对类经常很有用时,我会创建一个通用类(这可能是您在想的)。返回数组是一种快

  • 问题内容: 在Java中查找文本文件中单词总数的最佳方法是什么?我认为Perl是找到这种东西的最佳选择。如果是这样,那么从Java内调用Perl函数将是最佳选择?在这种情况下您会怎么做?还有更好的主意吗? 问题答案: 恭喜,您偶然发现了最大的语言问题之一!什么字 有人说,单词是唯一真正代表其含义的单词。语言学的整个领域都涉及词/意义单元-形态学。 我认为您的问题与计算英语单词有关。但是,由于语言上

  • 问题内容: 如果您将数组作为状态的一部分,并且该数组包含对象,那么通过更改其中一个对象来更新状态的简便方法是什么? 示例,从关于react的教程中修改而来: 问题答案: 在更新状态时,关键部分是将其视为不变。如果可以保证,任何解决方案都可以。 这是我使用immutability-helper的解决方案: jsFiddle:

  • 问题内容: 在处理大型和/或许多Javascript和CSS文件时,减小文件大小的最佳方法是什么? 问题答案: 除了使用服务器端压缩外,使用智能编码是保持较低带宽成本的最佳方法。您始终可以使用Dean Edward的Javascript Packer之类的工具,但是对于CSS,请花一些时间学习CSS Shorthand。例如使用: …代替: 另外,请使用CSS的级联性质。例如,如果您知道您的站点将