Ответственность за загрузку файлов класса несет ClassLoader. Давайте посмотрим, что произойдет, когда мы напишем наши собственные классы.
Пример 1:
class StaticTest {
static int a;
int b;
int c;
}
Теперь мы можем видеть, что класс «StaticTest» имеет 3 поля. Но на самом деле нет существования переменной b, c. Но почему ???. Ладно, посмотрим. Здесь b, c - переменная экземпляра. Поскольку переменная экземпляра получает память во время создания объекта. Итак, здесь b, c пока не получают никакой памяти. Вот почему не существует b, c. Итак, существует только существование a. Для ClassLoader у него есть только одна информация о. ClassLoader еще не распознает b, c, потому что объект еще не создан.
Давайте посмотрим другой пример: Пример 2:
class StaticTest {
public void display() {
System.out.println("Static Test");
}
public static void main(String []cmd) {
display();
}
}
Теперь, если мы попытаемся скомпилировать этот код, компилятор даст Ошибка CE. CE: отображение нестатического метода () не может ссылаться на статический контекст.
Теперь для ClassLoader это выглядит так:
class StaticTest {
public static void main(String []cmd) {
display();
}
}
В примере 2 Ошибка CE - это потому, что мы вызываем нестационарный метод из статического контекста. Таким образом, ClassLoader не может распознавать метод display () во время компиляции. Так возникает ошибка компиляции.
Вы превысили максимальный размер кучи своей JVM. Это зависит как от JVM, так и от ОС. В большинстве 32-битных систем максимальное значение будет 2 ГБ, независимо от доступной физической памяти.
По умолчанию Java будет работать в 32-битном режиме. Не забудьте указать его -d64, чтобы поместить его в режим 64 бит. После того, как вы в 64-битном режиме, вам не составит труда выделить 6-мегабайтную JVM.
На самом деле максимальный размер памяти в 32-битных системах может варьироваться, составляя до 4 ГБ, но 2 ГБ является общим значением. Часто можно перенастроить ядро, чтобы увеличить его до 3 или 3,5 ГБ. Проблема, конечно же, в том, что у вас просто нет адресного пространства, чтобы отображать больше памяти. Вы пробовали 64-битную машину?
Также не забудьте установить свой ulimit выше, прежде чем вы это сделаете.
Invalid initial heap size: -Xms256m -Xmx512m
в системе с 16 ГБ оперативной памяти (14 ГБ бесплатно) – Hack-R 21 August 2016 в 15:34