タイトルが示すように、jmap -histo
とjmap -heap
はどれくらいのオーバーヘッドを持っていますか?jmap - ヒストリとヒープ操作はjvmにオーバーヘッドをもたらしますか?
メモリーの影響を受けやすいJavaプロセスがOutOfMemory
のエッジにある場合(ヒープの96%がいっぱいで、完全なgcでクリアできない場合など)、操作の1つでjvmをOutOfMemory?
タイトルが示すように、jmap -histo
とjmap -heap
はどれくらいのオーバーヘッドを持っていますか?jmap - ヒストリとヒープ操作はjvmにオーバーヘッドをもたらしますか?
メモリーの影響を受けやすいJavaプロセスがOutOfMemory
のエッジにある場合(ヒープの96%がいっぱいで、完全なgcでクリアできない場合など)、操作の1つでjvmをOutOfMemory?
jmap -histo
とjmap -heap
の動作が異なります。jmap -histo
はDynamic Attach Mechanismを使用し、jmap -heap
はHotSpot Serviceability Agentを介して動作します。違いはhereと記載されています。
したがって、jmap -histo
はJVM自体によって実行されますが、jmap -heap
は、JVMプロセスが中断されている間にツールプロセスで実行されます。どちらの場合も、新しいJavaオブジェクトは作成されません。このツールではOutOfMemoryError
は発生しません。
アプリケーションスレッドはすべて停止します。jmap -histo
はJavaスレッドを停止し、jmap -heap
はJVMプロセス全体を停止します。特に大きなヒープの場合、一時停止の期間がかなり長くなる可能性があります。例えば。 4GBのヒープを歩くには数秒かかる場合があります。