0

静的ブロックで小さな値 (つまり、1000 または 10000) のループ条件を使用している場合、プログラムの実行に問題はありません。問題は、特定のコードの静的ブロックのループにあります。以下のコードを実行しているときはいつでも、 「メインクラスが見つかりませんでした」という例外が発生 します。以下のコードを参照してください。

import java.util.HashMap;
import java.util.Map;
public class TestStatic {
static HashMap<String,Integer> testMap = new HashMap<String,Integer>();

public static void main(String[] args) {
    for (Map.Entry<String,Integer> entry : testMap.entrySet()) {
        System.out.println(entry.getKey());
        System.out.println(entry.getValue());
    }
   }
 static
  {
    for(int i=0; i< 10000000; i++)
    {
        testMap.put("key_" + i, i);
    }
  }
 }

しかし、ループ条件の値を1000000に変更するたびに(0の数が1つ少なくなります)。コードは正常に動作しています。静的ブロックを実行するための時間的制約もあります。64kにサイズ制限があることは知っていますが、明確にしたいのは、この制限またはその他の理由が原因で発生していることです。

4

1 に答える 1

3

コードに問題はありません。静的ブロックの制限に遭遇していません。ヒープメモリが不足しているだけです。マップ内の各キーと値は一意であり、ループ条件の最後にゼロを追加すると、10 倍以上のキーと値が作成されます。

-Xmxを実行するときに、スイッチを使用して Java ヒープのサイズを増やすことができますjava。たとえば-Xmx1024m、自分自身に 1Gb のヒープを与えるために使用します。それでも十分ではないかもしれませんが (計算はしていません!)、すぐにわかります。

于 2015-01-28T10:31:29.317 に答える