Wicket 为什么LoadableDetachableModel.detach设置transientModelObject=null?

Wicket 为什么LoadableDetachableModel.detach设置transientModelObject=null?,wicket,Wicket,在LoadableDetachableModel中,是transientModelObject一个瞬态字段。为什么detach方法会设置 transientModelObject=null 我这样问是因为它不会被序列化。通常您的组件将保留在内存中(如果容器没有将会话序列化到磁盘),因此取消引用可以最大限度地减少内存消耗 在下一个请求之前不需要内存时,为什么要浪费大量内存呢?通常您的组件将保留在内存中(如果容器没有将会话序列化到磁盘),因此取消引用可以最大限度地减少内存消耗 在下次请求之前不需要

LoadableDetachableModel
中,是
transientModelObject
一个瞬态字段。为什么detach方法会设置

transientModelObject=null

我这样问是因为它不会被序列化。

通常您的组件将保留在内存中(如果容器没有将会话序列化到磁盘),因此取消引用可以最大限度地减少内存消耗


在下一个请求之前不需要内存时,为什么要浪费大量内存呢?

通常您的组件将保留在内存中(如果容器没有将会话序列化到磁盘),因此取消引用可以最大限度地减少内存消耗


在下次请求之前不需要内存时,为什么要浪费大量内存?

原因是页面实例作为活动(非序列化)对象保留在http会话中。
LoadableDetachableModel
的合同规定其
modelObject
将在请求周期内可用。如果它在
detach()
处未显式地设置为
null
,则它在下一个请求中仍然可用。

原因是页面实例作为活动(非序列化)对象保留在http会话中。
LoadableDetachableModel
的合同规定其
modelObject
将在请求周期内可用。如果在
detach()
处显式地指定了它不是
null
,那么它在下一个请求中仍然可用。

要获得明确的答案,您必须询问该类的作者,但我的猜测是将它引用的内容用于GC。(或者更准确地说:为了避免LDM成为唯一阻碍GC的东西。)要得到一个明确的答案,您必须询问该类的作者,但我的猜测是让它引用的任何内容都可用于GC。(或者更准确地说:为了避免LDM成为唯一阻碍GC的东西。)在
LoadableDetaccessableModel.getObject
中,始终会执行:
transientModelObject=load()
,因为
state==Distacted
(或者第一次,
state==null
)。因此,模型对象将始终被覆盖。那么,当你说它在下一个请求中仍然可用时,你是什么意思呢?美国几个月前就已经推出了。LDM已存在10年。通过
null
-手动初始化模型对象,我们可以使会话大小更小。在
LoadableDetachableModel.getObject
中,始终会执行:
transientModelObject=load()
,因为
state==Distached
(或者第一次,
state==null
)。因此,模型对象将始终被覆盖。那么,当你说它在下一个请求中仍然可用时,你是什么意思呢?美国几个月前就已经推出了。LDM已存在10年。通过
null
-手动初始化模型对象,我们可以使会话大小更小。