【问题标题】:Native toplink having large entity size具有大实体大小的本机 toplink
【发布时间】:2026-01-31 08:50:01
【问题描述】:


我的应用程序运行良好,但存在一些内存问题,我正在使用带有 spring 2.5 的本机 toplink,我的应用程序的每个实体都消耗大约 21MB 大小,经过调查发现这些实体使用 ValueHolder Interface(间接)进行延迟加载大尺寸。

例如:

class Customer
{
    private Long id;
    private String name;
    private String lastName;
    private ValueHolderInterface customerAddress = new ValueHolder();
    // getter...setter...
}
class address{
    private Long id;
    private String city;
    private String country;
}

客户实体有CustomerAddresValueHolderInterface,显示20MB,即使客户地址很少有字符串属性

日志会显示每个属性的大小。
客户 [id=24 字节,名称=50 字节,名字=80 字节,姓氏=80 字节,客户地址=20625584 字节,客户地址=20625584 字节]

查询
ValueHolder 是在吃内存吗?
有什么办法可以解决这个问题吗?
toplink 是否在此处应用某种运行时编织

谢谢

【问题讨论】:

    标签: java performance memory-leaks toplink


    【解决方案1】:

    ValueHolder 不会占用太多内存,可能不到 100 字节,当然不会 20MB。

    没有看到您如何设置映射,我猜您在 Customer 和 Address 之间存在一对多映射,但您的外键映射设置不正确,因此 TopLink 正在执行笛卡尔连接并为每个客户加载整个数据库中的每个地址。​​

    【讨论】:

      最近更新 更多