Javaメモリプロファイリングについて学習している間、私は「ヒープ」に加えて「パーマスペース」という用語を見続けます。ヒープとは何かを知っています-パーマスペースとは何ですか?
Javaメモリプロファイリングについて学習している間、私は「ヒープ」に加えて「パーマスペース」という用語を見続けます。ヒープとは何かを知っています-パーマスペースとは何ですか?
回答:
それは永続的な世代の略です:
永続世代は、ユーザークラス(Java言語の一部ではないクラス)を記述するメタデータを保持するため、特別です。このようなメタデータの例は、クラスとメソッドを記述するオブジェクトであり、それらは永続世代に格納されます。コードベースが大きいアプリケーションは、ヒープのこのセグメントをすぐにいっぱいにする可能性があります。これにより
java.lang.OutOfMemoryError
、-Xmxの高さやマシンのメモリ量に関係なく、PermGenが発生し ます。
Perm space
ロードされたクラスの情報とString Pool
、通常はString.intern()
メソッドによって作成される(高度に最適化された文字列等価性テスト用)などの他のいくつかの高度な機能を保持するために使用されます。アプリケーション(クラスの数)が増えると、このスペースはすぐにいっぱいになります。このスペースのガベージコレクションは、必要に応じてクリーンアップするのにあまり効果的ではないため、すぐにメモリ不足:perm genspaceエラーが発生します。その後、巨大な空のJVMがあった後でも、そのマシン上でアプリケーションを効果的に実行することはできません。
アプリケーションを起動する前にjava -XX:MaxPermSize
、このエラーを取り除く必要があります。
Perm Genは、クラスに関するメタデータ情報を保持する永続的な生成を表します。