問題タブ [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 - サーバーJITがアクティブ化されているときに、コードの実行が遅くなる原因は何ですか?
MPEGデコーダーでいくつかの最適化を行っています。最適化によって何も壊れていないことを確認するために、コードベース全体(最適化されたものとオリジナルの両方)をベンチマークするテストスイートがあり、両方が同じ結果を生成することを確認します(基本的にはデコーダーとcrc32を介していくつかの異なるストリームをフィードするだけです)出力)。
Sun 1.6.0_18で「-server」オプションを使用すると、ウォームアップ後の最適化されたバージョンでのテストスイートの実行が(デフォルトの「-client」設定と比較して)約12%遅くなりますが、元のコードベースは大幅に向上します。クライアントモードの約2倍の速度で実行されます。
最初はこれは単なるウォームアップの問題のように見えましたが、テストスイート全体を複数回繰り返すループを追加しました。その後、テストの3回目の反復から開始する各パスの実行時間は一定になりますが、最適化されたバージョンはクライアントモードよりも12%遅くなります。
また、コードには起動後のオブジェクトの割り当てがまったく含まれていないため、ガベージコレクションの問題ではないと確信しています。このコードは、主にいくつかのビット操作操作(ストリームデコード)と多くの基本的な浮動演算(PCMオーディオの生成)で構成されています。関連するJDKクラスは、ByteArrayInputStream(ストリームをテストにフィードし、ディスクIOをテストから除外する)とCRC32(結果を検証するため)のみです。また、Sun JDK 1.7.0_b98でも同じ動作が見られました(12%ではなく15%でした)。ああ、テストはすべて同じマシン(シングルコア)で行われ、他のアプリケーションは実行されていません(WinXP)。(System.nanoTime btwを使用して)測定された実行時間には避けられない変動がありますが、同じ設定での異なるテスト実行間の変動は2%を超えることはなく、通常は1%未満(ウォームアップ後)です。
サーバーJITでパフォーマンスが低下する既知のコーディングパターンはありますか?それができない場合、内部を「覗き見」してJITがそこで何をしているのかを観察するために利用できるオプションは何でしょうか。
たぶん、「ウォームアップ」の説明を間違って言いました。明示的なウォームアップコードはありません。テストスイート全体(12の異なるmpegストリームで構成され、合計で最大18万のオーディオフレームを含む)が10回実行され、最初の3つの実行は「ウォームアップ」と見なされます。私のマシンでは、1回のテストラウンドで100%CPUが約40秒かかります。
提案されたようにJVMオプションを試して、「-Xms512m -Xmx512m -Xss128k -server -XX:CompileThreshold = 1 -XX:+ PrintCompilation -XX:+ AggressiveOpts -XX:+PrintGC」を使用してすべてのコンパイルがで行われることを確認できました最初の3ラウンド。ガベージコレクションは3〜4ラウンドごとに開始され、最大で40ミリ秒かかります(テストは16メートルで問題なく実行できるため、512メートルは非常に特大です)。このことから、ガベージコレクションはここでは影響がないと結論付けます。それでも、クライアントとサーバーを比較すると(他のオプションは変更されていません)、12/15%の違いが残っています。
java - java PrintCompilation出力:「入場不可」と「ゾンビ化」の意味は何ですか
Java 1.6 (1.6.0_03-b05) アプリを実行するときに、-XX:+PrintCompilation
フラグを追加しました。一部のメソッド、特に私が知っているいくつかのメソッドの出力では、テキストmade not entrant
とmade zombie
.
これらはどういう意味ですか?最良の推測は、そのメソッドまたは依存関係をより最適化して再コンパイルする前の逆コンパイルステップであるということです。本当?なぜ「ゾンビ」と「エントラント」なのか?
例、これらの行のいくつかの間にかなりの時間があります:
java - System.out での Java 実行の詳細
私が覚えているように、Java には、現在実行されている操作のコンソールへの書き込みをオンにする魔法のコマンド ライン オプションがあります。出力はバイトコードのように見えます。
-verbose
クラスのロードのみを出力するため一致しませんが、このオプションはメモリ割り当て、ローカル変数の設定などの情報を出力します。「Hello world」の 10 行など、非常に詳細でした。
ここでは見つかりませんでしたhttps://www.oracle.com/java/technologies/javase/vmoptions-jsp.htmlまたはここhttps://docs.oracle.com/javase/1.5.0/docs/tooldocs/ solaris/java.html . また、いくつかのフラグを見つけましたが、それらのほとんどは openjdk または開発モードでのみ機能します。Windows でこの開発モードで java.exe を起動する方法はありますか? それとも、これらのリストにない別のフラグのセットがあるのでしょうか?
java - JNI HotSpot クラッシュのデバッグ
リモートの Linux ベースのシステムでカスタム JNI コードをテストしています。DBX をインストールする必要はありませんし、JDB は完全に役に立たず、問題を診断することもできません。JNIコード内のどこが間違っているかを実際に示す軽量のJava JNIデバッガは他にありますか?
ありがとう
java - ホットスポットJVMでメソッドがコンパイルされない理由
コンパイルされたメソッドに関するログ情報を提供する利用可能なフラグがあります。コンパイルされなかったメソッドと、コンパイルされなかった理由に関する情報はどこにありますか?ホットスポットコンパイラがどのように決定を下すか、特定のメソッドをコンパイルしない理由を確認できると、JVMをよりよく理解でき、より良いコードを記述して、メソッドの一部を最適化できるようになります。誰かがこのテーマについて何か考えを持っていますか?
java - Java標準ライブラリはネイティブコードとどのように通信しますか?
彼らはMonoのPInvokeのようなものを使用していますか?それとも、ランタイムが開始される前に登録された内部呼び出しのようなものですか?javaには、mscorlib.dllのようなネイティブ呼び出しを処理するためのベースライブラリがありますか?CコードでJVMを呼び出したい場合、ライブラリは.so / .dllファイルを検索しますか?すべてのJREネイティブライブラリを静的にリンクすると、Java標準ライブラリに違いがありますか?
java - JavaでのビットごとのAND(&)式
評価結果に影響を与える副作用があるコードをデバッグしていexpr1 & expr2
ます。JLSはの左から右への評価を保証しているので、それは前に評価されると思いますが、必ずしも。の評価は必要ありません。また、評価順序の変更は、HotSpot(Java 6u20を実行している)によって実行された最適化の結果である可能性があると思われます。HotSpotがそのような最適化を行うことができるかどうか知っていますか?さらに良いことに、疑惑を支持または排除するドキュメントへのポインタを提供します。前もって感謝します。expr1
expr2
expr2
expr1
&&
&
編集:正しくて読みやすいようにコードを書き直すことを提案してくれた人たちに感謝します-あなたは正しいですが、私はすでにそうしているので、それは私が探しているものではありません。残念ながら、変更をテストするのは難しいので、ここで質問します。
java - ASP.NET / .net 初心者向けの質問 - Java ホットスポットと同等ですか?
私は経験豊富な Java 開発者であり、.net の側面を学び始めており、開始する領域として asp.net プロジェクトを取り上げようとしていました (grails、Spring MVC などと比較できるように)
私が見つけた厄介なことの 1 つは、コードを変更するたびに Web サーバーを再起動する必要があることです。開発中の Java 側では、標準の JVM ホットスポットを使用して、クラスをオンザフライでリロードします。また、JRebel http://www.zeroturnaround.com/jrebel/も購入しました。これにより、この機能がさらに高度になります。
Javaホットスポット、.net用のJRebelテクノロジー(esp c#)に相当するものがあるかどうか、.netの第一人者は教えてくれますか?
ありがとう
java - JavaVMのチューニング-Xbatchおよび-Xcomp
私はAlfrescoを実行するためのJVM構成オプション、主にAlfrescoWikiのこのドキュメントを見ています。推奨事項の1つは、JVMフラグとを使用することです。これの正当化は次のとおりです。-Xcomp
-Xbatch
ホットスポットでクラスをプリコンパイルする場合は、[-Xcompおよび-Xbatch]を追加できます。ただし、これによりサーバーの起動時間が大幅に増加しますが、後でヒットする可能性のある欠落している依存関係が明らかになります。
とフラグについて他の場所で読んだことから、それらが本当に何らかの利益をもたらすかどうか疑問に思っています。-Xcomp
-Xbatch
-Xcomp
HotSpotを取得して、最大限の最適化を使用してすべてのコードを事前にコンパイルします。これにより、VMがシステムの標準実行を通過するプロファイリングよりも優先されます。-Xbatch
バックグラウンドコンパイルを停止します。これは、コンパイルが完了するまでコードがブロックされる原因となったスレッドを意味します。ただし、コンパイルが終了した後、以前にブロックされたスレッドはコンパイルされたコードを実行せず、解釈されたコードを実行します。これはJava6(Mustang)での変更でした。Mustang以前は、-Xbatch
フラグの存在によってコンパイルがブロックされたスレッドは、コンパイルが完了するとすぐにコンパイル済みコードで実行されることが保証されていました。-Xbatch
したがって、フラグの推奨は、古いVMでAlfrescoを実行した遺物であると推測しています。
誰か考えがありますか?私の傾向は、これら2つのフラグを取り除き、VMに依存して問題を解決することです。
2つ追加したいのですが、まず、これをテストするためのAlfrescoインスタンスにまだアクセスできていません。次に、他のマシンを見て、Alfrescoをホストしているマシンの仕様がわかりません。構成オプションは64ビットVMである必要があります。それにもかかわらず、おそらく一般的なHotSpotチューニングの観点から、コミュニティがいくつかの有用な情報を提供することを願っています。
java - Android 2.2の場合:テザリングモードで、同じ時間にWi-Fiをスキャンする
こんにちは:一般的に、Wifiテザリングをオンにして(ホットスポットを作成)、同時にWifiデバイスをスキャンすることは可能ですか?複数のデバイスが互いに検出し(接続せず)、信号強度をログに記録するようにしたい。そのためには、すべてのデバイスがWi-Fi経由で検出可能であると同時に、他のデバイスを検出できる必要があります。特定のユースケースで必要になるだけです。