gpt4 book ai didi

java - 具有空列的结果集中的 Java Bean 是否会显着影响内存/大小?

转载 作者:行者123 更新时间:2023-11-30 08:37:03 26 4
gpt4 key购买 nike

这听起来可能是个愚蠢的问题,但我找不到很多关于这个的资料(除了这篇文章:https://plumbr.eu/blog/memory-leaks/reducing-memory-consumption-by-20x)。

问题是:我们要查询具有 20 列的 Oracle 数据库表。我们创建了一个映射到所有 20 列的 Java bean。现在使用 Spring JDBC,我们执行一个只选择 3 列(共 20 列)的查询,并且我们只设置 bean 中的三个属性(总属性 = 20),这意味着其余 17 个属性应该为空。现在我们使用这个结果集(填充了 3 个字段,但 17 个为空)进行处理,在层之间传递等。

这是否会显着影响 Java 程序使用的总内存,尤其是当我们要提取数百条数据库记录或 Java 会以某种方式在内部对其进行优化时?只创建一个只有 3 个字段(我们需要将其作为查询的一部分?)的 bean 会更好吗?

我们正在使用 JDK 1.8、Spring 4、oracle 11。

最佳答案

Is this going to affect the total memory used by the Java program

简短的回答 - 是的,它会的。

Significantly?

好吧,这取决于你所说的“显着”是什么意思。

创建类的实例时 - 它会占用一些特定的空间。

实际使用的内存大小(对象占用空间)取决于很多因素,特别是:

  • bean 中字段的类型
    • 如果它是原语——每个字段都有特定数量的字节保留see spec
    • 对于引用类型(对象及其后代)——引用也占用4或8个字节
  • 内存对齐
  • JVM 实现
  • JVM 参数
  • ...

如果您将 17 个属性设置为 null,我们可以假设您已将这些字段声明为非原始字段。因此,如果您不使用这些字段,您可能会认为“浪费”了 68 或 136 个字节。甚至更多。问题是 - 这对你来说太多了吗?

您可以检测您拥有的实际对象并比较内存占用量并决定它是否适合您

or Java would somehow internally optimize it

这个我不清楚。但如果有人能阐明这一点,那就太好了。

关于java - 具有空列的结果集中的 Java Bean 是否会显着影响内存/大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37488310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com