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 堆。即使这样可能还不够(我还没有计算过!)但你很快就会发现。
如果我在 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 堆。即使这样可能还不够(我还没有计算过!)但你很快就会发现。