タグ付けされた質問 「jvm」

Java仮想マシン(JVM)を使用すると、一連のコンピューターソフトウェアプログラムとデータ構造で、仮想マシンモデルを使用して他のコンピュータープログラムとスクリプトを実行できます。このタグは、JVMが提供するツールや、特定のシナリオでどのように機能するかについての質問に使用します。


8
静的メソッドと静的変数はJavaのどこに保存されますか?
例えば: class A { static int i=0; static int j; static void method() { // static k=0; can't use static for local variables only final is permitted // static int L; } } これらの変数は、Java、ヒープ、スタックメモリのどこに格納されますか?それらはどのように保存されますか?
115 java  jvm 

6
40億回の反復Javaループに2ミリ秒しかかからないのはなぜですか?
2.7 GHz Intel Core i7を搭載したラップトップで次のJavaコードを実行しています。2 ^ 32回の繰り返しでループを終了するのにかかる時間を測定するつもりでした。これは、およそ1.48秒(4 / 2.7 = 1.48)と予想されていました。 しかし実際には、1.48秒ではなく、2ミリ秒しかかかりません。これがJVMの最適化の結果であるかどうか疑問に思っていますか? public static void main(String[] args) { long start = System.nanoTime(); for (int i = Integer.MIN_VALUE; i < Integer.MAX_VALUE; i++){ } long finish = System.nanoTime(); long d = (finish - start) / 1000000; System.out.println("Used " + d); }
113 java  for-loop  jvm 

7
この方法で4が出力されるのはなぜですか?
StackOverflowErrorをキャッチしようとすると、次のメソッドが思い浮かびました。 class RandomNumberGenerator { static int cnt = 0; public static void main(String[] args) { try { main(args); } catch (StackOverflowError ignore) { System.out.println(cnt++); } } } 今私の質問: この方法で「4」が出力されるのはなぜですか? おそらくSystem.out.println()、コールスタックに3つのセグメントが必要なためだと思いましたが、3がどこから来るのかわかりません。のソースコード(およびバイトコード)を見るとSystem.out.println()、通常、メソッドの呼び出しが3よりもはるかに多くなります(したがって、呼び出しスタックの3つのセグメントでは不十分です)。Hotspot VMが適用する最適化(メソッドのインライン化)が原因である場合、別のVMで結果が異なるかどうか疑問に思います。 編集: 出力は非常にJVM固有であると思われるため、 Java(TM)SEランタイム環境(ビルド1.6.0_41-b02) Java HotSpot(TM)64ビットサーバーVM(ビルド20.14-b01、混合モード)を使用して結果4を取得します この質問がJavaスタックの理解とは異なると思う理由: 私の質問はなぜcnt> 0があるのか​​(明らかにSystem.out.println()スタックサイズが必要でありStackOverflowError、何かが印刷される前に別のものをスローするため)ではなく、特定の値4、それぞれ0、3、8、55または他の何かがあるのはなぜですかシステム。
111 java  jvm  stack-overflow 

5
JVMがJITコンパイル済みコードをキャッシュしないのはなぜですか?
Sunの標準的なJVM実装は、かなり洗練された最適化をバイトコードに適用して、コードが数回実行された後、ネイティブに近い実行速度を取得します。 問題は、このコンパイルされたコードが、同じ関数/クラスの後続の使用中に使用するためにディスクにキャッシュされないのはなぜですか? 現状では、プログラムが実行されるたびに、JITコンパイラは、コンパイル済みのバージョンのコードを使用するのではなく、新たに起動します。この機能を追加すると、バイトコードが本質的に解釈されているときに、プログラムの最初の実行時間が大幅に増加しませんか?
107 java  caching  jvm  compilation  jit 

17
64ビットOSでの32ビットJVMの最大Javaヒープサイズ
32ビットOSの最大アドレス可能メモリサイズは4GBであり、JVMの最大ヒープサイズは、予約可能な連続する空きメモリの量に依存するため、32ビットOSの最大ヒープサイズについては問題ではありません。 私は、64ビットOSで実行されている32ビットJVMの最大(理論上および実際に達成可能な)ヒープサイズを知ることに興味があります。基本的に、私はSOに関する関連する質問の数字と同様の答えを見ています。 64ビットのJVMではなく32ビットのJVMが使用される理由については、その理由は技術的ではなく、管理/官僚的です。64ビットJVMを本番環境にインストールするのはおそらく遅すぎます。
107 java  jvm 

1
CATALINA_OPTS対JAVA_OPTS-違いは何ですか?
私は、Apache Tomcatの変数の違いを見つけるためにしようとしていた- CATALINA_OPTSとJAVA_OPTSでSOと疑い/答えはまだここに掲載ませんがあることを確認するために驚きました。そこで、違いを見つけた後、ここで(回答付きで)共有することを考えました。以下の答え/違いを確認してください。 注:この投稿の時点では、Apache Tomcat v6.0.10とJDK 6u32をCentOS5 64ビットarchで実行しています。
105 java  tomcat  jvm  tomcat6 

6
Javaの文字列定数プールはどこにありますか、ヒープまたはスタックですか?
文字列リテラルを処理するためにJVMが使用する定数プールと文字列定数プールの概念を知っています。しかし、JVMが文字列定数リテラルを格納するためにどのタイプのメモリを使用しているかはわかりません。スタックまたはヒープ?どのリテラルにも関連付けられていないリテラルなので、スタックに格納されると想定します。しかし、インスタンスによって参照されていない場合、リテラルはGC実行によって収集される必要があるため(間違っている場合は修正してください)、スタックに格納されている場合はどのように処理されますか?
103 java  string  jvm 

5
JVMは末尾呼び出しの最適化を妨げますか?
私はこの質問でこの引用を見ました:Webサービスを構築するための優れた関数型言語は何ですか? 特にScalaは、自己再帰関数を除き、末尾呼び出しの除去をサポートしていません。これにより、実行できる構成の種類が制限されます(これは、JVMの基本的な制限です)。 これは本当ですか?もしそうなら、この基本的な制限を作成するのはJVMについて何ですか?

3
なぜJVMスタックベースとDalvik VMレジスタベースなのですか?
私は好奇心旺盛ですが、なぜSunはJVMをスタックベースにすることに決め、GoogleはDalvikVMをレジスタベースにすることに決めたのですか? JVMはプラットフォームに依存しないため、ターゲットプラットフォームで特定の数のレジスタが使用可能であるとは想定できないと思います。そのため、JITコンパイラーへのレジスター割り当てなどを延期するだけです。(私が間違っていれば訂正してください。) それで、Android関係者は、「それは非効率的です。すぐにレジスタベースのvmに行きましょう...」と考えましたか?しかし、待ってください。複数の異なるandroidデバイスがあり、Dalvikが対象としたレジスタの数はいくつですか?Dalvikオペコードは、特定の数のレジスタに対してハードコードされていますか? 現在市場に出ているすべてのAndroidデバイスには、ほぼ同じ数のレジスターがありますか?または、dex-loading中にレジスタの再割り当てが実行されますか?これらすべてをどのように組み合わせるのですか?

9
Java 32ビットと64ビットの互換性
32ビットJDKに対してビルドおよびコンパイルされて32ビットバイトコードにコンパイルされたJavaコードは、64ビットJVMで動作しますか?または、64ビットJVMには64ビットバイトコードが必要ですか? もう少し詳しく説明すると、32ビットのJVMを実行しているSolaris環境で動作していたコードがありますが、JDKとWeblogic Serverを64ビットにアップグレードすると問題が発生します。

5
VisualVMにJVM引数を提供するにはどうすればよいですか?
JDK 1.6.0_26のVisualVMを使用して、Tomcatで実行されているJava Webアプリケーションのプロファイルを作成していますが、スナップショットを作成するための十分なメモリがなく、NetBeansにより多くのメモリを提供するために-Xmxスイッチを使用する必要があるとVisualVMからしばしば通知されます。問題は、Netbeansの外部でVisualVMを実行しているため、jvisualvm.exeにJVM引数を提供するにはどうすればよいですか?
97 java  windows  jvm  visualvm 

2
すべてのJVMフラグを出力
興味深いJVMフラグが見つかりました: java -XX:+UnlockDiagnosticVMOptions -XX:+PrintFlagsFinal -version それは何百ものさまざまなオプションを印刷します。また、JVMの動作の診断に役立つデフォルト値も出力します。別の興味深いフラグは次のとおりです。 -XX:+UnlockExperimentalVMOptions 誰かがそれらのそれぞれを説明するドキュメントを知っていますか?

9
コンパイルされたJavaクラスをロックして逆コンパイルを防ぐ方法は?
コンパイルされたJavaクラスをロックして逆コンパイルを防ぐにはどうすればよいですか? これはインターネットで非常によく議論されているトピックであることは知っていますが、それらを参照しても結論を出すことはできませんでした。 多くの人が難読化ツールを提案していますが、覚えにくい文字列でクラス、メソッド、フィールドの名前を変更するだけですが、機密定数値はどうですか? たとえば、パスワードベースの暗号化技術に基づいた暗号化および復号化コンポーネントを開発しました。この場合、平均的なJavaの人なら誰でもJADを使用してクラスファイルを逆コンパイルし、ソルトだけでなくパスワード値(定数として定義)を簡単に取得できます。次に、小さな独立したプログラムを作成してデータを復号化できます。 または、そのような機密コンポーネントをネイティブコード(たとえば、VC ++)でビルドし、JNI経由で呼び出す必要がありますか?
96 java  jvm  decompiling 

4
JVMがまだテールコール最適化をサポートしていないのはなぜですか?
does-the-jvm-prevent-tail-call-optimizationsの 2年後、プロトタイプの 実装があり、MLVMはしばらくの間、この機能を「proto 80%」としてリストしています。 JVMで言及されているように、テールコールのサポートにSun / Oracleの側から積極的な関心はありませんか、それとも、テールコールが「すべての機能優先度リストで2番目に来ると運命づけられている [...]」だけです。言語サミット? 誰かがMLVMビルドをテストし、それがどれほどうまく機能するかについての印象を(もしあれば)共有できたら、私は本当に興味があります。 更新: Avianのような一部のVM は、問題なく適切な末尾呼び出しをサポートしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.