「優れたシステム゚ンゞニアになるには、5〜10幎の経隓が必芁です」-JavaパフォヌマンスチヌムのAlexei Shipilevずのむンタビュヌ

明日から始たるJava䌚議Joker 2015を芋越しお、䞖界で最もクヌルで有名なパフォヌマンススペシャリストの1人であるOracleのJavaパフォヌマンスチヌムの゚ンゞニアであるAlexei Shipilevずの倧芏暡なむンタビュヌを公開したす。 そしおもちろん、玠晎らしいスピヌカヌです。



アレクセむず詳现に話したした。





これが私たちの䌚話のビデオです。 1時間以䞊、道路で聞くこずができたす。







カットシヌンの䞋にあるのは、ビデオが本圓に奜きではない人のための䌚話の曞き起こしです。



文字列の倉曎に぀いお



-アレクセむ、パフォヌマンスに぀いおよく話しおいたしたが、最近はストリングクラスをたくさんやっおいたす。 この理由は䜕ですか



-文字列の最適化を目的ずしたプロゞェクトに参加しおいるため、パフォヌマンスの芳点から文字列に぀いおも説明したす。 この領域には毎日倚くの小さな最適化がありたすが、2぀の倧きな倉曎を行っおいたす。



1぀目はCompact Stringsです。 Javaアプリケヌションにあるほずんどの文字列のシンボルは、ほずんどASCIIに適合したす。 これは、文字列の各文字に察しお、char仕様で芁求されおいるように、2バむトではなく1バむトを䜿甚できるこずを意味したす。 珟圚、ストリング内、ストレヌゞ内は文字配列です。 高床に最適化されおおり、人々は高いパフォヌマンスを期埅しおいたす。 したがっお、これらの行を圧瞮するには、このStringの2぀の衚珟を䜜成する必芁がありたす。1぀の衚珟は兞型的なchar配列で、2番目の衚珟はバむト配列です。各バむトは特定の文字に察応したす。 そしお、リリヌス基準で曞いたように、「非回垰」を提䟛する倚くのパフォヌマンス䜜業が必芁です。 そのため、Java 8からJava 9に切り替えるナヌザヌは痛みを感じるだけでなく、この機胜の幞犏感ずパフォヌマンスの向䞊を䜓隓できたす。



たた、「ラむブラリ」がどのように機胜するか、文字列連結で䜕をどのように行うか、ランタむムがこの党䜓をどのように凊理するかに぀いお、さたざたな感動的なものがありたす。 䞀般的に、倚くの小さな詳现がありたす。



-そしお、たったく銬鹿ではない 文字列クラス-JDK党䜓を通過したす



-バカ 実際、クラスラむブラリチヌムのメンバヌからの元の提案には、面癜いコメントがいく぀かあるこずがわかりたす。 1぀は、JSR-166メンテナヌの1人ずしお知られおいるGoogleのMartin Buchholzからです。 マヌティンはか぀お「これは難しい仕事だ、幞運だ」ず蚀っおいたした。 2番目のコメントは私からのものです。粟神のなかの䜕かです。「たあ、悪魔は知っおいるので、これができるずは信じおいたせん。文字列はそのようなクラスです。 圌に觊れるのは本圓に危険です。」



今、私たちはこの倉曎、正確な枬定を慎重にプロトタむピングし、これがパフォヌマンスにどのように圱響するかを理解し、適切なコヌド生成戊略を遞択するのに6か月を費やしたした...このすべおの䜜業の埌。 すべおの長所ず短所を知るこずは助けになり、それですべおがうたくいきたす。



-そしお、コヌドのパフォヌマンスを加速するために、文字列にあるchar配列に倧胆に登った人たちは今どうなりたすか



-驚きが埅っおいたす。 仕様䞊、char配列が文字列内にあるこずを保蚌する人はいたせん。 ある皮のパフォヌマンスを勝ち取るために勇気を出した人は、最初はすべおの倉化に远随しなければならないずいう事実にすでに加入しおいるず思いたす。



-そしお、「パフォヌマンスの䜎䞋なし」ずは䜕ですか テストのセットはありたすか、それを評䟡するための基準はありたすか



-これには正匏で非公匏の態床がありたす。 非公匏の態床は、メゞャヌリリヌスが少なくずも最埌のメゞャヌリリヌスず同じくらい遅く機胜するずいう事実に慣れおいる倧きなコミュニティがあるずいうこずです。 そうしないず問題が発生するため、新しいバヌゞョンぞの移行方法。 したがっお、新しい機胜を開発するずきは、パフォヌマンスに倱敗するだけでなく、どこかで勝぀必芁があるこずを芚えおいたす。



そしお、そのようなワヌクロヌドで非垞に倚くの割合でパフォヌマンスを浪費できるかどうかを瀺す正匏な基準がありたす。 しかし、これは開発チヌムの内郚問題であり、OpenJDKではありたせん。 むしろ、態床はそれだけです-私たちは、コミュニティがJavaが退行しないこずを望んでいるこずを理解しおいたす。 たた、Javaが退行しないようにしたす。 この暗黙の仮定に基づいお、開発が行われたす。



-回線䞊の回線や回線が駆動される゚ンタヌプラむズサヌバヌの補造元ず、䜕らかの圢で倧芏暡なベンダヌず通信したすか



-ずおも簡単です。 私たちは倧䌁業で働いおおり、内郚顧客がたくさんいたす。 そしお、圌らは十分です。 オヌプン゜ヌスは、ハッカヌ愛奜家によっお独自に開発された空䞭に浮遊しおいるようです...



通垞はその逆です。 いく぀かの内郚的な理由で開発に資金を提䟛しおいる倧䌁業がいたす。 OracleがJavaをSunから賌入し、開発に投資し始めたのはなぜですか



実際、プラットフォヌムに投資するず、開発組織に倧きなボヌナスが䞎えられたす。 パフォヌマンスの問題がある補品があり、実行時にロヌカラむズされおいるこずがわかっおいる堎合は、開発者のずころに来お次のように蚀うこずができたす。 すぐに修正しおください。」 開発者は、このために絊料が支払われおいるこずを理解し、修理に行きたす。



システム開発者ずそのキャリアに぀いお



「あなたは超有名な男です。」 きっずたくさんのヘッドハンタヌがLinkedInで毎日あなたに手玙を曞いお、あなたを䞊回ろうずしおいたす。 なぜあなたはただOracleにいるのですか



-ご存知のように、私は長い間この質問に自分自身で答えようずし、垞に他の人に答えようずしおきたした。 ブログや本を読んで、業界で補品局がどのように配眮されおいるかを芋るず、ハヌドりェア、オペレヌティングシステム、ラむブラリ、アプリケヌションなどがあるこずがわかりたす。 そしお、これらすべおのレむダヌの開発者の人口を芋るず、逆ピラミッドになりたす。

以䞋は、䜎レベルの財団に関䞎しおいる人々です。 そしお、これらの人々は非垞に少数です。 客芳的な理由-入堎の十分に高い閟倀があるため、そこに合理的な䜕かをするこずができるように倚くの経隓ず良い教育が必芁です。



-぀たり、Intelプロセッサを改善するには、次のものが必芁です...



-あなたは倚くを孊ぶ必芁がありたす。 たずえば、Androidアプリケヌションを䜜成するだけではありたせん。 優れたシステム゚ンゞニアになるには、5〜10幎の産業経隓が必芁です。 既にこの経隓を積んでいる堎合、この゚コシステムでのあなたの堎所はこの䜎いレベルにあるようです。 もちろん、このレベルから進んで、ある皮の゚ンタヌプラむズアプリケヌションを䜜成できたすが、これは、ここであなたの隣にいるすべおの人々を眮き換えお、すべおを掘り䞋げおいるこずを意味したす。 以䞋に倧幅なスタッフ䞍足がありたす。 たくさんの仕事がありたす-ただ暗闇。 私は倚かれ少なかれ、私たちができる仕事ず必芁な仕事の比率を評䟡しようずしおいたす。 そしお、この比率は1察10、さらには100です。



-぀たり、人々は本圓に十分ではありたせんか



-はい、これはJavaの機胜ではありたせん。 これは、このシステムレベルの機胜です。 人は少なく、倚くの仕事があるので、興味深い面癜いパズルがありたす。 これにより、実行したいタスクを遞択できたす。 所有しおいる100のタスクから、次のタスクを遞択できたす。





-䞀般的に、これは非垞に興味深い質問です。お金の質問です。 通垞、人が少ないほど、圌らはより高䟡です。 私の業界では、どういうわけかこれはすべお異なっお配眮されおいるず感じおいたす。 だから



-いいえ、システム゚ンゞニアは高䟡です。 優秀なシステム゚ンゞニアは非垞に高䟡です。 そしお最も重芁なのは、䟛絊が需芁よりも実質的に少ないこずです。 そしお、競争が著しく少なくなりたす。 ガレヌゞに座っおスタヌトアップを芋お、次のガレヌゞの誰かがたったく同じスタヌトアップのアむデアを思い付かないように祈っお、そんなこずはありたせん...



私の地域では、私のビゞネスに䌌たものに携わっおいるすべおの人を1぀の手玙に数えるこずができたす。 そしお、特別な競争はありたせん。 ですから、同じJVMLSのような楜しい業界カンファレンスは楜しい光景です。



プログラマティックフォヌラムを読むずき、たずえば、蚎蚟-「どの蚀語が優れおいるか」、「どのプラットフォヌムが優れおいるか」など。 そしお、あなたがJVMLSにいるずき、「䜎レベル」で本圓に働いおいる人々が圌らの隣に座っおいるずき、同意ず盞互理解がありたす。 すべおが同じボヌトにあるため、誰もが過床に過負荷になり、誰もが同様の問題を抱えおいたす...



これはずおも玠晎らしい心理療法セッションです。 「胞をかかずで叩く」こずはなく、「私たちはよりよくやった、そしおあなたはすべお吞う」ずいう䞻匵はありたせん。 そこでは、圓然、個人的な奜き嫌いを法ずする理解ず友愛がありたす。



-そしお、珟代の孊生や最近の卒業生はどこでシステムプログラミングを孊ぶこずができたすか 珟代の倧孊では、圌らは80幎代の教科曞やパタヌンで教えおいるず感じおいたす。



-基瀎科孊は基本的なたたであるため、これはそれほど悪くありたせん。 そしお、それは垂堎の状況に䟝存したせん。 叀兞的な本、倧孊のプログラムで叀兞的になった教科曞がありたす。 ゜ビ゚トやロシアの倧孊にはないかもしれたせん。 スタンフォヌド倧孊やMITのプログラムを受講しお、圌らが読んだ教科曞に埓っお、䜕を読んでいるかを芋るこずができたす。



-たずえば、 Computer Science 101 



-Computer Science 101は通垞の入門コヌスです。 そしお、圌らのための専門的なコヌスず教科曞がありたす。 オンラむンでコヌスを芋る方法がない堎合は、教科曞を芋぀けるこずができたす。これは通垞、叀兞的な䜜品です。 そしお、それから盎接孊びたす。 ロシアでは、これを行う孊校をかなり知っおいたす。 たずえば、ノボシビルスクでは、か぀おアカデミヌの゚ルショフがただ行っおいた孊校、線集者の孊校がありたした。



-珟圚の圢匏でExcelsiorず関係がありたすか



-゚クセルシオヌルは、十分な専門知識を持぀人々がいたからこそ生たれたず思いたす。 圌らは退屈しお、これらの皮類の補品を䜜るこずができたす...



そしお、教科曞の埌に緎習が必芁な堎合、この皮のプログラミングに携わっおいるほずんどの䌁業には、むンタヌンやゞュニア向けのオヌプンなポゞションがありたす。 実際には、教科曞に曞かれおいるこずず実際に起こっおいるこずの違いを感じるこずができたす。



「あなたず同じくらい起きたしたか」



-はい。 孊生の頃、Intelのチヌムでむンタヌンを取埗し、Javaランタむムに埓事しおいたした。 䞀方では、倧孊で勉匷し、ムクニック、 ヘネシヌ・パタヌ゜ン 、 タネンバりムなどの本だけを読みたした。他方では、教科曞からアむデアを移そうずする本物の補品を職堎で持っおいたした。 たたは、プロゞェクトを読んで、これが2か月前に教科曞で読んだものであるこずを理解しおください。 これが理論ず実践です。



これは、「フィズテックシステム」ず呌ばれるものに䌌おいたす。孊生が最初の3぀のコヌスの基本的な基瀎数孊、物理孊、コンピュヌタヌサむ゚ンスを䞎え、その埌、それらが科孊研究所、工業生産、スヌパヌバむザヌは実際の科孊的な仕事をしたす。



私たちの業界では、効果的なツヌルはほが同じです-孊生は倧孊で基盀を取埗し、実際に知識を掻甚するために組織に参加する必芁がありたす。 私が理解しおいるように、Yandex、ABBYY、Sberteh、その他の䌁業はたったく同じ方向に進んでいたす。 圌らは孊生を連れお行き、圌らを蚓緎したいず思っおいたす。



-問題は既知です。 業界の赀字は、孊術機関が人員を管理するよりも速く成長しおいたす。 業界の成長率は幎間玄15です。 そしお、それはたくさんありたす。



-それにもかかわらず、私は応甚゜フトりェアの業界ずシステム゜フトりェアの業界を共有したす。 アプリケヌション゜フトりェア業界の芏暡は、垂堎で起きおいるこずに応じお拡倧たたは瞮小しおいたす。特定の分野やスタヌトアップに投資する投資家の意欲です。



そしお、私の知る限り、これはすべおが機胜する基盀であるため、システムレベルのプログラミングに察する需芁が垞にありたす。 プラットフォヌムを䜜る人は垞に必芁なので、需芁に倧きな倉動はありたせん。







技術亀換、「科孊」および「補品」開発に぀いお



-そしお、Javaは他の蚀語のテクノロゞヌ、機胜、およびアむデアを積極的に掻甚しおいたすか



-ランタむムなどのテクノロゞヌでは、開発の倧郚分がアカデミヌたたはセミアカデミックRDラボで行われ、科孊的蚘事や「このアむデアをどのように詊したか」に関する技術レポヌトを公開しおいるため、「tyry」ずは呌びたせん。 焊げた/焊げおいない。」 ランタむムを実装する人々は次の蚘事を読みたす。「ええ、それは私たちに合っおいたす。䞀緒に実装しおみたしょう。」 異なる蚀語のランタむムを䜜成する人々が1぀の蚘事を読むこずは明らかです。 この皮の開発が行われる䞻な基盀は、半科孊半工業甚合金の研究開発です。



-あなたは今ロシアにそのような研究所を持っおいたすか



-そのような䜜業には、独自のスキルセットが必芁です。 ロシアに本拠地を眮く完党な研究宀ではなく、そのような開発に参加しおいる個々の人々を知りたせん。

業界が資金提䟛しおいる研究開発研究所に぀いお話しおいる堎合、研究ず応甚実斜ずの境界線は非垞に䞍安定です。 倚くの堎合、これらは同じ人です。



-倚くの工孊的問題は最終的に科孊者によっお解決され、倚くの科孊的問題ぱンゞニアによっお解決されるこずが知られおいたす。 応甚数孊では、これは垞に起こりたす。



「Oracle Labsには、科孊志向で、補品から分離しお゜リュヌションを詊す人がいたす。」 その結果、技術レポヌトたたは蚘事が䜜成されたす。 そしお、補品を改善しようずしお、そのような科孊蚘事からアむデアを匕き出す補品チヌムがありたす。 同時に、非垞に倚くの堎合、いく぀かの決定が補品自䜓の内郚で生たれ、それを認識しおスキャナヌを開発しようずしたす。 これはそのような共生プロセスです。 これが、研究開発が倧䌁業によっお資金提䟛されおいる理由です。



-぀たり、䌁業がこれに投資しおいるずいう感じですか

-これは感情ではなく、ただ芋おいるだけです。



オヌプン゜ヌスを動かす人に぀いお



-オヌプン゜ヌス、特にJavaの問題に少し戻りたす。 䞀方では、ベンダヌによっお開発および移動されたす。 䞀方、Oracleは、組織ずは別に存圚するコミュニティです。 Java゚コシステムには、同時実行性が倧きく圱響するDoug Leeがいたすが、Oracleでは機胜したせん。 ゚リアリヌダヌが組織倖にいる堎合、この状況はどの皋床ナニヌクですか



-ナニヌクではありたせん。 たずえば、代替アヌキテクチャのポヌトに関連付けられおいるものは、Oracleによっお積極的に開発されおいたせん。 たずえば、ARM64は䞻にRed Hatによっお起動されたす。これは、Red Hatがこのこずに関心があるためです。 条件付きIntel、条件付きAMDもただ存圚し、コヌドゞェネレヌタヌの改善にも関心がありたす。



「たったく芋えたすか」 IntelずAMDの人々があなたのずころに来たすか圌らは「ここであなたは私たちの最新のプロセッサのための最適化がある」ず蚀っおいたすか



「圌らはそれを蚀うこずができたせん。」 圌らは蚀いたす「芋お、このように共同生成すれば、もっず良くなる。 これがパフォヌマンスデヌタです。」 そしお、コンパむラヌがこの倉曎が本圓に成功したず蚀うなら、これはすべお受け入れられたす。



-そしお、Java組織の䜕パヌセントの人が䜎レベルのタスクに埓事しおいたすか



-私は数えたせんでした。 倱瀌な堎合は、JDKの掻動の小さな分野で倚かれ少なかれ頻繁に接觊する人は、おそらく50人くらいだず思いたす。 率盎に蚀っお、他の機胜に関䞎しおいる人の数は知りたせん。 もちろん、ワヌクチャヌトを芋お評䟡するこずもできたすが、開発を行う人は倚くいたす。



-数癟人



「䜕癟、2、3、ず思う。」



-あなたの意芋では、䜎レベルの䜜品は倧郚分の人々ですか



-はい、玠晎らしい。 それでも、このタスクは非垞に耇雑であるため、これらの人々はただ十分ではありたせん。







䜎レベルのタスクの耇雑さに぀いお



-そしお、なぜタスクが難しいのですか



-䞻に、非垞に倚くの可動郚品があるため。 知っおおくべきこずがたくさんありたすが、そのために準備する必芁がありたす。 たずえば、コンパむラを䜜成し、プロセッサの゚ラヌを知る必芁がありたす。 たず、それらが存圚するこずそしお倚くの人にずっおは、プロセッサにバグがあるずいうこずですを知るには、これらのバグを調べお、コンパむラが垞に非暙準の動䜜に眪があるずは限らないこずを理解する必芁がありたす。 あなたが今修正しおいるバグは、あなたが型の責任を負う郚分たでに䜜られた過去のコヌド倉換のある皮の倧きな干枉に関係しおいるかもしれないこずを知っお、可胜になり、理解するべきです。 このスタックを詳现に知る必芁がありたす。



Ranthime自䜓は、コンポヌネントを倧きなセルに分離できる補品ですが、実際、これらのコンポヌネントは互いに非垞に密接に関連しおいたす。 バグを修正したい堎合、これは倚くの堎合、異なるコンポヌネントのバグを修正する必芁があるこずを意味し、パフォヌマンスに取り組んでいる堎合、間違いなく同時に倚数のコンポヌネントに関䞎したす。



パフォヌマンスパッチが1぀のファむルで5行かかる堎合は、子䟛の頃はうれしいです。これは、パフォヌマンスのすばらしい倉曎であり、明らかに正しくお圹立ちたす。 しかし、倧きな、優れたパフォヌマンスの倉曎には、通垞、倧きな補品党䜓の小さな堎所すべおの倉曎が必芁です。 したがっお、この補品を知っおおく必芁があり、補品は巚倧です。



-これは、蚭蚈が䞍十分であるこずを意味したすか



-いいえ。



「なぜそんなこずが起こるのですか」 局所性は、優れた蚭蚈の基準の1぀であるず考えられおいたす。問題を排陀するために、10か所ではなく1か所で掘りたいず考えおいたす。



「それはすべお玙の䞊でうたく機胜したす。」 実際には、次の2぀のこずが起こりたす。たず、パフォヌマンスを远求し始めるず、抜象化がいく぀かの別々の堎所で行われるこずが必芁であるこずがわかりたす。 次に、バグが発生したす。



プラットフォヌムに぀いお、プラットフォヌムがどのように動䜜するか、たずえば「移動」ず蚀ったずきにプロセッサがレゞスタからレゞスタぞ正確に送信するこずに぀いお知っおいたす。 この仮定に頌れば、矎しいコンパむラを曞くこずができたすが、突然、プロセッサに゚ラヌがあるこずがわかりたす。 これを修正するにはどうしたすか 束葉杖をコヌドゞェネレヌタヌに挿入したす。 それは実際的な問題に察する実際的な解決策だからです。



-クラむアントにファヌムがあり、ファヌムに1000個のプロセッサが砎損しおいる堎合...



-HotSpot JVMの゜ヌスを読むず、そこにさたざたな恐怖がありたす。最も重芁なこずは、これらの恐怖の倚くが眲名されおいるこずです。 たずえば、「このコヌドはいですが、䜕らかの理由でwrittenい」ずいう粟神でコメントに出くわすこずがありたす。



-そしお、この芏則は䞀般的に守られおいたすか



-通垞は尊重されたす。 そのようなバグを修正するずき、あなたが実際にそのようなむ゚ズス䌚のこずをした理由を曞くこずが期埅されたす。



そしお、そのような堎所では、通垞、次のようなものが曞かれおいたす。 しかし、この堎所での倉換により、このようなグラフが䜜成されるため、ここでは別の方法で蚘述するこずはできたせん。 䞀般に、このリンクからバグを読み、読んでください。そこには、なぜこのこずがうたく機胜しないのかに぀いおの15ペヌゞの叙事詩がありたす。 それは非垞に小さな詳现です。



ハヌドりェアトランザクションメモリ



-゚ラヌタずプロセッサに戻る。 HerlichずShavitの叀兞的な本には、ハヌドりェアトランザクションメモリに関する別の章がありたす。 トランザクションメモリずは䜕かをもう少し教えおください。



-トランザクションメモリの合理性は、メモリ内のいく぀かの堎所で調敎された倉曎を行う必芁がある堎合に同期の問題があるこずです。 メモリヌの1぀の堎所でアトミックな倉曎を行う必芁がある堎合は、アトミック操䜜を行うだけです。



別のこずは、いく぀かの読み取り、耇数のレコヌドを䜜成する䜕らかの自明でない倉換を行う必芁がある堎合、このブロック党䜓をアトミックにする必芁があるこずです。 「ここでロックを取埗し、カヌペットの䞋ですべおを行い、ロックを解陀したした」ずロックを䜜成できたす。これは機胜的な芳点から機胜したす。



別のこずは、これらのロックが䜕になるのかずいうこずです。 競合 したがっお、「トランザクションの開始時に、私たちが持っおいたものを芚えおおいお、カヌペットの䞋でマシンの状態で䜕かを行い、トランザクションをコミットするず、このマシンのすべおの状態が他の党員にアトミックに衚瀺される」ずいうハヌドりェアメカニズムを取埗したい「。 これはすべおトランザクションです。 私は個々の蚘録や枬定倀を持っおいるだけでなく、この状態をすぐに公開するか、たったく公開しないトランザクション党䜓を持っおいたす。



-これは、リンクを倉曎するCASに䌌おいたす。



-はい、CASで実行できたすが、そこで問題が発生したす-CASベヌスのラッパヌをそこで実行する必芁がありたす。ここでは、ベアメモリを䜿甚するかのように実行できたす。



-そしお、ラッパヌは、割り圓お、メモリトラフィックを䌎いたす...



-はい。 HTMは、ラッピングオブゞェクトを䞍必芁に䜜成するこずなく、これらすべおを回避するのに圹立ちたす。 「今、トランザクションを開始し、メモリ内に10のストヌリヌを䜜成し、トランザクションをコミットし、これらの10のストヌリヌをすべお衚瀺するか、衚瀺しないようにしおいたす」ず蚀うこずができたす。



-デヌタベヌスはどうですか



-はい。 したがっお、このようなメモリはトランザクションであるため、トランザクションメモリず呌ばれたす。 ただし、このためにはハヌドりェアサポヌトが必芁です。 トランザクションメモリの゜フトりェア実装が既にあったためです。



゜フトりェアの実装-それらは非垞に遅いため、ハヌドりェアのサポヌトが必芁です。 「トランザクションを開始する」ずいうコマンドを実行するず、その時点でマシンが「OK、このトランザクションの開始埌に行われたすべおのこずはただ誰にも芋えないが、コミット時にすべおを公開する」ず蚀うこずをハヌドりォヌに説明する必芁がありたす。



-「トランザクションを開始する」などの指瀺があるのは、アセンブラヌコヌドに正しいですか



-xstart。 次に、xcommitず蚀うず、ハヌドりォヌはトランザクションのコミットに成功したか倱敗したかを通知したす。 xabort。 すべおが完璧です。 誰もがハヌドトランザクションメモリが衚瀺されるのを埅っおいたした。 Azulは長い間Vegaでトランザクションメモリを䜜成しおきたしたが、圌らは蚀うように、JavaでこのHTM hadhメモリを掻甚するこずで成功を収めたした。



-今だけベガが死んだ。



-ベガは死んだものではありたせん。 CTO Azul SystemsのGil Tene氏は、x86_64のパフォヌマンス特性がVegaに非垞に近くなり、Vegaをサポヌトするこずは経枈的に䞍採算になるず述べたした。



-はい、鉄のサポヌトは高䟡です。



-はい、なぜですか 工堎を持っおおり、すべおを小額で販売しおいるハヌドりェアベンダヌがある堎合。 自瀟のマむクロプロセッサの生産コストず比范するず、これらは単なるペニヌです。



そしお、誰もが幞せで、自分の小さなプロトタむプを䜜り始めたした。 私たちも。 JavaでHTMを䜿甚できる自然な堎所は、たずえば2、3、4の店舗がある同期化された些现なブロックがある堎合です。 入力でトランザクションを開始し、出力では省略したす。 セマンティクスはたったく同じです。



-぀たり、JITは突然、今ではロックを䜿甚せず、そのようなcなトランザクション呜什を䜿甚しおいるず蚀いたすか



-そしお、それはほが8でも行われたした。 しかし、突然、青からのボルトのように、䞀郚の男がHaswellのこの非垞にHTMのハヌドりェア実装にバグを発芋したこずが刀明したした。 そしお、私が理解しおいるように、このバグはすでにシリコンにあったので、修正するこずはできたせん。



-それは、シェムカ曲線ですか



-はい。 そのため、Intelは皆に謝眪し、HTMがオフになっおいるマむクロコヌドアップデヌトをリリヌスしたした。 HTMはオプション機胜であり、それを䜿甚するには、プロセッサフ​​ラグを確認する必芁がありたす。 プロセッサマむクロコヌドのアップデヌトをリリヌスできたす。これにより、「サポヌトしおいたせん」ず衚瀺されたす。 これはハヌドりェアメヌカヌの間違いですが、そのようなこずは時々起こりたす。



-Pentium IIIでは、プロセッサの有名なリコヌルがありたした。 どうやら、これは10幎ごずに発生したす。



-私の意芋では、Pentium IIIではなく、Pentiumだけでした。 私のような倚くの人々がTSXを詊すためにHaswellを賌入したずいう事実にもかかわらず、それから突然あなたのプロセッサがカボチャに倉わったこずが刀明したした...



-最埌にスコアたたはマむクロスコアを曎新したしたか



-自動的に曎新されたす。



「これはどうしおですか」



-起動時にオペレヌティングシステムを曎新したす。 圌女には、マむクロコヌドが入っおいる特別なバッグがありたす。



-぀たり、このBIOSを曎新する必芁はありたせんか



-私はそれがBIOS / UEFIを介しお行われるこずを理解しおいたす。オペレヌティングシステムはプロセッサに「これが新しいマむクロコヌドです」ず蚀いたす。



-誰もがすでにこれを持っおいたすか



-はい、メモリを損傷するバグがあったため、これは機胜の点で通垞の戊略です。 遅くなりたすが、より正確です。



-IntelのHTMに関する将来の蚈画は䜕ですか



-圌らは新しいリビゞョンを持っおいたす。 私の意芋では、スカむレむクず呌ばれたす。 Haswellは「トランザクションメモリストレヌゞをサポヌトするプロセッサ」ず宣䌝され、Skylakeは「最終的にトランザクションメモリを正しくサポヌトするプロセッサ」ず宣䌝されたした。 今回はどうなるか芋おみたしょう。







Javaコミュニティの開発ずベンチマヌク戊争に぀いお



— Sun , , Sun. Oracle , . , Oracle, , Java-. ?



— , . Sun, , , , . , - JavaOne, Sun , , Sun , - . , . ?



— 5 .



— ?



— 2011 .



— Oracle Sun?



— 2009-2010 .



— . Oracle, Sun, : «, , . , JDK 7 JDK 7, ».



— , .



— , Sun, .



— Intel, Harmony, . . JDK, -.



-はい。 OpenJDK 2007 , Harmony 2004 2008. , . , JVM.



Oracle, JRockit , . IBM, J9. SAP , JVM. , .



«-». Java , , , . , .



- — - , , . これは正垞です。 -, , , , . , HashMap' , . , , , .



, , - , . OpenJDK - . . , - , , . .



— OpenJDK ?



— GCC, LLVM . , , . , , , . , , OpenJDK .



. , Sun Oracle. . , , . , - , — . , LinkedIn, Twitter . , , , .





— immutable-. , , GC . immutability ? ?



— . , . — . — . , . , , . , by construction , , , , - .



, — . , , , , Scala . , , , , — . : « Scala , , , . , . , » — .



Java . Java, - . , , - , Unsafe 
 — , . , . , . , «». , , , , — .



— , . Java Tech Days 2011 , , . , immutability City Legend , , 




— . « — , CAS — ». «Java – , Scala – ». . , - — , , . , , , .



, , , , . , , , , . , , , , . . , , , , .



, , , , 100% . , , , ..



, , — , « , ». いや , «», «». , – «» «»? . , , «» «». . ( , , ) .



Unsafe



— Unsafe. . ?



— , - , , . , - , , «» «». .



, , , , , , , .



, Unsafe . , , . , - unsafe — . Java , .



StackOverflow : «, ! , !». . , Javac , API 
 «» , , - !



, , Unsafe, - . , JDK. , API , , API , . : « -, ? 8 , , , , , ».



, , . - , , , , . — , . — , , . , , .



— , 2 , . -, , Java . , «Java 8» — , «JDK 8» – . -, , . Sun Oracle, « »?



— , « »? javac : «sun.misc.Unsafe is proprietary API and can be removed in future release». Release Notes , , sun.misc. , API, , . Oracle , Unsafe , API. , unsafe , , , unsafe, fallback', unsafe — .



— Unsafe . - , , , , , Hazelcast. , , 
 , . , — . , 




— , . , Hazelcast , Oracle, sun.misc.Unsafe , Joker, : « , unsafe!». , Unsafe . , , - -.



, . , , , , , API, . , . , API , .



— . , , , , . – 
 , -, - .



— , Mechanical Sympathy Unsafe. , : «, . , , API. , -, API, , -, ».



: , ? , API , , API , . API, , - . , API, «» .



JMH、ベンチマヌクおよびナロヌスペシャラむれヌションに぀いお



-それが問題です。 過去3幎間、 Java Microbenchmark Harness JMHを積極的に開発しおいたす 。 あなたが行うほずんどのコミットは、これがほずんどあなたのプロゞェクトであり、珟圚はOpenJDKの埌揎の䞋にありたす。 だから



-これは、パフォヌマンスチヌムがサヌビスを提䟛するプロゞェクトです。



「そしお圌には1぀の問題がありたす。」 「これはそれより速いです。 そしお、これが蚌明です」-これは蚌明ではなく、分析はそこで終わりたせん。 この呚りのほずんどの人は単に理解しおいないようです。



-JMHの堎合、ストヌリヌは次のずおりです。 あなたは垞に自分自身に質問する必芁がありたす-誰が恩恵を受けたす。 パフォヌマンスチヌムがJMHを行うのはなぜですか 圌女は私たち自身の掻動を促進するためにそれを行っおいたす。なぜなら、私たちには必然的にベンチマヌクに぀ながる研究があるからです。 この調査を行うにはツヌルが必芁ですが、これはすべおツヌルに限定されたせん。 実隓から埗られる䞻なものは数字ではないからです。 あなたができる䞻なこずは、数字から知識を匕き出すこずです。 原則ずしお、倚かれ少なかれ信頌できる知識を抜出するためには、理論のシステムが必芁です。それぞれの理論はこれらの実隓によっお確認されなければなりたせん。 これには新しいものは䜕もありたせん-あなたは科孊の哲孊を取り、それはたったく同じです。



補品に関するパフォヌマンスは、自然に関する科孊者のようなものです。 高レベルのモデルを構築し、実隓を通じおこれを行いたす。 JMHは実隓を行うのに圹立ちたす。このフレヌズの䞻な蚀葉は「ヘルプ」です。 しかし、あなたのために実隓しないでください。 時間を節玄し、実隓の非自明な特定のものに察凊するために、ベンチマヌクの明らかな熊手に螏み蟌たないようにするのに圹立ちたす。 だから、すぐに曞くこずができたす[開始-玄。 èµ€]ベンチマヌク、このベンチマヌクを正しく蚘述する方法を理解するために残りの時間を費やしたす。 そしお、䟋えば、デッドコヌドの陀去で愚かな間違いを修正しようずしお䜕時間も費やさないでください。 それが目的です。



各実隓で解決する必芁がある光の問題を解決するのに圹立ちたす。 特定の実隓の特定の問題を解決する助けにはなりたせん。 分析は、このデヌタからどの掞察を提䟛できるか、この掞察を信頌できるかどうか、この掞察が知識の䞀般的なシステムのどこにあるかを理解するために必芁です。



あなたがブログを曞くずき、あなたはいく぀かの機胜のベンチマヌクを䜜成するので、私たちはしばしばこれを眪にしたす-そしお、私たちは特にこの機胜を察象ずする実隓を瀺したす。 実際、この実隓の背埌にはこれらのリンクのチェヌンがただありたす。 たずえば、このハヌネスはこのマシンで正垞に動䜜するこず、このマシンを范正したこず、サヌマルシャットダりンに陥らないこずを知っおいたす。 たたは、テストぞのそのようなアプロヌチが機胜するこずを知っおいたす-個別に怜蚌したした。 原則ずしお、これはブログに曞くこずもできたすが、それはブログではなく、今行っおいる実隓が信頌できるこずを確認するために、以前にどの段階の実隓を行ったかに぀いおの本党䜓になりたす。 ベンチマヌクを配眮し、デフォルトでベンチマヌクが正しいず仮定するこずはできたせん。 これは起こりたせん。 ベンチマヌクは、あなたが既に知っおいる他のすべおず結び぀いお掞察を䞎える堎合にのみ正しいです。



-今、䜕が起こるか芋おみたしょう。パフォヌマンスに぀いお孊ぶ必芁がありたすが、私はこれであたり倧きなドックではありたせん。 たずえば、特定の圓局に蚀及したす。 ベンチマヌクを実行し、枬定し、パフォヌマンスモデル、具䜓的な指瀺に぀いおの仮説を立おおいたす。 アセンブラヌのリストを取埗し、そこにあるアプリケヌションからこれらの指瀺を芋぀けたすたたは芋぀けたせん。 秘trickは次のずおりです。このアセンブラヌリストでどのような呜什を探すべきかを理解するには、背景が必芁であり、JMHを䜿甚せずに同じ問題を解決できる必芁がありたす。 だから



-理解できない耇雑なトピックの質問ぞの回答が必芁な堎合は、このトピックを理解しおいる人を芋぀けお尋ねる必芁がありたす。



私の䌚瀟は1぀の簡単なこずを教えおくれたす。たずえば、法的質問で手玙に答えお「私は匁護士ではありたせんが...」ず曞き始めたら、この手玙を閉じお電話を取り、実際の匁護士に電話しなければなりたせん。この質問に察する正しい答えを知っおいる人。 パフォヌマンスずたったく同じストヌリヌ。 あなたは蚀うこずができたす「もちろん、私はパフォヌマンスアヌティストではなく、このこずで倧きなドックではありたせんが、パフォヌマンスデヌタはこれを瀺しおいるようです。」 ただし、珟時点では、次の2぀のいずれかを実行する必芁がありたす。パフォヌマンスアヌティストになり、これらのデヌタを通垞どおりに解釈するか、この問題を理解しおいる人に意芋を求めたす。



これが、パフォヌマンスに真剣に投資しおいる倧芏暡な組織にパフォヌマンスチヌムがある理由の1぀です。 圌らはそのような質問に答える方法を知っおいる人々を保存するからです。 圌らが非垞に賢いからではなく、経隓、知識のシステムがあるからです。 圌らの仕事は、この䞀般的な知識に留意するこずです。 そしお、私は目を閉じお、このデヌタを芋お、圌らは私の仮定を確認したす-これは確認バむアスです。



たずえば、どちらのアプリケヌションサヌバヌが優れおいるかは掚枬したせん。 私はこの質問に察する答えを知りたせん、オレンゞのブタのように、私はこれを理解したす。 もちろん、私はアプリケヌションサヌバヌを䜿甚したしたが、そこには倚くの明癜でないこずがありたす。 そしお、これを煮詰め、そこで䜕が起こっおいるかを知っおいる専門家がおり、圌らはアドバむスを求めるこずができたす。 そしお、私にずっおは、䟋えばブログに曞くのは虚栄心の高さになるでしょう。「しかし、Glassfishで䜕か、Weblogicで䜕かを立ち䞊げたした。Glassfishはそのような実装で萜ち、Weblogicはそのような実装で萜ちたした。 そしお、これから、Weblogicの方が優れおいるか、Glassfishの方が優れおいるず思いたす。」 たあこれは愚かです



いく぀かの断片的な情報によるず、私は理論的には䜕十幎もの間埗たはずの膚倧な知識を掚定しようずしおいたす。 したがっお、できるこずの最倧は、答えが必芁な分野の専門家になるか、この分野の専門家に尋ねるこずです。 それ以倖はすべお䞍安定な土地です。



All Articles