5

2 GB に 4 GB RAM を追加したため、Windows 7 (32 ビット) から Windows 7 (64 ビット) に切り替えました。そして今、私が走っているときEclipse Juno EE。Windows タスク マネージャーで、プロセスjavaw.exeが ~380 Mb の RAM を消費していることがわかります。これは、32 ビット OS を使用していたときは見たことがありませんでした。私はプロジェクトを昼食にしようとさえしませんでした。私はこのコードを書きました:

public static void main(String[] args) {
    Runtime runtime = Runtime.getRuntime(); 
    System.out.println(runtime.maxMemory());
}

それは私のJVM is allocated 1 338 507 264 bytes.

これは、プロジェクトを実行するときに、このプロセスが最大 1.3 Gb の RAM を消費する可能性があることを意味します。

将来、これに問題はありますか?

4

2 に答える 2

6

64 ビット バージョンは-serverJVM を使用し、デフォルトの最大ヒープ サイズが大きくなります。Windows 32 ビット バージョンは-clientデフォルトで JVM を使用し、小さいマシンで実行するように設計されているため、デフォルトで使用するリソースが少なくなります。その結果、実行時間が長いプログラムでは遅くなる傾向があります (クライアント JVM は、実行時間が短いプログラムのロードが速くなります)。アプレットのように)

最新バージョンの Java 6 または Java 7 を使用している場合、最大ヒープ サイズを設定すると、ほぼ同じ量のメモリが使用されるはずです。

于 2012-12-17T10:44:42.463 に答える
2

Runtime.maxMemory():

Java 仮想マシンが使用しようとするメモリの最大量を返します。

上限です。JVM がこの量のメモリを事前に割り当てるという意味ではありません。プロセスのメモリ使用量は、オブジェクトを作成して保持するにつれて、構成可能な最大ヒープ サイズまで増加します。

Windows タスク マネージャーで、プロセス javaw.exe が ~380 Mb の RAM を消費していることがわかります

メモリの使用には多くの側面があります。アドレス空間、仮想 RAM、物理 RAM などがあります。タスク マネージャーで表示している列に応じて、そこに表示されている数字はさまざまな意味を持つ場合があります。

Windows 7 (32 ビット) から Windows 7 (64 ビット) に切り替えました。

一般に、64 ビット コードは同等の 32 ビット コードよりも多くのメモリを必要とすることは事実です。1 つには、ポインターは幅が広いため、より多くのスペースを占有します。これは、他のプロセスと同様に JVM にも適用されます。ただし、JVM は影響を軽減するためにいくつかの手順を実行します。そのような尺度の 1 つがCompressedOopsです。

于 2012-12-17T10:45:06.507 に答える