2012-12-08 13 views
5

Possible Duplicate:
Is it possible to dynamically change maximum java heap size?コード自体にJavaヒープ領域を増やす方法はありますか?私が知っている

は、JavaランチャーのXMXのオプションがありますが、(彼らのヒープを持っています私のコードを実行するすべてのコンピュータが増加したように)の代わりにこれを行う前処理指令のいくつかの種類があります。

今のところ、java.exeは最大で280MBに達します(クラッシュする前に) - これは正常ですか?

+0

関連:http://stackoverflow.com/questions/193483/how-to-specify-jvm-argument-for-maven-built-executable-jar –

+3

*「Javaヒープを増やす方法はありますコード自体にスペースがありますか? "*いいえ - コードがロードされると、使用可能なメモリはすでに設定されています(石で)。 1つの解決策は、現在のVM内のメモリをチェックすることであり、十分でない場合は、1)より多くのメモリを持つ新しい「プロセス」を起動する。2)終了する。 –

+0

@Andrew Thompson:「新しいプロセスをより多くのメモリで起動する」これはコード内で実行できますか? –

答えて

1

はい。この単純な例を参照してください。

import java.awt.EventQueue; 
import javax.swing.JOptionPane; 
import java.io.File; 

class BigMemory { 

    public static void main(String[] args) throws Exception { 
     if (args.length==0) { 
      ProcessBuilder pb = new ProcessBuilder(
       "java", 
       "-Xmx1024m", 
       "BigMemory", 
       "anArgument" 
       ); 
      pb.directory(new File(".")); 
      Process process = pb.start(); 
      process.waitFor(); 
      System.out.println("Exit value: " + process.exitValue()); 
     } else { 
      Runnable r = new Runnable() { 
       public void run() { 
        JOptionPane.showMessageDialog(
         null, 
         "Max Memory: " + 
         Runtime.getRuntime().maxMemory() + 
         " bytes."); 
       } 
      }; 
      EventQueue.invokeLater(r); 
     } 
    } 
} 
3

答えは「いいえ」です。

起動時にメモリサイズがJVMに渡されます。 JVM内で実行されるコードは変更できません。

JVMはjavaバイトコードを実行できるjavaで書かれていないプログラムなので、それは理にかなっています。 Javaコードがそのコンテナを制御できるようにするのは安全ではありません。

+0

私はXMXルートに行きたい場合、どのJava実行ファイルにこのスタートアッププロパティを追加する必要がありますか?...私はjava.exeの検索を行いました。約2ダースの結果を得ました。 –

+0

またはこれを入力する必要がありますか? cmd.exeには? –

+0

これはコマンドラインオプションでなければなりません。あなたが世界的に設定できるものではありません。 a)あなたのマシンはあまり記憶力がないか、あるいはb)問題はあなたが "クラッシュ"が何であるかについて非常に具体的ではないと思うものではないことを示唆する妥当な値です。 IMHOクラッシュとは、処理されていない信号があることを意味します。エラーや例外ではなく、ダンプファイルが記録されます。 –

1

これを増やすことはできません。

増加できない理由は、起動時に割り当てられているためです。 JVMが起動する前に設定することができます。

あなたができることは、アプリケーションを最大限高くすることです。例えば開始時には最大値をチェックし、それほど高くなければ同じプログラムを実行します。

注:オフヒープメモリを使用している場合は、それが最大値の一部ではないため、さらにGBまたはTBでもかまいません。

As it is right now, java.exe reaches ~280MB max only (before it crashes) - is this normal?

クラッシュはまさに何かを意味する可能性があり、その理由はまったく何でもありえます。私は、それがうまくいかない理由をより詳細に調査することをお勧めします。そして、最大のメモリが問題ではないことがわかるでしょう。 (1 GBの小さなマシンがない場合、デフォルトの最大メモリは約250 MBになります)

+0

XMX属性を入力する場所はどこですか?私はJVMのコマンドラインを見つけることができません。最大のヒープサイズ以外のものがここに欠点があるのは正しいでしょう。 –

+0

これはコマンドラインでのみ設定できます。どのようにJavaプログラムを実行していますか?メインメモリはどれくらいありますか? –

+0

16GB、私はそれをcmdに入力します。exe、javaが内部または外部コマンドとして認識されない –

関連する問題