|
|
Опубліковано 14.08.2017 16:49:22
|
|
|
|

Під час ініціалізації VM виникла помилка Не вдалося зарезервувати достатньо місця для купи об'єктів 3145728KB
Нещодавно працюю над програмою для Java. Спочатку мені завжди подобалося управління пам'яттю в Java, не треба хвилюватися про виділення пам'яті, просто виділяйте, сміттєвий збирач забере пам'ять за вас. Зараз програма розроблена з великою кількістю даних, і для швидкості я збираюся завантажити всю інформацію в пам'ять, що забезпечить швидку відповідь. Я все ще постійно рахую пам'ять, думаю про власний обсяг даних, якого мало б вистачити на початку (у моєму комп'ютері пам'ять 4G, хоча Windows розпізнає 3.5G, але це має бути нормально порівняно з поточним обсягом даних).
Несподівано програма першого експерименту тривала кілька годин і зіткнулася з винятком Out of Memory. Дивлячись на власні налаштування віртуальної машини, я встановив -XMS512M -Xmx1024M. Не замислюючись, я одразу змінив його на -Xms512M -Xmx2048M, і в результаті я не зміг зарезервувати достатньо місця для купи об'єктів. Програма не може піднятися. Тільки тоді я зрозумів, що існує обмеження для початкової максимальної пам'яті. Я шукав в Інтернеті і знайшов багато статей, що обговорюють цю проблему. Нарешті, я знайшов найкориснішу статтю на DEV2DEV форумі BEA
Тут модератор YuLimin провів тест і дійшов висновку:
Компанія JVM версія Максимальна пам'ять (мега) клієнт Максимальна пам'ять (мега) сервер
НД 1.5.x 1492 1520
SUN 1.5.5 (Linux) 2634 2660
НД 1.4.2 1564 1564
SUN 1.4.2 (Linux) 1900 1260
IBM 1.4.2 (Linux) 2047 N/A
BEA JRockit 1.5 (U3) 1909 1902
Зараз користуюся JDK1.6.0_05, протестував. Найголовніше в клієнтському стані — це те, що мій JDK не розпізнає параметр -Server і не може перевірити стан сервера. Оцінки приблизно однакові.
НД 1.6.0 1442 N/a
Схоже, що в Java неможливо використовувати велику пам'ять. І загально кажуть, що якщо пам'ять занадто велика, час збору сміття буде довгим. Це також зрозуміло, зазвичай збирається, коли пам'яті недостатньо, сканування 2G-пам'яті, звісно, набагато повільніше, ніж 1G, і об'єктів пам'яті більше, оцінений зв'язок експоненційно зростає.
Нижче додаються методи тестування та записи тестів YuLimin.
Метод тестування:Перевірте за допомогою команди java -XmxXXXXM -version у командному рядку, а потім поступово збільшувати значення XXXX, якщо він виконується нормально, це означає, що вказаний розмір пам'яті доступний, інакше буде надруковано повідомлення про помилку.
Перевірте максимальну підтримувану пам'ять JVM, а потім встановіть змінні середовища на системі
Назва змінної: _JAVA_OPTIONS Значення: - Xmx1G
|
Попередній:Використовується повноекранний плагін jQuery "jQuery Fullscreen Plugin"Наступний:Різниця між сертифікатами SSL, OV, DV та EV
|