5

メモリを占有しているJavaサーバータスクがあります。一つには、それがMinHeapFreeRatioを超えたことはないと思いますが、それは推測です。GCが成熟世代を約2%に減らしても、ヒープに割り当てられたメモリを減らすことは決してないというのは、さらに興味深いことです。

ヒープ構成:
   MinHeapFreeRatio = 40
   MaxHeapFreeRatio = 70
   MaxHeapSize = 3221225472(3072.0MB)

   NewSize = 268435456(256.0MB)
   MaxNewSize = 268435456(256.0MB)
   OldSize = 805306368(768.0MB)
   NewRatio = 7
   SurvivorRatio = 8
   PermSize = 21757952(20.75MB)
   MaxPermSize = 176160768(168.0MB)

ヒープ使用量:
新世代(エデン+ 1サバイバースペース):
   容量=241631232(230.4375MB)
   使用済み=71657320(68.3377456665039MB)
   無料=169973912(162.0997543334961MB)
   29.65565312351675%使用
エデンスペース:
   容量=214827008(204.875MB)
   使用済み=47322984(45.130714416503906MB)
   無料=167504024(159.7442855834961MB)
   22.028414602320392%使用
宇宙から:
   容量=26804224(25.5625MB)
   使用済み=24334336(23.20703125MB)
   無料=2469888(2.35546875MB)
   90.78545232273838%使用
宇宙へ:
   容量=26804224(25.5625MB)
   使用済み=0(0.0MB)
   無料=26804224(25.5625MB)
   0.0%使用
同時マークスイープ生成:
   容量=2952790016(2816.0MB)
   使用済み=66930392(63.829795837402344MB)
   無料=2885859624(2752.1702041625977MB)
   2.2666830908168447%使用
パーマ生成:
   容量=45752320(43.6328125MB)
   使用済み=27404664(26.13512420654297MB)
   無料=18347656(17.49768829345703MB)
   59.89786747426142%使用
4

4 に答える 4

9

MaxHeapFreeRatioが尊重されない原因となる可能性のあるさまざまな要因が明らかにあります。

  • 最小ヒープサイズ(-Xms)はこれ(AFAIK)をオーバーライドします。
  • -XX:ParallelGCスイッチはヒープの縮小を禁止します-https://forums.oracle.com/forums/thread.jspa?messageID= 6438432
  • 縮小は完全なGCの後にのみ発生します-https://forums.oracle.com/forums/thread.jspa?messageID= 95578​​61
于 2012-08-27T23:58:46.107 に答える
2

オペレーティングシステムからヒープ用に予約されているメモリの量は、最小ヒープと最大ヒープ、パラメータ-Xms、および-XmxJavaコマンドラインによって決定されます。さまざまなガベージコレクターの比率やその他の構成はすべてその内部にあり、JVMが使用する合計メモリの量には影響せず、そのメモリ内での配置方法に影響します。

一般に、サーバーをセットアップするときは、ヒープのサイズを変更し、ヒープを拡張する必要がある場合にサーバーの実行中に連続したメモリスペースを作成する必要があるという追加のパフォーマンスコストを回避するために、同じ値に-Xmsなるようにサーバーを設定します。-Xmxこれは、ガベージコレクションの結果として、オペレーティングシステムからヒープ用に予約されているメモリの量が減少することはなく、新しいJVMデータを挿入するために解放されるだけであることを意味します。

于 2012-08-27T23:13:03.463 に答える
2

JRE 1.7では、を使用できます-XX:+UseG1GC -XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=15。ただし、メモリを縮小するには、を呼び出して明示的にGCを呼び出す必要がありますSystem.gc()

于 2015-09-29T19:32:59.103 に答える
0

-XX:+ UseG1GC -XX:ParallelGCThreads = 15 -XX:MinHeapFreeRatio = 30 -XX:MaxHeapFreeRatio = 70 -verbosegc -XX:+ PrintGCDetails -Dsun.rmi.dgc.client.gcInterval =60000-Dsun.rmiの組み合わせを使用しました。 dgc.server.gcInterval = 100000で、システムがクラッシュするのを防ぎました。使用済みメモリは99.8%になり、その後解放されます。

ありがとう:Shahid abbasi

于 2016-03-26T12:31:54.330 に答える