Javaには、ガベッジコレクション(以降、GC)という、メモリの掃除をする機構が備わっており、C系の言語のように、メモリの確保、開放を意識しなくていいようになっています。
JVM上でJavaプログラムが動くとき、ヒープ領域と呼ばれるところでは、オブジェクトが生まれては消えていくライフサイクルが起きています。このライフサイクルの一部にGCが関わっています。
メモリを意識しなくてよくなった分、プログラムで本来書くべき処理に集中できますが、ケースによっては、その意識しない部分がアプリケーションに影響を与えることがあります。
止まります
どんな影響かと言うと、Javaの世界、Javaアプリケーションが止まります。ザ・ワールドってやつです。
止まると言っても、OutOfMemoryErrorを出して落ちたりするわけではなく、処理が数秒停止してしまうといった、ぱっと見は軽微な事象です。
コンソールアプリケーションやバッチでは遅くなる程度ですが、これがWebサービスやAPIなどのWeb系のアプリケーションとなると、レスポンスが遅延するため、数秒もの停止はかなり大きな影響です。
何故止まるのかと、その解決策(コンカレントGC)についてまとめていきます。そんなSunJDKのお話。
その2へつづく。早めに書きたい。