問題タブ [jvm-hotspot]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - rt.jar の変更に関する制限
rt.jar でクラスを変更する際の制限は何ですか。これは一般に、JRE のバージョンとベンダーに固有のものであることを認識しています。たとえば、Sun 1.6 VM の Hotspot は、フィールドを java.lang.Object に追加すると、Object のサイズに関する前提がハードコーディングされているため、気に入らないことがわかりました。ただし、rt.jar 内のクラスの重要な部分を変更すると、jar 内に確実にあるクラスに対して、実行時に偽の ClassNotFoundErrors が発生します。rt.jar をその場で変更するだけでなく、さまざまな -Xbootclasspath パラメーターで置き換えようとしました。
この種のドキュメントを探す場所がよくわかりません。たとえば、OpenJDK ドキュメントには何も見つかりません。
java - 最適化後に HotSpot が生成するコードを確認するにはどうすればよいですか?
実行時に HotSpot が Java コードに対して生成する可能性のある最適化について、よりよく理解したいと思います。
しばらく実行した後、HotSpot が使用している最適化されたコードを確認する方法はありますか?
java - ループ内のオブジェクト作成の最適化
次のうち、Java 6 HotSpot VM でより最適なのはどれですか?
また
どちらも意図がはっきりしていると思うので、ここではスタイルや追加された複雑さが問題になるとは思いません。
直観的には、'new' は 1 つしかないので、最初のほうが良いように見えます。ただし、マップへの参照が保持されていない場合、HotSpot はループごとに同じサイズ (内部では Entry[someNotSoLargeNumber]) のマップが作成されていると判断し、同じメモリ ブロックを使用します (つまり、そうではありません)。ループごとに clear() を呼び出すよりも速いかもしれないゼロ化だけで、多くのメモリ割り当てを行いますか?
受け入れられる答えは、HotSpot VM が実際に実行できるさまざまなタイプの最適化、および HotSpot を支援するコードの記述方法を説明するドキュメントへのリンクです (手作業でコードを最適化する単純な試みではなく)。
java - 割り当ての待ち時間が長いようですが、なぜですか?
低レイテンシ環境で実行される (Java) アプリケーションがあります。通常、命令は最大 600 マイクロ (+/- 100) で処理されます。当然のことながら、マイクロ秒の空間にさらに移行すると、レイテンシーの変化が見られます。現在、その時間の 2/3 が 2 つのコア ドメイン オブジェクトの割り当てに費やされていることに気付きました。
ベンチマークは、コードの問題のあるセクションを既存の参照から文字通りオブジェクトの構築に分離しました。つまり、基本的に参照のロード (各クラスで最大 15) といくつかのリストが新しく作成されましたが、正確に測定されるものについては以下の注を参照してください。ここ。
それぞれが一貫して約 100 マイクロ秒かかりますが、これは私には説明できません。その理由を突き止めようとしています。簡単なベンチマークでは、同様のサイズの文字列でいっぱいのオブジェクトが新しくなるまでに約 2 ~ 3 マイクロ秒かかることが示唆されています。
ここに 2 つの Q があります
- この種の行動をどのように調査しますか?
- 遅い割り当てにはどのような説明がありますか?
関連するハードウェアは、Sun X4600 上の Solaris 10 x86 であり、8* デュアル コア オプテロン @ 3.2GHz であることに注意してください。
私たちが見たものには、
- PrintTLAB の統計情報を確認すると、低速な割り当てがほとんどないため、競合は発生しないはずです。
- PrintCompilation は、これらのコードのビットの 1 つが JIT フレンドリーではないことを示唆していますが、Solaris はここでいくつかの異常な動作をしているようです (つまり、最新の Linux に対して、solaris10 と同様のヴィンテージの Linux を現在ベンチに置いていません)。
- LogCompilation...控えめに言っても解析が少し難しいので、これは進行中の仕事であり、今のところ明らかなことは何もありません
- JVM バージョン... 6u6 と 6u14 の間で一貫しており、6u18 または最新の 7 はまだ試していません
ありとあらゆる考えに感謝
物事を明確にするための、さまざまな投稿へのコメントの要約
- 私が測定しているコストは、ビルダー (これらの1 つなど) を介して構築され、そのプライベート コンストラクターが new ArrayList を数回呼び出し、既存のオブジェクトへの参照を設定するオブジェクトを作成する総コストです。測定されたコストには、ビルダーのセットアップとビルダーのドメイン オブジェクトへの変換のコストが含まれます。
- コンパイル (ホットスポットによる) には大きな影響がありますが、それでも比較的遅いです (この場合のコンパイルでは、100 マイクロ秒から 60 マイクロ秒までかかります)。
- 私の単純なベンチマークでのコンパイル (ホットスポットによる) は、割り当て時間を ~2micros から ~300ns に短縮します
- レイテンシーは、若い世代のコレクション アルゴリズム (ParNew または Parallel スカベンジ) によって変化しません。
java - -XX:-PrintGC および XX:-PrintGCDetails フラグは何をしますか?
ここで JVM フラグを見つけました。それらが正確に何をするかについてのより詳細な説明はありますか?
java - 既存のjvmプロセスで新しいJavaコードを実行する
現在、Windowsシェルで実行されているJavaプロセスがあります。
シリアル化を担当するスレッドの1つが無期限にブロックされ、その結果、メモリに格納されている重要な情報がディスクに書き込まれなくなります。
プロセスをシャットダウンすると、情報が失われます。
プロセスをシャットダウンする前に、新しいコードを記述してコンパイルし、同じメモリスペースで実行して、上記の情報をもう一度シリアル化できると便利です。
java -jar
コマンドを使用してプロセスを開始しました。
ホットスポットVM機能を使用して、これを実現する方法はありますか?
java - Javaと.NetのJITの違いは何ですか
Microsoft .NETはCLRをJITコンパイラとして使用しますが、Javaにはホットスポットがあります。それらの違いは何ですか?
java - ホットスポットを作成し、背景のない画像(地球のアイコンなど)をパネルに設定します
Extends of canvasでホットスポットを作成し、画像でペイントされたパネルに追加しようとしています。そのため、画面の明確な長方形ではなく、アイコン(画像)を描画する必要があります。これを行うには、paintメソッドをオーバーライドして、使用するアイコンを描画します。これまでのところ問題はありません。ホットスポットは正しく機能し、アイコンは希望する実際のサイズ(32 x 24ピクセル)でペイントされます。
mypanel.paint(g)
そのオーバーライド でもパネルに画像をペイントした後、このホットスポットを追加しようとしています。
問題は、背景のない車のアイコンを使用していることです。(ご理解いただければ幸いです)私の画像が描かれているパネルには、車のアイコンだけを表示する必要があります。ただし、アイコンの周囲に不要な長方形が作成され、見栄えが悪くなります。その背景なしでパネルにアイコンをペイントするにはどうすればよいですか?私を助けてください。