問題タブ [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 - プログラムでjmapヒストグラムを取得するには?
jmap -histo
監視対象のアプリケーション内から、プログラムでの出力に相当するものを取得したいと思います。HotSpot 診断 Bean を使用してヒープ ダンプをトリガーできることがわかりましたが、ヒストグラム データを取得する方法がわかりません。出来ますか ?
java - Java 6 ホットスポットの Java 5 ランタイム
Java 5 のランタイム環境で Java 6 の Hotspot を実行する方法はありますか? クラスの古い実装の動作に依存するコードがいくつかありますが、より新しい JVM を使用したいと考えています。コードを Java 6 (またはおそらく 7!) に移行する計画はありますが、現時点では、JVM に問題があるかどうかを確認することに関心があります。
makefile - ソースから jdk (openjdk-7) をビルドする
openjdk-7-fcs-src-b147-27_jun_2011.zip
Ubuntu 11.10 にダウンロードした後、ソースからビルドしようとしました。最初にいくつかの警告/エラーがありましたが、1 つを除いて修正できました。
それは言う
エラー: JAVA_HOME が正しく定義されていません
JAVA_HOME の値が何であるかわかりません。JAVA_HOME="." を割り当ててみました。// jdk のホーム ディレクトリですが、さらに興味深いエラーが表示されます ... エラーは次のとおりです。
エラー: JAVA_HOME 環境変数が設定されています。これにより、ビルドが失敗する可能性が高くなります。設定を解除して、ビルドをやり直してください。
今、何が問題になる可能性があります。私のマシンにはJavaがありますが、今のところjavacはありません。
なぜ最初にソースから jdk をインストールする必要があるのかと疑問に思うでしょう。その理由は、ホットスポットを構築し、それにいくつかの変更を加えてから再構築したいからです。問題は、ホットスポットをスタンドアロンで構築する方法を理解するために、私の一日が台無しになったことです。だから、ホットスポットが組み込まれたjdkを構築できるのではないかと思いました..そして、必要に応じてそこから再構築できます。
(ソースから)ホットスポットを構築する方法があれば、それも非常に役立ちます。
java-me - MIPS 用の CDC または Oracle JavaME Embed Client リソース
Broadcom MIPS ボードで Java 仮想マシンを実行するように依頼されましたが、Oracleから MIPS 用の OJEC cvm バイナリを見つけて非常にうれしく思いました。残念ながら、正しく実行できなかったため、バイナリは私のボード用にビルドされていないようです。
ボードに使用しているツールチェーンを使用してクライアントを再構築するために、どこかで OJEC ソース コードを入手できるかどうか知っている人に尋ねることはできますか? はいの場合、クライアントを構築するためのガイドはありますか?
Google で検索しているときに、「Phoneme」プロジェクトから CDC ソース コードを見つけ、mips ツールチェーンで cvm をビルドできました。それはうまくいきます!そのテストといくつかの Hello World サンプルを実行できました。しかし、Phoneme svn ログを見て、プロジェクトが最近アクティブではないことに気付きました。最後の変更は約 1 年前です。プロジェクトの状況と、それが OJECT とどう違うのか教えていただけますか?
また、openjdk のホットスポットと混同しています。OJECとは違うの?それとも両方ともCDCに基づいていますか?
ボックスの /proc/ から取得した CPU 情報は次のとおりです。
java - JavaSystem.nanoTimeの経過平均時間はどんどん小さくなっています
プログラミング言語の時刻に問題が発生したのはこれが初めてではありません。基本的に、whileループで関数を呼び出すことにより、関数の実行速度を測定しています。問題は、何らかの理由で、whileループの実行時間が長くなるほど経過時間が短くなり続けることです。誰か説明できますか?以下のコード。
したがって、約1,000回の実行後、経過時間は750kから850kになります。しかし、約100,000回の実行後、経過時間は580kから750kに低下します。継続的な減少は、平均(stats.getMeans())を見ると最もよくわかります。これは、108kループ後の平均が約632kであるのに対し、3kループの平均は約100万です。nanoTimeの代わりにcurrentTimeMillisに切り替えても、何も変わりません。
java - MANIFEST.MF ファイルで HotSpot VM バージョンの代わりに Java バージョンを取得するにはどうすればよいですか?
ソース コードをコンパイルして jar ファイルを作成する Ant スクリプトがあります。MANIFEST.MF ファイルには、いくつかの属性が追加されています。ただし、Created-By
属性には HotSpot VM のバージョンが表示されます。
しかし、私が期待しているのは、1.6.0_27 などの Java バージョンです。これを達成する方法は?
アップデート:
私の JAVA_HOME は JDK を指しています。コマンド「java -version」の出力は次のとおりです。
java - ホットスポットに頻繁な GC を強制しますか?
Java でサーバー プロセスのベンチマークを行っていますが、Hotspot は多くの GC を作成していないように見えますが、GC を作成すると、パフォーマンスが大幅に向上します。
ホットスポットに、いくつかの大量の長い GC ではなく、小さな GC を頻繁に作成させることはできますか?
c# - Java は多くのコアで C# よりもはるかにスケーリングが悪いのですか?
Java および C# 用の 32 コア サーバーで同じ関数を実行する多くのスレッドの生成をテストしています。スレッドプールを使用して、1、2、4、8、16、または 32 個のスレッドにわたってバッチ処理される関数の 1000 回の反復でアプリケーションを実行します。
1、2、4、8、および 16 の同時スレッドで、Java は少なくとも C# の 2 倍高速です。ただし、スレッド数が増えるとギャップが縮まり、32 スレッドまでに C# の平均実行時間はほぼ同じになりますが、Java は 2000 ミリ秒かかることがあります (一方、両方の言語は通常約 400 ミリ秒実行されます)。Java は、スレッドの反復ごとにかかる時間の大幅なスパイクにより、悪化し始めています。
編集これはWindows Server 2008です
EDIT2 以下のコードを変更して、Executor Service スレッドプールの使用を示すようにしました。Java 7もインストールしました。
ホットスポット VM で次の最適化を設定しました。
-XX:+UseConcMarkSweepGC -Xmx 6000
しかし、それはまだ物事を改善していません。コードの唯一の違いは、以下のスレッドプールを使用していることと、使用する C# バージョンであることです。
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
Java をより最適化する方法はありますか? パフォーマンスが大幅に低下している理由を説明できますか?
より効率的な Java スレッドプールはありますか?
(テスト関数を変更するという意味ではないことに注意してください)
java - Executor Service と非常に高速な Java コードを終了しますか?
以下のコードでは、スレッドプールを介して関数を何度も呼び出しています。この関数内で、FastestMemory と呼ばれるグローバル属性を介して、関数の最速実行を追跡します。
ただし、スレッドプール ループの後に値を出力すると、グローバル変数がループの反復ごとに更新される変数と同じではないかのように、元の値が与えられます。FastestMemory の値が (たとえば) 253475 に割り当てられることがわかっている場合、2000000000 が返されます。
1) 最速の反復を追跡できるようにするために、このコードを再構成する必要がありますか?
2) このコードを非常に高速に実行できるようです。4 つの Xeon x7550 で反復ごとに (平均して) 1 ミリ秒未満かかります。これは正常ですか、それとも私のタイミングがどこか間違っていますか? C# は平均で約 400 ミリ秒かかる?!?
java - JavaとC#マルチスレッドのパフォーマンス、なぜJavaが遅くなるのですか?(グラフと完全なコードが含まれています)
私は最近、スレッドプールでスケジュールされる1000のタスクについて、JavaとC#でベンチマークを実行しています。サーバーには4つの物理プロセッサがあり、それぞれに8つのコアがあります。OSはServer2008で、32 GBのメモリがあり、各CPUはXeon x7550 Westmere/Nehalem-Cです。
つまり、Javaの実装は4スレッドでC#よりもはるかに高速ですが、スレッド数が増えるとはるかに遅くなります。また、スレッド数が増えると、C#は反復ごとに速くなったようです。グラフはこの投稿に含まれています:
Java実装は、64ビットのホットスポットJVMで、Java 7を使用し、オンラインで見つけたエグゼキューターサービススレッドプールを使用して作成されました(以下を参照)。また、JVMを並行GCに設定しました。
C#は.net 3.5で記述され、スレッドプールはcodeprojectから取得されました:http: //www.codeproject.com/Articles/7933/Smart-Thread-Pool
(私は以下のコードを含めました)。
私の質問:
1)Javaが遅くなっているのに、C#が速くなっているのはなぜですか?
2)C#の実行時間が大きく変動するのはなぜですか?(これが私たちの主な質問です)
C#の変動は、メモリバスが最大になっていることが原因であるのかどうか疑問に思いました。
コード(ロックのエラーを強調しないでください。これは私の目的とは無関係です):
Java
C#: