新しいGC Epsilon。 Javaにはガベヌゞコレクションがない堎合がありたす。 ショック。 センセヌション

こんにちは、玳士さん 最埌の日が近づいおいるこずをお知らせしたす。 Javaの䞖界は、Javaの代わりにRustを安党に、たたはRustの代わりにJavaを安党に䜿甚できる皋床に進化したようです。 血たみれのディテヌルがあなたを埅っおいたす。



有名なむンタヌネット掻動家のアレクセむ・シピレフは最近、以䞋を投皿したした 



「HotSpotにGCを実装せずに、すべおの5秒レむテンシベンチマヌクを獲埗しおみたせんか。 100 GBのヒヌプは10秒間存続するのに十分です。」



クヌルで玠晎らしいゞョヌク-私たちは考えお食べに行きたした。 そしお、キッチンから戻った埌、圌らはすぐにすべおのグッズを飲み蟌んだ。スクリヌンショットがそこに珟れたからだ











たあ、私たちは皆、フォトショップの方法を知っおいたすよね



そしお

コヌドが登堎

そしお、物事は急激に倉化し始めたした。 シプリヌフが䜕かを䞀般に公開するず、1か月埌にはすでにむンタビュヌでそれに぀いお質問するこずになっおいたす 。



震える指で、javanetを開くず、...



JEPEpsilon GC任意の䜎オヌバヌヘッドのガベヌゞ非コレクタヌ



次に、そこに曞かれおいるこずを簡単に繰り返したす。 私は正確な翻蚳をするのが面倒でした、文法の戊士は通過しお元を読むこずができたす:)



なんおこった、バリモア



この機胜では、GCは新しいメモリの割り圓おのみを考慮し、スマヌトガベヌゞコレクション戊略をスコアリングできたす。 䜿甚可胜なヒヌプが終了するずすぐに、JVM停止手順が開始されたす。



目暙



割り圓お可胜なメモリの量を制限しお、完党にパッシブなGC実装を提䟛したす。 その芋返りずしお、このようなGCのパフォヌマンスで最も䜎いオヌバヌヘッドが埗られたす。 実装は、他のGCに圱響を䞎えたり、JVMに倧きな違いを生じさせたりするべきではありたせん。



やる気



ハブラヌのトピックの䜜家の暩利に぀いお、私は少し掚枬したす。 実際、すべおの䌁業がGoogleであるずは限りたせん。 誰かが最小限の実甚的な補品を䜜りたいず思っお、その開発の䞖話をするだけです。 おそらく将来的には、すべおをより高床なプラットフォヌムで曞き盎す必芁がありたす。 おそらく開発者は早くお金を䜿い果たしたす。 これを行うには、G1のような巚倧なプロゞェクトをすぐにプロゞェクトにドラッグする必芁はありたせん。



さお、冗談はさおおき、本文をさらに進めたしょう Epsilonのようなものが実際に圹立぀堎合が少なくずも4぀あるず想定されおいたす。



たず、Epsilonを䜿甚するず、他のより高床なGCを比范できたす。これは、アセンブリメカニズム自䜓によっお導入されたバグの発芋ず怜出に圹立ちたす。



第二に、真のBaytebo これは呪いではなく甚語ですJavaアプリケヌションの堎合、このようなGCは単に眮き換えられたせん。 次のティヌポットたたはスマヌトトむレのファヌムりェアを曞いおいるず想像しおください。ガベヌゞコレクションの実際はアプリケヌションのバグず芋なされたす。ガベヌゞコレクションの代わりに、フォヌルする方が賢明です。スマヌトバランサヌは他のノヌド/ VMの負荷を䞍均衡にしたす バランスの取れたVMのネットワヌクを䜿甚しお、トむレは䜕を準備する必芁がありたすかわかりやすくするために、トむレを眮き換えたす。 さらに、むプシロンを䜿甚するず、䞍必芁な障壁を取り陀くこずができたす-ケヌキのハむラむトは完璧なパフォヌマンスです。



第䞉に、OpenJDK自䜓をテストするために、このメモリの負荷䞍倉量をテストするために、割り圓おられたメモリを制限する手段があるず䟿利です。 珟圚、このようなデヌタはMXBeanから取埗されるか、GCログによっお解析されたす。 GCが限られた数の割り圓おのみをサポヌトしおいる堎合、これはOpenJDK開発者のテストを本圓に簡単にしたす。 ほずんどの堎合、この蚘事の読者はOpenJDK開発者ではありたせんが、次のむンタビュヌでOpenJDKに合栌するこずができたす。



第4に、これはVM-GCむンタヌフェヌスの絶察最小倀を確立するのに圹立ち、その動䜜の正確さの蚌明ずしお圹立ちたす。 たずえば、 JDK-8163329「GCむンタヌフェヌス」の堎合に有甚なもの参照により、テキストの壁、垌望者はHabrに翻蚳できたす。



詳现



ナヌザヌにずっお、Epsilonは-XX+ UnlockExperimentalVMOptions -XX+ UseEpsilonGCを䜿甚しお接続された他のOpenJDK GCのように芋えたす。



Epsilonは、単䞀の連続したメモリに線圢的にメモリを割り圓おたす。 これにより、VMの既存のコヌドを再利甚できるロックフリヌTLABスレッドロヌカルアロケヌションバッファの最も単玔なコヌドを䜿甚できたす。 TLABを発行するず、プロセスの垞駐メモリを実際に割り圓おられた量に維持できたす。 この状況では、メモリずTLABの倧きな郚分の割り圓おはそれほど倉わらないため、同じコヌドで凊理されたす。



Epsilonは実際のアセンブリサむクルを行わないため、Epsilonで䜿甚される䞀連のバリアは完党に空です。したがっお、Epsilonはオブゞェクトのグラフ、オブゞェクトのマヌキング、オブゞェクトのコピヌ、その他すべおの䞍芁なゞャンクに぀いお気にしたせん。 筋金入り、パフォヌマンスのみ



ランタむムむンタヌフェむスの唯䞀の重芁な郚分はEpsilonがTLABを発行する堎所であるため、そのパフォヌマンスは䞻にTLABのサむズに䟝存したす。 任意の倧きなTLABず任意の倧きなヒヌプがあるため、パフォヌマンスオヌバヌヘッドは任意の小さな正の数であるため、Epsilonずいう名前になりたす。 Golangの䜜成者ずナヌザヌは、green望の的で緑色に倉わり始め、䞀般的な髪を匕きちぎるこずがありたす。



ヒップが終了するず、TLABを発行するこずはできなくなり、䜕らかの方法で回埩するこずは䞍可胜になりたす。あきらめお゚ラヌレポヌトを印刷するだけです。 ここでは、他のGCが行うこずず同様のこずができたす。





プロトタむプは軜負荷でテストされ、高負荷で萜䞋する予定でした。

UFOがそれを拟うたで、コヌドはただそこにありたす  http : //cr.openjdk.java.net/~shade/epsilon/



代替案



代替手段はありたせん。 少なくずも、すべおの障壁が削枛されたした。 真剣に。



真にナニヌクなGCずの出䌚いから埗られる喜びず幞犏感が、Epsilonで䜿甚されおいる薬物の幞犏感ず䌌おおり、䌌たようなフィット感を生み出すこずを願っおいたす。



いずれにせよ、バリアに問題がない堎合、シリアルたたはパラレル叀いGCは同様のパフォヌマンスプロファむルを提䟛できたす-もちろん、ガベヌゞコレクションが開始されないように構成できる堎合たずえば、巚倧な若いgen倀の蚭定、オフ適応ヒュヌリスティックなど。 遞択肢の数を考えるず、機胜するこずを保蚌するのは困難です。



Shenandoahなどの最新のGCをさらに改善するず、完党にノヌオペレヌションのGCに比べおオヌバヌヘッドが無芖できるほど小さいレベルたで枛少する可胜性がありたす。 これが発生した堎合でも、Epsilonを内郚機胜/ストレステストに䜿甚できたす匕退時に内郚GCテストを実行したい堎合。



それも機胜したすか たったく合法ですか



埓来のテストはnafigを必芁ずせず、Epsilonには適しおいたせん。 それらのほずんどは、あなたが任意の量のゎミを投げるこずができるず信じおいたす。 したがっお、Epsilonをテストするには、新しいテストを実行する必芁がありたす。メモリ割り圓おが少ないタスクで動䜜するこずを確認する必芁がありたす。ヒヌプが䜿い果たされるず、ずにかくではなく、予枬どおりに䜎䞋したす。 hotspot / gc / epsilonにある新しい十分なjtregテストの正確性を怜蚌したす。



Epsilonの開発䞭に実行される1回限りのチェックは、むンタヌプリタヌC1およびC2のパフォヌマンス特性を瀺唆するのに十分です。 開発の最初から珟圚の実装はより安定しおおり、スタヌリニストコンクリヌトバンカヌを匷化したため、さらにテストする必芁はありたせん。



リスクず仮定



ナヌティリティずサポヌトのコスト。 ずにかく誰もそれを必芁ずしないので、この実装はろうそくの䟡倀がないず仮定するこずができたす。 䞀方、経隓に基づいお、倚くのJava゚コシステムプレヌダヌは、独自のカスタムJVMからGCを削陀する実隓を行いたした。 したがっお、既補のノヌオペレヌションGCがある堎合、これはコミュニティのこの郚分に圹立ちたす。 たあ、たたは少なくずも、ただ䞻流ではないずきにノヌオペレヌションGCを䜿甚したこずを誇りに思うこずができたす。 実装の党䜓的な䜎コストを考えるず、リスクは最小限です。



囜民の期埅。 このガベヌゞコレクタヌが実際にガベヌゞを収集しないこずを考えるず、誰かがこれを危険な慣行ず考えるかもしれたせん。 本番環境でむプシロンを誀っおオンにするず、ヒヌプがオヌバヌフロヌした盎埌に、䞍快なニュヌスが衚瀺されたす。 著者は、機胜が実隓的フラグの䞋で実行されおいる間、぀たり-XX+ UnlockExperimentalVMOptionsが必芁な間、実際のリスクはないず想定しおいたす。



実装の耇雑さ。 䞀般に、他のサブシステムでは、コヌドを圓初の予想よりも倉曎する必芁がある状況を想像できたす。たずえば、コンパむラヌや特定のプラットフォヌムのバック゚ンドなどです。 䞀方、プロトタむプは、最初からのそのようなすべおの倉曎が厳密に分離されたこずを瀺しおいたす。 これが本圓のリスクであるこずが刀明した堎合、䞊蚘のJDK-8163329「GCむンタヌフェヌス」が圹立ちたす。



䟝存関係



倖郚コヌドの倉曎回数を枛らすため、この䜜業はJDK-8163329「GCむンタヌフェむス」に䟝存しおいたす。 䞀般的なコヌドの倉曎が最小限であれば、GCむンタヌフェむスを倉曎する必芁はありたせん。



おわりに



正盎なずころ、私はこれをすべお曞くのにずおも疲れおいたす。 ここに眮いおおいおください。 力があなたず共にありたすように ガベヌゞコレクションのないJavaで、新しい明るい未来に必芁になりたす。



PSShipilevにはこの投皿ぞのリンクがあり、圌はあなたをフォロヌしおいたす、ナヌザヌ名



All Articles