gc スイープ時間を節約するために、gc の観点から収集不可能な Java オブジェクトをマークすることは可能ですか?
http://wwwasd.web.cern.ch/wwwasd/lhc++/Objectivity/V5.2/Java/guide/jgdStorage.fm.htmlの行に沿ったもの、特にそこにある非ガベージ収集可能コンテナ(非ガベージ-収集可能?)。
問題は、通常の一時オブジェクトがたくさんあることですが、キャッシュ用に保存されているオブジェクトがさらに大きい (数ギグ) ことです。Java GC は、収集するものを見つけようとしてこれらすべてのキャッシュ ギガバイトをトラバースする必要はありません。キャッシュ データには独自のタイムアウトがあるキャッシュ データが含まれているためです。
このようにして、カスタムの方法でデータを無限に存続するオブジェクトと通常に存続するオブジェクトに分割できます。通常のオブジェクトはそれほど長く存続せず、量が少ないため、GC が非常に高速になることを願っています。
この問題には、Apache DirectMemoryや Commercial Terracotta BigMemory(http://terracotta.org/products/bigmemory) などのいくつかの回避策がありますが、Java ネイティブのソリューションの方が優れています (つまり、無料で、おそらくより信頼性が高いということですか?)。また、シリアライゼーションのオーバーヘッドを避けたいと考えています。つまり、同じ jvm 内で発生する必要があります。私の理解では、DirectMemory と BigMemory は主にオフ ヒープで動作します。これは、オブジェクトを jvm の外部のメモリとの間でシリアル化/逆シリアル化する必要があることを意味します。jvm 内の非 gc 領域をマークするだけで、より良い解決策に思えます。キャッシュにファイルを使用することもオプションではありません。同じように、シリアライゼーション/デシリアライゼーションのオーバーヘッドが高くつきます。ユースケースは、大量のデータがランダム (人間の) 順序で使用され、低レイテンシーが必要な HA サーバーです。