「OracleよりもJavaをテストできたす」-OdnoklassnikiのAndrei Panginのむンタビュヌ

今日、私はあなたのためにOdnoklassnikiのトップ゚ンゞニアであるAndrey Pangin別名apanginずの玠晎らしいむンタビュヌを準備したした。 Andreyは、HotSpotチヌムを含め、6幎以䞊Sun MicrosystemsでJVM゚ンゞニアずしお働いおいたした。たた、過去5幎間、Odnoklassnikiで働いおおり、そこでJVMずパフォヌマンスに関連する問題を解決しおいたす。 アンドレむはロシアで最も匷力なJVMの1぀ず考えられおいたす。



Andreyはシステムプログラミングの専門家であり、ストレヌゞシステムず情報転送システムに埓事しおいたした。 圌はOdnoklassnikiポヌタルの基瀎ずなるレンガを積み䞊げ、サヌビスの信頌性ず速床を提䟛したした。

Andreiず話をしたのは次のずおりです。



開始が遅れおいるこずは知っおいたす。より速く揺れ動き、トピックを入力するように努力したす。

むンタビュヌのカットオフトランスクリプトの䞋で、再びビデオを芋る時間がない人のために。

Java 7からJava 8ぞの移行に぀いお


-倪陜の䞋で働き、Javaを内偎から芋お、Odnoklassnikiに切り替えたずきに、クラむアント偎から芋お始めたした。 アプリケヌション開発者ずしおJava 6、7、8を芋たこずがありたすか たずえば、JDK 8はJDK 7よりも明らかに優れた補品であるず感じおいたすか

-すべおのバヌゞョンにバグがあり、すでに䜿甚されおいたす。 JVMが非垞に耇雑なシステムであるこずは明らかです。 たた、特定のシナリオでJITコンパむラがどのように機胜するかを事前に予枬するこずさえできない堎合がありたす。 最も重芁なこずは、すべおの人のためにこれに取り組んでいるポヌタルの99があり、2013幎以降、倧きな䜎䞋はありたせんでした。 したがっお、Javaに満足しおいたす。

-Odnoklassnikiの䜕パヌセントが、秘密ではないずしおも、Java 7で動䜜したすかたた、Java 8で動䜜したすか

-Java 6にもシステムがありたす。幞いなこずに、それらはほずんどありたせん。 䜕幎も再起動しないサヌビスがありたす。 それらをアップグレヌドする意味は䜕ですか 仕事ず仕事。 そのため、珟圚起動しおいるものはすべお新しく、すぐにJDK 8で起動したす。これらのサヌビス倚くの堎合デプロむされるサヌビスは、すでにほがすべおがJDK 8に移行しおいたす。 そしお毎週新しいものが翻蚳されたす。

-Java 7からJava 8に移行する際の困難は䜕ですか

-驚くべきこずに、Java 6からJava 7に移行したずきよりも、Java 7からJava 8に移行したずきの問題がはるかに少ないこずがわかりたした。 Unicodeサポヌトの倉曎などでした。

Java 8に切り替えたずき、そのような問題はありたせんでした。 しかし、JITコンパむラのバグに遭遇したした。

䞀般に、時々、䜕らかのバグがある堎合、私たちは確かにそれに出くわすように思われたす。Oracle自䜓よりもJavaをよりよくテストできるほど倚くのサヌバヌずそのような負荷があるようです。

たずえば、本番環境でマルチレベルコンパむルを無効にしたした。これは、Oracleのスタッフが熱心にやったこずです。C1コンパむラに重倧なバグがあるため、すぐにC2でコンパむルしたす。

-ただこのバグを修正したしたか

-はい、JDK 8u60が問題を解決したようです。 JITコンパむラヌでは、オラクルのスタッフが問題を非垞に迅速にクリヌンアップしたす。 しかし、重倧な脆匱性がありたした。仮想マシン党䜓をクラッシュさせる単玔なJavaコヌドを曞くこずができたした。 ちなみに、バヌゞョン8u40では、コンパむラヌで2぀のバグが修正され、私が提出たずめた-著者のメモ。

仮想化、安党でない、クラスメヌトに぀いお


-そしお、システムずしおのOdnoklassnikiプロゞェクトの倧きさは サブシステム、レむダヌはいく぀ありたすか

-たくさん。 箄200のモゞュヌルず、それぞれ最倧数の1䞇個のJavaクラスファむルがありたす。 2004幎に䜜成された゜ヌスコメントで芋぀けるこずができたす。 しかし、ご存知のように、OdnoklassnikiはCで始たり、その埌数か月の忙しい日ず眠れない倜に数人のチヌムがすべおを曞き盎したした。 ぀たり、Odnoklassnikiの以前のバヌゞョンには䜕も残っおいたせん。

-珟圚、Odnoklassnikiは高負荷のJavaプロゞェクトであり、ロシア最倧のJavaプロゞェクトです。 䞖界には倚くの同様のプロゞェクトがありたすか

-トラフィックに関しおは、Alexaによるず䞖界のトップ100に入るこずを知っおいたす。 そしお、ロシアでは、今、7番目です。 Javaプロゞェクトの䞭で、おそらく最倧のプロゞェクトの1぀です。

-VKontakteずFacebookは、倧郚分がPHPコヌドを倚く持っおいたため、PHP甚の仮想マシンをリリヌスしたした。 この仮想化の傟向はどこから来たのですか

-仮想化は䟿利です 広い意味では、より銎染みのあるレむダヌで䜜業するこずができたす。 最終的な開発者は、アヌキテクチャのどのマむクロ呜什が倉換されるか、およびプロセッサでどのように凊理されるかに぀いお心配するべきではありたせん。

-2012幎に、アンセヌフに぀いお倚くのこずを話したした。 そしお今、おそらく、怠zyな人だけがJavaパヌティヌのUnsafeに぀いお語っおいない。 安党でないプログラミング手法を促進したこずに぀いおあなたを責めたいです。

-私はそれらを宣䌝したせん-私はそれらを䜿甚したす 必芁なものがすべおJavaにあるわけではないからです。

Javaはもずもずハヌドりェアに䟝存しないプラットフォヌムずしお考えられおいたした。䞀床曞いお、奜きな堎所で実行したす。 しかし、ここではOdnoklassnikiにあり、64ビットLinux、Intelプロセッサですべおを実行しおいたす。Javaのこのような移怍性は必芁ありたせんが、オペレヌティングシステムず実行するハヌドりェアの機胜を最倧限に掻甚したいず考えおいたす。 そのためには、オペレヌティングシステムの奥深くに抜け穎を掘る必芁がありたす。

ここでは、ちょっずした䟋です。 たくさんのキャッシュがありたす-䞀般に、Odnoklassnikiが持っおいる8,000台のサヌバヌのうち、ほが半分がすべおの皮類のキャッシュです。 そしお、スナップショットが曞き蟌たれるず、RAMのデヌタがディスクにダンプされたす。 これが玔粋にJavaによっお行われた堎合、メモリ消費量は倧幅に増加したす。 そしお、Linux固有のヒントだけを圌女に䌝えるこずができたす。「このデヌタをキャッシュしないでください。近い将来必芁ありたせん。」

「これは単にLinuxを蚭定するだけではできないのですか」 アプリケヌションに入る理由を理解できたせんでした。なぜこのペンが暪にあるのですか

-Linuxの堎合、すべおが同じですJavaファむルが曞き蟌むもの、システム内の他のプロセス。 プログラマヌ自身がキャッシュしたいものを区別する必芁がありたすが、これは違いたす。 したがっお、むニシアチブはアプリケヌションの偎から行う必芁がありたす。

高負荷に぀いお


-Odnoklassnikiのどの郚分が最も負荷が高いですか

-最もロヌドされおいるのは、ナヌザヌがメむンペヌゞにアクセスしたずきにニュヌスフィヌドずしお開くリボンサヌビスです。 ここでは、異なる゜ヌスからのデヌタがそれぞれ収集されたす。

別の䟋は、「友情」、ニュヌス、メッセヌゞ、ギフトに関するプッシュ通知の即時配信です。 サヌバヌごずに1秒あたり最倧50,000件の芁求がありたす。

䞀郚のプッシュ通知は、実際には長いポヌリングで実装されおいたす。クラむアント偎からの長いhttp芁求があり、10分間たたはデヌタが到着するたでハングしたす。 たた、バック゚ンド偎には、い぀、どこで、どのフロント゚ンドでどのナヌザヌが座っおいるかを知る個別のサヌビスがありたす。 ぀たり、モバむルデバむス䞊、Webバヌゞョンのポヌタル䞊など、耇数のクラむアントを開くこずができたす。 あなたが理解するために、これらのマシンは玄千台ありたす。

-これは、8000台すべおのサヌバヌのかなりの割合であるこずがわかりたした。 たずえば、なぜWebSocketを䜿甚しないのですか

-WebSocketずは異なり、ロングポヌリングはほがどこでもサポヌトされおいたす。 もちろん、叀くお叀いブラりザもありたす。 たずえば、Internet Explorer 8。 しかし、すぐにそれを攟棄したいです。

正芏化ず非正芏化に぀いお


-゚ンタヌプラむズの䞖界では、通垞、倚くのJava EE、倚くのHibernate、Springなどがありたす。 どんな技術がありたすか

-ビゞネスロゞックのほずんどを担圓する最倧のモゞュヌルの1぀は、埓来odnoklassniki-ejbず呌ばれおいたす。 しかし、実際には、EJBから今日たで、たったく䜕も残っおいたせんでした。 私は昚幎、このタスクを蚭定したした-プロゞェクトからEJBをカットするため。 3日間のハッカ゜ンがあり、通垞は十分な時間がないプロゞェクトを開発者が自分で遞択するこずができたした。 それで、メむンモゞュヌルから゚ンタヌプラむズを完党に削陀するこずにしたした。 そしお今、それは通垞のJavaアプリケヌションです。 行くぞ

Spring-Springに関しおは、たくさんありたす。

「Hibernateはどうですか」

「いや、いや、圌じゃない」 どのリク゚ストずどのように実行するかを非垞に正確か぀完党に制埡する必芁がありたす。 システムの䞀郚、ストレヌゞの䞀郚は、埓来はMicrosoft SQL Serverに残っおいたしたが、珟圚ではたすたすNoSQL゜リュヌションに移行しおいたす。

SQLデヌタベヌスが負荷に察凊するには、倚くの機胜を攟棄する必芁がありたす。 特に、結合、トリガヌ、ストアドプロシヌゞャは䜿甚したせん。

-぀たり、生埒は「正芏化」するように教えられ、それから圌らはあなたに来お、「非正芏化」ず蚀いたすか

-そのようなもの、はい。 もちろん、SQLサヌバヌからビゞネスロゞックサヌバヌに負荷を転送できる堎合は、それを転送したす。SQLサヌバヌが動䜜するプロセッサの容量に察しお料金を支払うからです。

-なんで そしお、joinの䜕が問題になっおいたすか

-分散およびパヌティションデヌタベヌスがありたす。 各サヌバヌに1/16のデヌタがある堎合、どのように参加したすか

-シャヌディングを備えた最新のシステムはうたく機胜したせんか 確かに、いく぀かの優れた゚ンタヌプラむズのようです...

-実際、䌁業ず呌ばれるものはすべお、私たちの負荷では機胜したせん。 はい、それは負荷がより䜎いが、信頌性のためのより深刻な芁件である銀行セクタヌ、他のどこかでそれ自身をよく瀺しおいたす。 たた、倚くのシステムでの結果敎合性にも満足しおいたす。たずえば、プロフィヌル写真を倉曎したこずを友人がすぐに確認できるなど、違いは䜕ですか

゚ンゞニアリングの劥協、シャヌディング、優れたガベヌゞコレクタヌに぀いお


-䞀般的に、私はトレヌドオフのトピックが本圓に奜きです。 これに぀いお話したしょうか オドノクラスニキには䜕がありたすか パフォヌマンスが最も重芁であるこずを理解しおいたす。

-䜕らかの方法で、フロント゚ンド開発者であっおも、生産性に぀いお考える必芁がありたす。
ここに2぀のリストがありたすが、どうにかしおそれらを1぀に結合する必芁がありたす。

はい、簡単な2次アルゎリズムを曞く方が簡単です。 しかし、あなたのサヌビスが人気を獲埗し、成長するこずを知ったずき、リストは1䞇ず10䞇の芁玠になりたす...あなたは考え始めたす。 結局、二次アルゎリズムは遅くなりたす。

-しかし、他のチヌムはおそらく異なる優先順䜍を持っおいたす。たずえば、パフォヌマンスですか たた、結合がないずいう事実デヌタが非正芏化されおいる堎合、倚くのディスク領域が無駄になっおいたすか

-どこで、どのように。 繰り返したすが、これはトレヌドオフです。 非正芏化しお同じテヌブルのフィヌルドに盎接栌玍するず、少しスペヌスが必芁になるこずが予想されたす。 たたは、ビゞネスロゞックの偎で参加したす。 IDを取埗し、それらに乗っお他のサブシステムに入りたす。

シンプルでわかりやすい䟋を挙げたいず思いたす。名前、アバタヌなどを含むすべおの友達のリストを取埗する方法は 最初に、接続グラフの別のサブシステムにリク゚ストが行われ、IDによっお友人のIDが取埗されたす。 リンクグラフには、ID以倖の情報は含たれなくなりたした。 IDの配列を受け取ったので、ナヌザヌキャッシュの2番目の芁求を既に実行しおいたす。これらのIDによっおナヌザヌに関する情報を取埗したす。

もちろん、このデヌタは網掛けされおいたす。 リモヌト凊理モゞュヌルに実装された䞀皮のMapReduceがありたす。぀たり、システム自䜓がシャヌドによっおリク゚ストを分散し、それらを䞊列に実行しおから収集するこずができたす。 キヌは、保存されおいるシャヌドを知っおいたす。

-あなたが説明したシナリオでは、少なくずも2぀のリク゚ストを䜜成したしたが、それらはすべお䜕らかの圢で内郚で非垞に高速に実行されるはずです。 これは内郚ネットワヌクぞの呌び出しであり、1぀のサブシステムが別のサブシステムに倉わるため、ネットワヌクは䞀床に倧量にゞャンプしたす...このような呌び出しのチェヌンでは、倚くのネットワヌク芁求が発生したす。

-もちろん。 しかし、実際には、Ajaxリク゚ストの平均埅機時間は5ミリ秒です。 これは、ナヌザヌからフロント゚ンドに移動するチャネルをカりントしおいたせん。 ぀たり、これはポヌタル内の時間です。 5ミリ秒が病院の平均であるこずは明らかです。 50ミリ秒のリク゚ストがあり、非垞に短いリク゚ストがありたす。

「぀たり、パヌセンタむルずは䜕だず思いたすか」 90幎代

-90番目。 理解するために、同じデヌタセンタヌのサヌバヌぞの1぀のリモヌトリク゚ストには300マむクロ秒かかり、もう1぀のデヌタセンタヌのサヌバヌぞの1ミリ秒かかりたす。 ガベヌゞコレクションが発生するこずは明らかです。100ミリ秒ず200ミリ秒がありたす。 しかし、それらはたれです。 GCの長い䞀時停止に苊劎しおいたす。 ほずんどのシステムでは、1秒の䌑止がすでに重芁です。

-どのGCが䜿甚されおいたすか

-ほずんどの堎合、適切に調敎されたCMS。 䞀般に、Garbage-Firstよりもうたく機胜したす。 ただし、ここでもG1が䜿甚されたす。たずえば、応答時間を保蚌するためにSQLサヌバヌを眮き換えるようになったNewSQLの自己蚘述゜リュヌションで䜿甚されたす。

぀たり、平均しお、G1はあいたいなCMSよりも少し悪い動䜜をしたすが、同時により倚くの保蚌を提䟛したす。 たずえば、CMSには平均で50ミリ秒の遅延がありたすが、最倧で300〜400ミリ秒に達するこずがありたす。 そしお、G1はおそらくより頻繁に収集し、平均で最倧150ミリ秒の䌑止がありたすが、200ミリ秒の制限が䞎えられ、それに耐えようずしおいたす。

「Javaが䜕であるかを倧たかに想像しお、次のコマンドを実行するず理解できたす。「G1、200ミリ秒の䞀時停止」を実行しおください」実際には200ミリ秒はありたせん。 より正確には、そうなりたすが、ある皋床の確率がありたす。 ガベヌゞコレクションは、これらの条件付き200ミリ秒からどれくらいの頻床でクロヌルしたすか

-めったにありたせん。 驚くべきこずに。 JDK 8u40以降、G1は優れたコレクタヌになりたした。 以前に完党なアセンブリなしで未䜿甚のクラスをアンロヌドするこずさえできなかった堎合、このバヌゞョンからすでにかなりの生産品質を持っおいたす。

-JDK9では、Garbage-Firstがデフォルトのコレクタヌになりたす。 JDK9は1幎埌の2016幎9月にリリヌスされたす。 Java 9にアップグレヌドしたすか

-最も可胜性が高いのは、G8のサポヌトが終了したずきに曎新を受け取るためです。 実際、これはJava 7で起こりたした。新しい曎新を受け取りたいので、Java 7から移行し始めたした。 JDKコンパむラのかなり重芁な修正をバックポヌトするためにJDK7のバヌゞョンにパッチを圓おる必芁があり、JDK8でのみ修正されたした。

-そしお、いく぀かの条件付きAzulを採甚しおみおください。Azulは、バックポヌトず叀いJavaのサポヌトに埓事しおいるビゞネスの倧郚分を占めたした。

-私たちを犠牲にしおアズヌルを獲埗する機䌚を䞎えるために :)ポむントは䜕ですか 珟圚、これに察凊できる専門家がいたす。

Javaパフォヌマンスに぀いお


-長い間、JDK、JREのパフォヌマンスの突砎に関するニュヌスはありたせんでした。 たた、あるバヌゞョンに切り替えた埌、生産性が倧幅に向䞊したずいうこずはありたしたか

-単に亀換バヌゞョンを䜿甚するようなものはありたせんでした。

-この理由は䜕ですか 明日、JITでクヌルな最適化がリリヌスされ、20のパフォヌマンスが埗られる可胜性はありたすか

-この確率はれロに近いです。 興味深い最適化が行われたすが、最近ではベクトル化がサむクルで行われおいたす。

-敎数による加算ず乗算 それは簡単なこずのように思えたす...

-はい、ルヌプ内の配列を䜿甚した敎数挔算に぀いお説明しおいたす。 今でも、これは垞に機胜するずは限りたせん。 しかし、少なくずも最適化はすでに存圚したす。 ぀たり、これらの最適化はすべお、数パヌセント、ほんの数パヌセントを提䟛するだけです。 急激なゞャンプに぀いおは話しおいたせん。

-セキュリティに関する質問。 2012幎たで、Javaのモットヌは「Compatibility-First」でした。 2012幎以降、「セキュリティファヌスト」になっおいたす。 それで、ポヌタルずしお、あなたは䜕ずかこれを感じたしたか

-たず、問題はJVMのクラッシュを匕き起こすバグです。 それ以倖の堎合、Javaの脆匱性を知っお、ハッキングされた䟋はありたせん。 APIにある皮の穎を芋぀けるのははるかに簡単です。

ストレヌゞずCassandraに぀いお


-Javaから離れお、ストレヌゞシステムに぀いお話したしょう。 どのように機胜したすか どのファむルシステムが䜿甚されおいたすか

-倚くの非垞に異なる自䜜ず暙準の䞡方。 今日、おそらく最もカサンドラベヌスのリポゞトリ。

-なぜたさにカサンドラなのか

-その他は単に機胜したせん。fileloverはありたせん。ほずんど手動で耇補できたす。 そしお、耇補は重芁なビゞネス芁件です。 デヌタセンタヌの1぀に障害が発生した堎合でも、ポヌタルの機胜党䜓が完党に機胜するように努めおいたす。

-そしお、合蚈デヌタセンタヌはいく぀ありたすか

-3。 たた、クラッシュした堎合でもナヌザヌはログむンできたすが、䞀郚のサヌビスは利甚できたせん。 䞻芁なサヌビスで信頌性を確保するための䜜業を開始したしたが、珟圚はテヌルのクリヌニングを行っおいたす。

-3぀のデヌタセンタヌを持぀分散システムぞの移行プロセスに぀いお教えおください。 それはどのように機胜したすか


-ラむブラリ、リポゞトリ、およびツヌル自䜓は、プラットフォヌムチヌムによっお䜜成されたす。 たずえば、重いコンテンツ写真、ビデオ、音楜の堎合、内蔵ストレヌゞが䜿甚されたす。 最近、EMCの同僚がオフィスに来おくれたした。圌らは情報ストレヌゞの分野での゜リュヌションで知られおいたす。 圌らは決定に぀いお話し、経隓を共有したした。 しかし、刀明したように、圌らは私たちがすでに持っおいるものず比范しお新しいものを提䟛するこずはできたせん。

-はい、EMCは面癜い人です。 ずころで、あなたの意芋では、Odnoklassnikiの技術的な専門知識は䜕ですか ワヌルドクラスの経隓はありたすか

-最初に思い浮かぶのは、カサンドラです。 私たちはこれに密茞し、珟圚のCassandraマスタヌブランチにあるものず比范しお垞に先を行っおいたす。 そこに䜜成されたばかりのグロヌバルむンデックス-既に䜿甚されおおり、完党に䜿甚されおいたす。

たた、掚奚システムの専門知識も豊富です。 圓初、音楜の掚奚システムがありたしたが、珟圚では他の倚くのサヌビスビデオ、グルヌプに既に接続されおいたす。 ポヌタルの䞻なタスクは、興味のあるコンテンツを人々に芋せるこずであり、興味のないコンテンツを芋せるこずではありたせん。 これにより、ナヌザヌはOdnoklassnikiで長くハングアップするようになりたす。

もちろん、JVMの匷力な専門知識がありたす。

-そしお、あなたの意芋では、どこに専門知識が必芁ですか、今日䜕が欠けおいたすか

-画像認識の芳点から。 Googleから孊ぶこずはたくさんありたす。

-私が理解しおいるように、ストレヌゞ、配垃、およびキャッシュに関連するすべおを行う特定のプラットフォヌムチヌムがありたす。 たた、ラむブラリ、API、サヌビスの圢匏で他のチヌムに䜜業を提瀺したすか


-たさに。 既補の゜リュヌションを提䟛したす。 ただし、別のチヌムの開発者は、もちろん、いく぀かの機胜を知っおいる必芁がありたす。どの芁求が軜いか、どれだけ重いか、䜕ができるか、できないかを理解するためです。

-これをjavadocの圢で圌に説明したすか、そうでなければこの知識を䌝えたすか

-これらの決定の著者が講矩やセミナヌを実斜する堎合、このような慣行がありたす。 それほど頻繁ではありたせんが、䞻に初心者向けですが、経隓豊富な開発者は原則ずしお、新しいこずを孊ぶこずができたす。

たた、コヌドレビュヌの手順もありたす。ある人が私の決定を䞋し、それに基づいお䜕かを構築した堎合、埌で私に来お、「アンドレむ、ここで倧䞈倫ですか」ず尋ねるでしょう。どこで䜕を修正するか。

-そしお、APIを誀っお䜿甚できないようにするために䜕をしおいたすか

-個人的には、この点ではあたりうたくいっおいたせん。できるだけ簡朔でシンプルなコヌドにするようにしおいたす。 そしお、あなたがそれを誀っお䜿甚する堎合-あなたは「自分自身に悪、ピノキオ」です-それを行う方法を理解するためにドキュメントや講矩を参照しおください。

-しかし、ドキュメントは原則ずしお最新ですか

-はい、リモヌティングずシリアル化に関する詳现なFAQを曞いたこずがありたす。

私たちは単に独自のシステムを䜿甚したす䞀時停止サヌビスなしでオンラむン曎新を行うこずができ、新しいバヌゞョンのクラスのバヌゞョンがポヌタルの䞀郚で動䜜し、もう䞀方の叀いバヌゞョンで動䜜しおいる状況を解決するために、䞀床にJBoss Remotingに切り替えたした。

それでも、圌らが私のずころに来お、「どうやっおそのようにシリアラむズされるのでしょうか」、「そのような倉換を行うこずは可胜ですか」

-しかし、JBoss Remotingはその方法を知りたせんか それずも悪化しおいたすか

-暙準のシリアル化よりもさらに悪い。 いく぀かの倉曎をサポヌトしおいたすが、限られた範囲内で、フィヌルドを削陀したり、新しいフィヌルドを远加したりできたすが、デフォルト倀で初期化されたす。

そしお、ここで、型をintからlongに倉曎しおみたしょう。 フラグフィヌルドがあり、32がありたせんでした-64ビットフィヌルドに倉曎されたした。 これは兞型的なケヌスですが、暙準のシリアル化ではサポヌトされおいたせん。



クヌルなシステムプログラマになるには


-Javaプラットフォヌム自䜓ずその䜎レベルの詳现に興味がある人を探すには、どこを読むこずをお勧めしたすか

-JVMずHotSpotの内郚に぀いおは、䞀郚のサヌドパヌティの゜ヌスではあたり蚘述されおいたせん。 幞いなこずに、これはオヌプン゜ヌス補品です。ダりンロヌドしお参照できたす。 HotSpotコヌドには、コヌド自䜓よりも倚くのコメントがある堎合がありたす。

-これはほずんどC ++ですよね

-はい。 さお、JVM仮想マシンの動䜜には䞀般的な抂念がありたす。 ここでは、サンクトペテルブルクのJUGでOleg Plissによる玠晎らしい䞀連の講矩をご芧になるこずをお勧めしたす。

-たぶん、あなたはもういく぀かの本を助蚀するでしょうか

-私は本に助蚀したせん。 StackOverflowで質問する方が良いでしょう。 私も今そこに座っおいたす、そしおあなたは私に尋ねるこずができたす。

そこでJVMずJavaパフォヌマンス関連の質問にサむンアップし、重芁な質問に定期的に回答したした。 そしお時々、私自身がそこから䜕か新しいこずを孊びたす。

もちろん、䞍十分な質問ず回答がたくさんありたすが、これには異なるメカニズムがあり、評刀は同じです。 しかし、そこでは䞖界有数の専門家に䌚うこずができたす。定期的にブラむアンゲッツ自身がそこを芋お、䜕かに぀いおコメントしたす。

-そしお、Habr さお、あなたはめったにそこに曞きたせん。

-Habréのコンテンツの品質は埐々に䜎䞋しおいるように思われたす...そしお、私はJavaハブに぀いお話しおいるだけではありたせん。

たず、Habrがいく぀かのサブプロゞェクトに分割されたずいう事実に圱響したす。 したがっお、それぞれの芖聎者は枛少しおいたす。 第二に、コメントが1぀だけでは䞍十分な堎合、あなたは倱敗する可胜性がありたす-もちろん、さらに曞く動機は消えたす。

- 最埌の蚘事は、クラスロヌダヌの䞊列䜜業でデッドロックがどのように発生するかに぀いおです。 Googleのこのコヌドの䜜成者はこれを修正すべきだったず思いたすか、それずも「バグずバグ、誰もがバグを持っおいる」ず思いたすか

-圌らはそれを修正し、私たちはかなり迅速に信甚を䞎えなければなりたせん。 それは完党に自明ではないバグのクラスに属したす。 コヌドを芋るだけでは芋぀けるこずができたせん。

-本圓にこの静的アナラむザヌは远跡できたせんか このクラスはスヌパヌクラスであるずいう単玔なルヌルがあるように芋えたすが、このサブクラスは静的分析を䜿甚しお非垞に簡単に実行できたす。 基本的に、これは誰でもキャッチできるルヌルです。


-同意したす。 これたでのずころ、このようなルヌルはありたせんでした。 私たちの共通の友人lanyは、FindBugsに譊告譊告を远加するこずをすでに玄束しおいたす 。

「しかし、創造的な蚈画—レポヌト、蚘事、本—ただ持っおいたすか」

-たくさんのアむデアがありたす、私は倚くに぀いお曞きたいですが、十分な時間はありたせん。 JITコンパむラの内郚、完党に予枬䞍可胜な方法での動䜜、およびプルできる文字列の皮類に぀いおは、興味深いこずがたくさんありたす。

たた、シグナルを䜿甚しおLinuxを操䜜する方法を曞きたいず思いたす。 䌝統的に、シグナルぱラヌが発生した堎合にのみむンタヌセプトされたすが、HotSpot JVMはその内郚目的のためにシグナルに関連する倚くの興味深い瞬間を䜿甚したす。 これは、システム゜フトりェアにずっお非垞に良い方法です。 たずえば、Javaランタむムなど。




結論ずしお、い぀ものように、䟿利なリンク

Source: https://habr.com/ru/post/J259415/


All Articles