LoadableDetachableModel
は、transientModelObject
です。デタッチ方法はLoadableDetachableModel.detachがtransientModelObject = nullを設定するのはなぜですか?
transientModelObject=null
を設定しないのはなぜそれがシリアライズされませんので、私はこれを求めています。
LoadableDetachableModel
は、transientModelObject
です。デタッチ方法はLoadableDetachableModel.detachがtransientModelObject = nullを設定するのはなぜですか?
transientModelObject=null
を設定しないのはなぜそれがシリアライズされませんので、私はこれを求めています。
理由は、ページインスタンスがライブ(非シリアル化)オブジェクトとしてhttpセッションに保持されているためです。 LoadableDetachableModel
の契約では、modelObject
が請求サイクル中に利用可能になると言われています。 null
が明示的にdetach()
に指定されていない場合、それは次の要求で引き続き利用できます。
'LoadableDetachableModel.getObject'では、' state == DETACHED'(または初めて、 'state == null')。したがって、モデルオブジェクトは常に上書きされます。それで、それが次のリクエストでまだ利用可能であると言うとき、あなたはどういう意味ですか? – ericj
数ヶ月前に州が導入されました。 LDMは10年以来存在しています。 'null'によって、モデルオブジェクトを手動で設定すると、Sessionのサイズを小さく保ちます。 –
通常、コンポーネントはメモリに残ります(コンテナがセッションをディスクにシリアル化しない場合)。そのため、参照を無効にするとメモリ消費が最小限に抑えられます。
なぜ次回のリクエストまでメモリを必要としないときに大量のメモリが必要になるのですか?
決定的な回答をするには、そのクラスの作者に尋ねる必要がありますが、私が推測しているのは、GCで参照できるものを作成することです。 (または、より正確には、LDMがGCを保持する唯一のものであるのを避けるため) – biziclop