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

4

1 回答 1

3

您的代码没有任何问题。您没有遇到静态块的限制。您只是用完了堆内存。地图中的每个键和值都是唯一的,当您在循环条件的末尾添加一个零时,您将创建 10 倍以上的它们。

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

于 2015-01-28T10:31:29.317 回答