Getting Error : Exception in thread "main" while executing program for different loop conditions in static block

Getting Error : Exception in thread "main" while executing program for different loop conditions in static block

如果我在 static 块 中的循环条件值很小(即 1000 或 10000),程序执行没有问题,它的工作。问题出在给定代码的静态块中的 loop 中。每当我执行下面的代码时,我都会收到异常 "could not find main class" 请参阅以下代码:

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)。代码工作正常。那么是否有任何时间限制来执行静态块。 我知道 大小限制 64k,但我只是想澄清一下,这是由于此限制或任何其他原因而发生的这背后。

您的代码没有任何问题。您没有 运行 陷入静态块的限制。您只是 运行ning 堆内存不足。地图中的每个键和值都是唯一的,当您在循环条件的末尾添加一个零时,您将创建 10 倍以上的键和值。

您可以在 运行 java 时使用 -Xmx 开关增加 Java 堆的大小。例如。使用 -Xmx1024m 给自己 1Gb 堆。即使这样可能还不够(我还没有计算过!)但你很快就会发现。