3

重複の可能性:
実行時にJVMヒープサイズを設定する

OutOfMemoryErrorプログラムに許可されているメモリを増やすことで、プログラムがaに遭遇したときにクラッシュするのを防ぐことはできますか?
実行時に実行できますか?

メモリを増やす理由

を使用して多くのスクリーンショットを話していましたが、java.awt.Robotしばらくすると、Vectorのメモリが不足しました。60BufferedImage でそれは出ていた。
したがって、1280 x 800の解像度、3バイトのRGB BufferedImage、および60枚の画像の後、ベクトルは出力されました。
したがって、消費されたメモリは
1280 x 800 x 60 x3=数学バイトを実行すると思います

4

4 に答える 4

3

簡単な答え-いいえ。少なくとも、ホットスポットJVMではありません。

参照:

于 2013-01-07T02:13:39.610 に答える
3

実際にヒープサイズを増やすことはできませんが、新しいヒープサイズで別のプロセスを生成することはできます。これで遊んでください:

 public class SpawnAndChangeHeap {
     public static void main(String[] args){  

         //Get the jvm heap size.  
        long heapSize = Runtime.getRuntime().totalMemory();
    JOptionPane.showMessageDialog(null, "" + heapSize );  

    if(args.length > 0 && args[0].equals("-spawn")) {

        try {
            Process proc;
                proc = Runtime.getRuntime().exec("cmd.exe /c java -Xms32m -Xmx128m SpawnAndChangeHeap /n");
        }
        catch(Exception e) {System.out.println("something went wrong");  }
    }
    System.exit(0);


     }  
}
于 2013-01-07T02:16:34.970 に答える
2

メモリサイズを動的に変更する以外の解決策を考える必要があるかもしれません。

  • まず、適切な量のメモリを割り当てます。
  • キャプチャした画像の解像度を下げる(これは、画像サイズを小さくすることで同様の問題に対して行ったことです)
  • すぐに必要でない場合と組み合わせて、画像をディスクにキャッシュする。
于 2013-01-07T02:17:26.177 に答える
2

を使用して多くのスクリーンショットを話していましたが、java.awt.RobotしばらくVectorするとメモリが不足しました。

それらをに入れないでくださいVector。それらをメモリに保存する必要はまったくありません。

代わりに、各画像を次のいずれかに保存します。

  1. 圧縮なしのZipアーカイブ(これは「数千のファイル」の作成を回避します-それ自体は問題があります)(zip圧縮は画像には何の役にも立ちません)。
  2. ビデオストリーム(ファイルを指す)。非常にうまく機能するJMFベースのバージョンについては、モンテメディアライブラリのムービーメーカーを参照してください。
于 2013-01-07T02:31:07.537 に答える