0

私は記憶に関するいくつかの実験を行っています。私が遭遇した最初の問題は、実行時に特定の量のメモリを割り当てる方法です。たとえば、500MB です。プログラムが終了するまで、プログラムのプロセスがそれを保持する必要があります。

これを達成するにはいくつかの方法があると思いますか?シンプルだけど実用的なものが好きです。

4

3 に答える 3

3
public static void main( String[] args ) {
   final byte[] x = new byte[500*1024     ]; // 500 Kbytes
   final byte[] y = new byte[500*1024*1024]; // 500 Mbytes
   ...
   System.out.println( x.length + y.length );
}
于 2013-02-24T17:57:18.480 に答える
3

Java はメモリ管理を隠しているため、質問に対する答えは 2 つあります。

  1. このサイズのデータ​​構造を作成します。アクティブなスレッドでヒープ上のデータへの参照がなくなると、ガベージ コレクション可能になるため、プログラムが終了するまで、一部のスレッドでそれらへの参照が必要になり、保持されます。32 ビット システムでは、125000 セルの int 配列、または 1000 セルの 125 int 配列には 500MB で十分です。

  2. メモリを割り当てて使用可能にしたいだけで、いっぱいにしない場合は、仮想マシンを -Xms=512M で起動します。これにより、VM は起動時にプログラムに 512 M のメモリを割り当てますが、必要になるまで空になります (ポイント 1 を実行します)。Xmx は、プログラムによって割り当て可能な最大メモリを設定します。

于 2013-02-24T17:58:07.680 に答える
0

jmallocを使用すると実行できますが、本当に専門家でない限りお勧めしません。Java の中心となるもの、つまりガベージ コレクションを放棄しています。あなたはCを書いているかもしれません。

Java NIO は、この方法でバイト バッファをヒープ外に割り当てます。これは、オラクルが JAR のメモリ マッピングと perm gen の廃止を目指しているところだと思います。

于 2013-02-24T17:57:06.653 に答える