アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になっております。
今回質問させていただきたいのはサーブレットコンテナ上のメモリ解放についてです。サーブレットの動作フローとしては、

(1)クライアントからHTTPリクエストが投げられる。
(2)Webサーバがリクエストを受け取り、コンテナへリクエストを委譲する。
(3)サーブレットコンテナは、リクエストとレスポンスのラッパーオブジェクトを生成し、リクエストへリクエスト情報をマッピングする。
(4)(3)で生成したリクエスト/レスポンスオブジェクトをサーブレットへ参照渡しする。
(5)サーブレットが処理を実行する
(6)レスポンスを生成し、クライアントへ返す。

という流れかと思いますが、この際に(3)で生成されるラッパーオブジェクトや、ロードされたサーブレットが解放されるのは、レスポンスを返した後なのでしょうか。それとも次のリクエストに備え、オブジェクト本体は確保されたまま、次のマッピングに備えるのでしょうか。(サーブレットの解放はコンテナが終了した際?)
はたまた、やはりJava特有のガベージコレクションが働き、メモリ解放はガベージコレクションのタイミングで行われるのでしょうか、、

よろしくお願い致します。。m(._.)m

A 回答 (4件)

サーブレット自体のアンロードは、明示的にサーブレットをシャットダウンしたとき以外は行われません。


基本的に、サーバが生きてる限りずーっとオンメモリです。

リクエスト/レスポンスのラッパーオブジェクトは基本的には(サーブレットでブールするような仕組みで作らない限り)破棄されると思います。
オブジェクトの破棄は、Javaの仕様通りにGCが行います。
    • good
    • 0
この回答へのお礼

なるほどです。
すみません、1点だけ

>明示的にサーブレットをシャットダウンしたとき以外は行われません。
これはサーバをではなく、サーブレットをなのでしょうか、、
次の文を拝読するとサーバをとも読み取れるのですが、、

やはり1リクエストにしか使われず、使い終わったら破棄すべきオブジェクトとなりそれをGCするという形なのですね。
ご回答誠にありがとうございました。m(._.)m

お礼日時:2008/05/04 13:16

>これはサーバをではなく、サーブレットをなのでしょうか、、


>次の文を拝読するとサーバをとも読み取れるのですが、、

正確には
・サーバは生きたままサーブレットを落とすことはできる。
・サーバが死んだ場合サーブレットは落ちる。
です。
前者はサーブレットを更新したような場合です。
メモリ上のサーブレットは破棄されて、次にリクエストがあったときに(更新された)サーブレットが展開されます。
    • good
    • 0

推測ですが、オブジェクトをGCが動くまで放っておくコストと、オブジェクトプーリングしておくコストを考えるとおそらく前者、つまりRequestとResponseは使い捨てだと思います。

    • good
    • 0
この回答へのお礼

そうですね。たしかに放っておくメリットもありませんし。。
ご回答誠にありがとうございました。m(._.)m

お礼日時:2008/05/04 13:17

メモリ開放が行われるのはGCが走るとき、でしょうね。



以前勤めてたところで、非常に大規模なシステムがあって、
そこではGCが起こるまではメモリに残っているという説明でした。
(私は直接関与してなかったので詳細はわからないですが)
    • good
    • 0
この回答へのお礼

なるほどです。
となると大規模となればなるほどメモリ消費が心配になるところです。
ご回答誠にありがとうございました。m(._.)m

お礼日時:2008/05/04 13:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!