这听起来可能是一个愚蠢的问题,但我找不到很多关于此事的内容(除了这篇文章:https://plumbr.eu/blog/memory-leaks/reducing-memory-consumption-by-20x)。
问题是:我们要查询具有20列的Oracle数据库表。我们创建了一个Java bean,它映射到所有20列。现在使用Spring JDBC,我们执行一个只选择3列(20个)的查询,并且我们只设置bean中的3个属性(total properties = 20),这意味着17个属性的其余部分应为null。现在我们使用这个结果集(填充3个字段,但是17个为null)进行处理,在层之间传递等。
这是否会显着影响Java程序使用的总内存,特别是当我们要删除几百条DB记录或Java会以某种方式在内部优化它时?如果只创建一个只有3个字段的bean(我们需要将其作为查询的一部分?)
,那会更好吗?我们正在使用JDK 1.8,Spring 4,oracle 11。
答案 0 :(得分:2)
这是否会影响Java程序使用的总内存
简短回答 - 是的,它会。
值得注意的是?
嗯,这取决于“显着”是什么意思。
当创建一个类的实例时 - 它占用一些特定的空间。
所使用的内存的实际大小(对象占用空间)取决于许多因素,尤其是:
如果您将17个属性设置为null,我们可以假设您已将这些字段声明为非原始字段。因此,如果您不使用这些字段,您可能会“浪费”68或136个字节。甚至更多。问题是 - 对你来说太过分了吗?
你可以检测你拥有的实际物体并比较记忆足迹并决定它是否适合你
或Java会以某种方式在内部优化它
我不知道。但如果有人能够对此有所了解,那将会很好。