1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Lambda環境でのJavaのstaticについて

Posted at

前提

pythonのコードでは関数外のコードは一度しか実行されないという記事を目にしたのでJavaのStaticについても同じ挙動なのか気になり検証した

検証

public class Cache {
    private static Integer number = null;

    public Cache(){}

    public int get(){
        if(number != null){
            number++;
            return number;
        } else {
            number = 0;
            return number;
        }
    }
}

var cache = new Cache();
logger.info("1回目の呼び出し cacheの番号: " + cache.get());
logger.info("2回目の呼び出し cacheの番号: " + cache.get());

上記のようにcacheクラスを用意してハンドラー関数内でインスタンス生成とgetメソッドのコールを行う。getメソッドではstaticに入れた内容を記録しておき、+1した値を返す。Nullの場合は0を入れて返す。

実行してみると、下記画像のようになった
image.png
つまり、staticがnullで0を入れるのはColodスタートした際の1回のみだった。

結論

  • staticのライフサイクルはLambdaが終了しても継続した値になる
  • 実行環境が終了するまで(warmスタート状態が終わるまで)staticの値は継続する

参考

Operating Lambda: パフォーマンスの最適化 – Part 1
https://aws.amazon.com/jp/blogs/news/operating-lambda-performance-optimization-part-1/

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?