2017-02-21 4 views
0

LoadableDetachableModelは、transientModelObjectです。デタッチ方法はLoadableDetachableModel.detachがtransientModelObject = nullを設定するのはなぜですか?

transientModelObject=null 

を設定しないのはなぜそれがシリアライズされませんので、私はこれを求めています。

+0

決定的な回答をするには、そのクラスの作者に尋ねる必要がありますが、私が推測しているのは、GCで参照できるものを作成することです。 (または、より正確には、LDMがGCを保持する唯一のものであるのを避けるため) – biziclop

答えて

1

理由は、ページインスタンスがライブ(非シリアル化)オブジェクトとしてhttpセッションに保持されているためです。 LoadableDetachableModelの契約では、modelObjectが請求サイクル中に利用可能になると言われています。 nullが明示的にdetach()に指定されていない場合、それは次の要求で引き続き利用できます。

+0

'LoadableDetachableModel.getObject'では、' state == DETACHED'(または初めて、 'state == null')。したがって、モデルオブジェクトは常に上書きされます。それで、それが次のリクエストでまだ利用可能であると言うとき、あなたはどういう意味ですか? – ericj

+0

数ヶ月前に州が導入されました。 LDMは10年以来存在しています。 'null'によって、モデルオブジェクトを手動で設定すると、Sessionのサイズを小さく保ちます。 –

1

通常、コンポーネントはメモリに残ります(コンテナがセッションをディスクにシリアル化しない場合)。そのため、参照を無効にするとメモリ消費が最小限に抑えられます。

なぜ次回のリクエストまでメモリを必要としないときに大量のメモリが必要になるのですか?

関連する問題