Данная публикация посвящается всем ценителям Minecraft и других игр, требующих установки Java. На днях знакомые попросили помочь: при попытке запустить Майнкрафт у них появлялось сообщение — Java Virtual Machine Launcher ошибка, как исправить сейчас расскажу.
При установке Джавы, необходимой для работы некоторых игр, отображалось следующее окно:
Она указывает на то, что для создаваемой виртуальной машины не хватает памяти. Очень часто подобная ситуация возникает, если некорректно выходить из игры (нажав Alt + F4 ) или при внезапном отключении ПК.
В моем случае, ошибка появилась после того, как пользователь случайно удалил компонент Java, потом пытался его переустановить, но на последнем этапе инсталляции отображалось вышеупомянутое окно.
На зарубежных источниках нашел два решения. Начну с более простого.
Теперь при запуске установщика Джава ошибка Java Virtual Machine Launcher не появиться.
Переходим ко второму способу.
Покажу всё на примере Minecraft.
Вы узнали, как исправить ошибку Java Virtual Machine Launcher. Но если вопросы остались, обязательно задавайте их с помощью формы комментирования внизу страницы.
Источник
Invalid or corrupt jarfile
В IntelliJ IDEA-14 создал проект, в параметрах версия Java 1.8, на моем компе запускается и из IDEA, и jar-артифакт. Перенес jar на другой комп, поставил там Java 1.8.66 распоследнюю — пишет такую ошибку при запуске. Про manifesrt ничего не знаю пока, буду читать еще.
Как вообще надо создавать нормальные стандалон-приложения на java?

Скорее всего у тебя действительно повредился файл в процессе переноса.

Ладно, попробую перенести еще раз (как доберусь до компа с исходниками), хотя сомнительно что проблема в этом.

Jar-файл это просто ZIP-архив. Попробуй его разархивировать любым архиватором. Если получится — можно дальше думать. Если не получится — значит файл повреждён.

Фигасе, действительно обычный архив! 🙂 Открывается, там оказывается запихнуто все что надо и не надо из сорцов проекта. Файл вроде не поврежден, как я и подозревал.

Покажи вывод jar tf usergrid-launcher-1.0-SNAPSHOT.jar

Виндовая (знаю где я, не бейте :)) недоконсоль закрывается и не дает прочитать что там написано. Щас буду пробовать победить это и покажу.

«jar» не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

jdk установи для начала

Хороший вопрос. Могу установить конечно, но зачем мне он на машине, где я хочу только запускать готовые приложения? Или Java-программы не будут работать на компах где есть только jre?

Будут, естественно. Но если вам нужно разрабатывать, вам нужен jdk. Почему вы удивляетесь тому, что у вас нет команды jar, если не установлен jdk?

Понял, ради этой команды сейчас качаю и установлю jdk последний. Хотя на этом компе я хотел только запустить программку, которую написал на другом, где она запускается (и где конечно и jre и jdk).

Поставил jdk, написала саксессфулли инсталлед, но jar и javac команды консоль до сих пор не знает. Наверное надо патхи приписывать руками. Не знаю в чем проблема. Как в 17 веке прямо все — консоль, ручное подключение.

В каталоге установленных программ теперь 2 папки — jre1.8.0_66 и jdk1.8.0_66, в которой своя подпапка jre. java -version в консоли пишет версию jre, javac и jar не работают. Перегружался. Монитор протирал. Мыслей нет.
Источник
Fix Minecraft Forge Error Invalid or Corrupt Jarfile
Up next
The Sims 4 is Already Running | Fix This Error on PC and Mac
Author
Steven P. Ross
Share article
Error: Invalid or Corrupt Jarfile. This is a common Minecraft error, and the fix for this issue is quite simple.
The “how to check if jar file is corrupted” is a common error that can occur when users try to install Minecraft Forge. The good news is that there are many ways for users to fix the issue.

If you’re having trouble installing Minecraft Forge due to an invalid or corrupt jarfile issue, keep reading to find out what’s causing it and how to repair it.
How to Repair a Corrupt or Invalid Jarfile in Minecraft Forge
1. Double-check that the download is complete.
You’ll receive a variety of problems if you attempt to run the game before it’s finished downloading, including the invalid or corrupt jarfile error.
Check to see whether Minecraft Forge has shown in your downloads folder. Then, make sure it’s not being blocked by your browser for any reason.
Recover the file in your browser’s download manager and try again.
2. Switch to a different browser.
Many of the customers who reported invalid or corrupt jarfile problems in Minecraft downloaded the game using Firefox.
The Minecraft Forge download seems to be often blocked by Firefox. As a result, we recommend that you try downloading the game using a different browser.
3. Install the most recent version of Java.
Make sure your computer has the most recent Java version installed. If you’re using an older version, download a newer one.
4. Turn off all background applications.
Remember to close all background applications and processes before installing Minecraft Forge or any other game or software on your computer.
Some of the applications that are currently operating on your computer may prevent the download from taking place. Alternatively, they may cause Minecraft Forge to crash when you attempt to load the launcher.
Using Task Manager or a clean start of your computer, you may close background applications.
If you’d rather utilize Task Manager, go to the Processes tab and right-click on the applications you wish to turn off. Then choose Finish Task.
You may also turn off your antivirus and firewall for a while. Certain Minecraft files may be erroneously flagged as suspicious by these applications, causing them to be blocked.
After you’ve downloaded and installed Minecraft Forge, remember to re-enable your antivirus and firewall.
We’re hoping for some assistance.
Frequently Asked Questions
How do I fix invalid or corrupt Jarfile?
A: Delete the file and then re-download it from our website.
How do I fix Minecraft Forge error?
A: The error you are receiving is most likely related to the Minecraft Forge. To fix this, try updating your version of minecraft. If that doesnt work, try using a different launcher such as MCPatcher or Mod Organizer
- invalid or corrupt jarfile windows 10
- how to fix unable to access jarfile
- error: invalid or corrupt jarfile mac
- shockbyte invalid or corrupt jarfile
- unable to access jarfile forge

Hi, I’m Steven. I run this Blog myself and I’ve been in the electronics industry for a while so I know my stuff. The guides on this website are well researched and I also have experience with most of them. Do comment if you think some information is not correct on a particular page.
Источник
*** MOROZILKA ***
Меню навигации
Пользовательские ссылки
Информация о пользователе
Вы здесь » *** MOROZILKA *** » другие сервера » не могу запустить Minecraft — Invalid or corrupt jarfile
не могу запустить Minecraft — Invalid or corrupt jarfile
Сообщений 1 страница 12 из 12
Поделиться103-06-2012 03:37:59
- Автор: FantOzer
- Админ

- Откуда: Новосибирск
- Зарегистрирован : 09-12-2009
- Приглашений: 0
- Сообщений: 10032
- Уважение: +496
- Позитив: +598
- Пол: Мужской
- Провел на форуме:
4 месяца 18 дней - Последний визит:
Сегодня 04:38:00
Не могу запустить Minecraft
Будь проклята
эта ява..) на которой работает игра.
она меня уже вымотала.
Помогите кто нибудь запустить игру.
Запускаются без проблема игра та — где НЕвозможно сменить ник..
Игра автоматом ставит имя player и хоть ты тресни.
А при подключени к серверу через какой то время выкидывает..
Если коротко, то лицензия запускается нормально но без регистрации на оф.сайте не дает сменить ник в игре.
А при запуске пиратки, что очень хотелось бы — пишет что файл инвалид.
Поделиться203-06-2012 03:38:44
- Автор: FantOzer
- Админ

- Откуда: Новосибирск
- Зарегистрирован : 09-12-2009
- Приглашений: 0
- Сообщений: 10032
- Уважение: +496
- Позитив: +598
- Пол: Мужской
- Провел на форуме:
4 месяца 18 дней - Последний визит:
Сегодня 04:38:00
Ставлю другие сборки, в т.ч. которые стоят у других игроков.. У них все норм, цепляются к серверу.
Но у меня же она даже и не запускается. пишет что — Invalid or corrupt jarfile.
Источник
Как исправить фатальную ошибку виртуальной машины Java в Windows 10
Неустранимая ошибка исключения виртуальной машины Java появляется у некоторых пользователей, когда они пытаются запустить программное обеспечение, построенное на Java. Полное сообщение об ошибке гласит: « Не удалось создать виртуальную машину Java. Ошибка: произошла фатальная исключительная ситуация. »Следовательно, Java-программа не запускается. Это несколько потенциальных исправлений для фатальной ошибки виртуальной машины Java.
Решения для исправления ошибок виртуальной машины Java
1. Установите новую системную переменную для Java
Ошибка виртуальной машины Java часто возникает, когда Java требуется больший глобальный максимальный размер кучи памяти. Пользователи исправили проблему, увеличив максимальный объем оперативной памяти, выделенной для Java. Пользователи могут сделать это, установив новую системную переменную Java следующим образом.
- Откройте «Выполнить» с помощью сочетания клавиш Windows + R.
- Введите «sysdm.cpl» в «Выполнить» и нажмите ОК , чтобы открыть окно на изображении непосредственно ниже.

- Выберите вкладку Advanced в этом окне.
- Нажмите кнопку Переменные среды , чтобы открыть окно ниже.

- Нажмите кнопку Создать под полем Системные переменные.
- Введите «_JAVA_OPTIONS» в текстовое поле «Имя переменной».

- Затем введите «–Xmx512M» в текстовом поле «Значение переменной», что увеличит объем оперативной памяти до 512 мегабайт.

- Нажмите кнопку ОК , чтобы закрыть окно.
- Затем нажмите кнопку ОК в окнах среды.
– СВЯЗАННО: Как удалить всплывающее окно «Обновление Java доступно»
2. Выберите опцию Запуск от имени администратора для Java
Ошибка виртуальной машины Java также может быть связана с недостаточными правами администратора. Таким образом, некоторым пользователям может потребоваться назначить права администратора для Java. Пользователи могут назначать права администратора для Java в Windows 10 следующим образом.
- Откройте Cortana с помощью сочетания клавиш Windows + Q.
- Введите «Java» в поле поиска.
- Затем щелкните правой кнопкой мыши Java и выберите Открыть местоположение файла , чтобы открыть папку Java в проводнике.

- Теперь пользователи могут щелкнуть правой кнопкой мыши файл java.exe и выбрать Свойства .

- Выберите вкладку «Совместимость».

- Выберите Запустить эту программу от имени администратора .
- Выберите параметр Применить .
- Нажмите ОК , чтобы закрыть окно.
3. Переустановите Java
- Переустановка Java может также исправить ошибку виртуальной машины Java для некоторых пользователей. Сначала удалите установленную версию Java, введя «appwiz.cpl» в «Выполнить» и нажав ОК .

- Введите «Java» в поле поиска.
- Выберите Java и нажмите Удалить .
- Нажмите Да в любом открывшемся окне подтверждения.
- После этого перезапустите Windows.
- Затем откройте страницу загрузки Java в браузере.

- Пользователям нужна 32-битная Java для 32-битных программ и 64-битная Java для 64-битного программного обеспечения. В случае сомнений лучше всего загрузить и установить обе версии Java, нажав Windows Offline и Windows Offline 64-bit .
- После этого откройте мастер установки Java.
- Нажмите кнопку Установить в мастере настройки.

Таким образом, пользователи могут исправить фатальную ошибку виртуальной машины Java. Эти разрешения обычно исправляют фатальную ошибку виртуальной машины Java, чтобы пользователи могли запускать необходимое программное обеспечение Java.
Источник

Данная публикация посвящается всем ценителям Minecraft и других игр, требующих установки Java. На днях знакомые попросили помочь: при попытке запустить Майнкрафт у них появлялось сообщение — Java Virtual Machine Launcher ошибка, как исправить сейчас расскажу.
Не хватает памяти
При установке Джавы, необходимой для работы некоторых игр, отображалось следующее окно:

Она указывает на то, что для создаваемой виртуальной машины не хватает памяти. Очень часто подобная ситуация возникает, если некорректно выходить из игры (нажав Alt + F4 ) или при внезапном отключении ПК.
В моем случае, ошибка появилась после того, как пользователь случайно удалил компонент Java, потом пытался его переустановить, но на последнем этапе инсталляции отображалось вышеупомянутое окно.
На зарубежных источниках нашел два решения. Начну с более простого.
Настройка переменной среды
- Открываем панель управления. В Windows 7 это можно сделать через меню «Пуск», в «десятке» достаточно кликнуть правой кнопкой мышки по кнопке «Старт» (или нажать Win + X ), и выбрать из списка нужный элемент:

- Переходим к разделу «Система»:

- Слева кликаем по ссылке «Дополнительные параметры…»:

- В новом окне снизу есть кнопка «Переменные среды», которую стоит нажать:

- Кликаем по кнопке «Создать…», присваиваем новой переменной:
имя «_JAVA_OPTIONS»
значение «-Xmx512M»

- Обязательно сохраняем все изменения, нажав на ОК. Перезагрузка компьютера не требуется.
Теперь при запуске установщика Джава ошибка Java Virtual Machine Launcher не появиться.
Переходим ко второму способу.
Создание файла запуска
Покажу всё на примере Minecraft.
- Открываем пользовательскую папку, где хранятся игровые настройки. Для этого нажимаем Win + R и пишем команду:
%appdata%
- На экране отобразится каталог, в котором нужно найти игровую директорию, войти в неё и внутри создать новый текстовый документ (Блокнот):

- Туда стоит записать следующую фразу:
java -Xms650m -jar "c:UsersUSER_NAMEAppDataRoaming.minecraftminecraft.exe

Вместо USER_NAME пишем название своего аккаунта. Оно указано в адресной строке окна. Учетная запись не должна содержать русских символов. Только латинские (английские), иначе способ не сработает.
- Теперь нажимаем на пункт меню «Файл», затем выбираем «Сохранить как». Указываем имя «minecraft.bat» и указываем тип «Все…», как показано на скриншоте:

- Осталось только создать ярлык для созданного элемента и отправить его на рабочий стол, чтобы через него запускать игру.
Видео
Вы узнали, как исправить ошибку Java Virtual Machine Launcher. Но если вопросы остались, обязательно задавайте их с помощью формы комментирования внизу страницы.
Рекомендуем:
- Устраняем ошибку «Опаньки» в Google Chrome
- Что делать если не работает безопасный режим в Windows 10
- Как восстановить удаленные фотографии, сообщения, контакты на iPhone?
- d3dx9_43.dll скачать, чтобы устранить ошибку на компьютере
- Четыре способа получить роль администратора в Windows 10

Вам помогло? Поделитесь с друзьями — помогите и нам!
- Upto my knowledge, Heap space is occupied by instance variables only. If this is correct, then why this error occurred after running fine for sometime as space for instance variables are alloted at the time of object creation.
That means you are creating more objects in your application over a period of time continuously. New objects will be stored in heap memory and that’s the reason for growth in heap memory.
Heap not only contains instance variables. It will store all non-primitive data types ( Objects). These objects life time may be short (method block) or long (till the object is referenced in your application)
- Is there any way to increase the heap space?
Yes. Have a look at this oracle article for more details.
There are two parameters for setting the heap size:
-Xms:, which sets the initial and minimum heap size
-Xmx:, which sets the maximum heap size
- What changes should I made to my program so that It will grab less heap space?
It depends on your application.
-
Set the maximum heap memory as per your application requirement
-
Don’t cause memory leaks in your application
-
If you find memory leaks in your application, find the root cause with help of profiling tools like MAT, Visual VM , jconsole etc. Once you find the root cause, fix the leaks.
Important notes from oracle article
Cause: The detail message Java heap space indicates object could not be allocated in the Java heap. This error does not necessarily imply a memory leak.
Possible reasons:
- Improper configuration ( not allocating sufficiant memory)
- Application is unintentionally holding references to objects and this prevents the objects from being garbage collected
- Applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown.
On a different note, use better Garbage collection algorithms ( CMS or G1GC)
Have a look at this question for understanding G1GC
- Upto my knowledge, Heap space is occupied by instance variables only. If this is correct, then why this error occurred after running fine for sometime as space for instance variables are alloted at the time of object creation.
That means you are creating more objects in your application over a period of time continuously. New objects will be stored in heap memory and that’s the reason for growth in heap memory.
Heap not only contains instance variables. It will store all non-primitive data types ( Objects). These objects life time may be short (method block) or long (till the object is referenced in your application)
- Is there any way to increase the heap space?
Yes. Have a look at this oracle article for more details.
There are two parameters for setting the heap size:
-Xms:, which sets the initial and minimum heap size
-Xmx:, which sets the maximum heap size
- What changes should I made to my program so that It will grab less heap space?
It depends on your application.
-
Set the maximum heap memory as per your application requirement
-
Don’t cause memory leaks in your application
-
If you find memory leaks in your application, find the root cause with help of profiling tools like MAT, Visual VM , jconsole etc. Once you find the root cause, fix the leaks.
Important notes from oracle article
Cause: The detail message Java heap space indicates object could not be allocated in the Java heap. This error does not necessarily imply a memory leak.
Possible reasons:
- Improper configuration ( not allocating sufficiant memory)
- Application is unintentionally holding references to objects and this prevents the objects from being garbage collected
- Applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown.
On a different note, use better Garbage collection algorithms ( CMS or G1GC)
Have a look at this question for understanding G1GC
Какие бывают типы OutOfMemoryError или из каких частей состоит память java процесса
Если вы словили OutOfMemoryError, то это вовсе не значит, что ваше приложение создает много объектов, которые не могут почиститься сборщиком мусора и заполняют всю память, выделенную вами с помощью параметра -Xmx. Я, как минимум, могу придумать два других случая, когда вы можете увидеть эту ошибку. Дело в том, что память java процесса не ограничивается областью -Xmx, где ваше приложение программно создает объекты.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места.
1. java.lang.OutOfMemoryError: Java heap space
Не хватает место в куче, а именно, в области памяти в которую помещаются объекты, создаваемые программно в вашем приложении. Размер задается параметрами -Xms и -Xmx. Если вы пытаетесь создать объект, а места в куче не осталось, то получаете эту ошибку. Обычно проблема кроется в утечке памяти, коих бывает великое множество, и интернет просто пестрит статьями на эту тему.
2. java.lang.OutOfMemoryError: PermGen space
Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize. Что там лежит и как бороться с OutOfMemoryError возникающей там, я уже описал подробнейшим образом тут.
3. java.lang.OutOfMemoryError: GC overhead limit exceeded
Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и GC постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit, но, конечно же, её надо не отключать, а либо решать проблему утечки памяти, либо выделять больше объема, либо менять настройки GC.
4. java.lang.OutOfMemoryError: unable to create new native thread
Впервые я столкнулся с данной ошибкой несколько лет назад, когда занимался нагрузочным тестированием и пытался выяснить максимальное количество пользователей, которые могут работать с нашим веб-приложением. Я использовал специальную тулзу, которая позволяла логинить пользователей и эмулировать их стандартные действия. На определенном количестве клиентов, я начал получать OutOfMemoryError. Не особо вчитываясь в текст сообщения и думая, что мне не хватает памяти на создание сессии пользователя и других необходимых объектов, я увеличил размер кучи приложения (-Xmx). Каково же было мое удивление, когда после этого количество пользователей одновременно работающих с системой только уменьшилось. Давайте подробно разберемся как же такое получилось.
На самом деле это очень просто воспроизвести на windows на 32-битной машине, так как там процессу выделяется не больше 2Гб.
Допустим у вас есть приложение с большим количеством одновременно работающих пользователей, которое запускается с параметрами -Xmx1024M -XX:MaxPermSize=256M -Xss512K. Если всего процессу доступно 2G, то остается свободным еще коло 768M. Именно в данном остатке памяти и создаются стеки потоков. Таким образом, примерно вы можете создать не больше 768*(1024/512)=1536 (у меня при таких параметрах получилось создать 1316) нитей (см. рисунок в начале статьи), после чего вы получите OutOfMemoryError. Если вы увеличиваете -Xmx, то количество потоков, которые вы можете создать соответственно уменьшается. Вариант с уменьшением -Xss, для возможности создания большего количества потоков, не всегда выход, так как, возможно, у вас существуют в системе потоки требующие довольно больших стеков. Например, поток инициализации или какие-нибудь фоновые задачи. Но все же выход есть. Оказывается при программном создании потока, можно указать размер стека: Thread(ThreadGroup group, Runnable target, String name,long stackSize). Таким образом вы можете выставить -Xss довольно маленьким, а действия требующие больших стеков, выполнять в отдельных потоках, созданных с помощью упомянутого выше конструктора.
Более подробно, что же лежит в стеке потока, и куда уходит эта память, можно прочитать тут.
Конечно, вам может показаться данная проблема слегка надуманной, так как большинство серверов нынче крутиться на 64-битной архитектуре, но все же считаю данный пример весьма полезным, так как он помогает разобраться из каких частей состоит память java-процесса.
3.2 Understand the OutOfMemoryError Exception
One common indication of a memory leak is the java.lang.OutOfMemoryError exception. Usually, this error is thrown when there is insufficient space to allocate an object in the Java heap. In this case, The garbage collector cannot make space available to accommodate a new object, and the heap cannot be expanded further. Also, this error may be thrown when there is insufficient native memory to support the loading of a Java class. In a rare instance, a java.lang.OutOfMemoryError may be thrown when an excessive amount of time is being spent doing garbage collection and little memory is being freed.
When a java.lang.OutOfMemoryError exception is thrown, a stack trace is also printed.
The java.lang.OutOfMemoryError exception can also be thrown by native library code when a native allocation cannot be satisfied (for example, if swap space is low).
An early step to diagnose an OutOfMemoryError exception is to determine the cause of the exception. Was it thrown because the Java heap is full, or because the native heap is full? To help you find the cause, the text of the exception includes a detail message at the end, as shown in the following exceptions.
In other cases, and in particular for a long-lived application, the message might be an indication that the application is unintentionally holding references to objects, and this prevents the objects from being garbage collected. This is the Java language equivalent of a memory leak. Note: The APIs that are called by an application could also be unintentionally holding object references.
One other potential source of this error arises with applications that make excessive use of finalizers. If a class has a finalize method, then objects of that type do not have their space reclaimed at garbage collection time. Instead, after garbage collection, the objects are queued for finalization, which occurs at a later time. In the Oracle Sun implementation, finalizers are executed by a daemon thread that services the finalization queue. If the finalizer thread cannot keep up, with the finalization queue, then the Java heap could fill up and this type of OutOfMemoryError exception would be thrown. One scenario that can cause this situation is when an application creates high-priority threads that cause the finalization queue to increase at a rate that is faster than the rate at which the finalizer thread is servicing that queue.
If this type of the OutOfMemoryError exception is thrown, you might need to use troubleshooting utilities on the operating system to diagnose the issue further. For more information about tools available for various operating systems, see Native Operating System Tools.
CompressedClassSpaceSize of 4294967296 is invalid; must be between 1048576 and 3221225472.
Note: There is more than one kind of class metadata — klass metadata and other metadata. Only klass metadata is stored in the space bounded by CompressedClassSpaceSize . The other metadata is stored in Metaspace .
Русские Блоги
Итак, обычно есть две причины этой аномалии:
1. В программе есть бесконечный цикл.
2. Программа занимает слишком много памяти, что превышает максимальное значение, установленное кучей JVM.
В первом случае вам необходимо самостоятельно проверить программный код, поэтому я не буду здесь говорить больше.
Во втором случае мы вручную расширяем настройки параметров кучи JVM. Настройка кучи JVM относится к настройке пространства памяти, которое JVM может выделить и использовать во время выполнения программы java. Когда JVM запускается, куча JVM автоматически устанавливает значение размера кучи. Обычно значение по умолчанию для начального пространства (например, -Xms) составляет 1/64 физической памяти, а максимальное пространство составляет 1/4 физической памяти. Его можно установить с помощью таких параметров, как -Xmn -Xms -Xmx, предоставляемых JVM. Вот объяснение значения каждого параметра:
-Xms: начальное значение
-Xmx: максимум
-Xmn: минимальное значение
Размер кучи не должен быть слишком маленьким или слишком большим. Если параметр слишком мал, скорость отклика программы будет ниже, потому что сборщик мусора занимает больше времени, а приложение выделяет меньше времени на выполнение. Слишком большой размер также приведет к потере места и повлияет на нормальную работу других программ. Размер кучи не должен превышать 80% доступной физической памяти. Рекомендуется установить одинаковые параметры -Xms и -Xmx, а -Xmn составляет 1/4 значения -Xmx.
Основные методы настройки следующие:
1. Этот параметр добавляется при выполнении файла класса JAVA, где className — это имя класса, который необходимо выполнить. (Включая имя пакета) Например: java -Xms32m -Xmx800m className Это не только решает проблему, но и скорость выполнения намного выше, чем когда она не установлена. Если это тест разработки, вы также можете установить его прямо в eclipse. Введите -Xms32m -Xmx800m в аргументы виртуальной машины в Eclipse -> run -arguments.
2. Вы можете изменить системные переменные среды в Windows и добавить JAVA_OPTS = -Xms64m -Xmx512m.
3. Если вы используете tomcat под окнами, вы можете добавить в C: tomcat5.5.9 bin catalina.bat (конкретный путь зависит от местоположения вашего tomcat): установить JAVA_OPTS = -Xms64m -Xmx256m (размер зависит от вашей собственной памяти) Местоположение: rem Угадайте CATALINA_HOME, если не определено Добавьте соответствующее в этой строке.
4. Если это система Linux, добавьте набор JAVA_OPTS = ’- Xms64 -Xmx512’ перед /bin/catalina.sh
Поскольку программе необходимо прочитать около 10 Вт строк записей из данных для обработки, возникает ошибка типа java.lang.OutOfMemoryError: пространство кучи Java появляется при чтении 9 Вт.
Проверка в Интернете может быть причиной того, что параметр стека JAVA слишком мал.
Согласно ответам в Интернете, существует примерно два решения:
1. Задайте переменные среды.
set JAVA_OPTS= -Xms32m -Xmx512m
можно изменить в соответствии с объемом памяти вашего компьютера, но моя проверка этого метода не решила проблему. Это может быть где еще нужно установить.
2、java -Xms32m -Xmx800m className
— добавить этот параметр при выполнении файла класса JAVA, где className — это фактическое имя класса, который должен быть выполнен. (Включая название пакета)
Это решает проблему. И скорость выполнения намного выше, чем без настройки.
Если вы можете использовать Eclispe при тестировании, вам необходимо ввести параметр -Xms32m -Xmx800m в аргументы виртуальной машины в Eclipse -> run -arguments.
java.lang.OutOfMemoryError: Java heap space
Исключение возникает при использовании программы Java для запроса большого количества данных из базы данных:
java.lang.OutOfMemoryError: Java heap space
В JVM, если 98% времени используется для сборки мусора, а доступный размер кучи меньше 2%, будет выдано это сообщение об исключении.
Настройка кучи JVM относится к настройке пространства памяти, которое JVM может выделить и использовать во время выполнения программы java.
JVM автоматически установит значение размера кучи при запуске.Его начальное пространство (-Xms) составляет 1/64 физической памяти, а максимальное пространство (-Xmx) — 1/4 физической памяти. Его можно установить с помощью таких параметров, как -Xmn -Xms -Xmx, предоставляемых JVM.
Например: java -jar -Xmn16m -Xms64m -Xmx128m MyApp.jar
Если размер кучи установлен слишком маленьким, в дополнение к этим аномальным сообщениям вы обнаружите, что скорость отклика программы снижается. Сборщик мусора занимает больше времени, а приложение выделяет меньше времени на выполнение.
Размер кучи не должен превышать 80% доступной физической памяти.Обычно для параметров -Xms и -Xmx должны быть установлены одинаковые значения, а -Xmn составляет 1/4 значения -Xmx.
Параметры размера кучи -Xms -Xmn не должны превышать размер физической памяти. В противном случае появится сообщение «Ошибка при инициализации виртуальной машины. Не удалось зарезервировать достаточно места для кучи объектов».
==========================================================
После ночи напряженной работы я наконец завершил программу замены файлов для указанной строки, но поскольку я хочу заменить слишком много файлов html для общесайтовой программы, поэтому затмение всегда заканчивается в каталоге После сообщения об исключении java.lang.OutOfMemoryError: пространство кучи Java произошел сбой.
Я подумал, что слишком поздно перерабатывать из-за частых операций, поэтому я добавил Thread.sleep (1000) после каждого цикла и обнаружил, что он умрет в этом каталоге, поэтому я изменил 1000 на 5000 или умер там. Я думаю, что это может быть не так просто перерабатывать, возможно, JVM Sun просто не выпускает для этой ситуации.
Затем я добавил -Xmx256M к параметру запуска, на этот раз все было нормально.
Подумав об этом, я до сих пор мало что знаю о принципах сборки мусора, я проверил это в Интернете и нашел несколько хороших статей.
Также существуют: Управление кучей Java — сборка мусора. Следует отметить следующие моменты, которые могут использоваться в качестве рекомендаций при написании программ:
(1) Не пытайтесь предполагать время, когда происходит сборка мусора, причем все это неизвестно. Например, временный объект в методе становится бесполезным после вызова метода, и его память может быть освобождена в это время.
(2) Java предоставляет несколько классов, которые занимаются сборкой мусора, и предоставляет способ принудительного вызова функции сборки мусора System.gc (), но это также ненадежный метод. Java не гарантирует, что сборка мусора будет запускаться каждый раз при вызове этого метода. Она просто отправляет такой запрос в JVM. Неизвестно, выполняется ли сборка мусора на самом деле.
(3) Выберите подходящий вам сборщик мусора. Вообще говоря, если система не предъявляет особых требований к производительности, вы можете использовать параметры JVM по умолчанию. В противном случае вы можете рассмотреть возможность использования целевых сборщиков мусора.Например, инкрементные сборщики больше подходят для систем с высокими требованиями к работе в реальном времени. Система имеет более высокую конфигурацию и больше простаивающих ресурсов, вы можете рассмотреть возможность использования параллельного сборщика меток / разверток.
(4) Ключевая и сложная проблема — это утечки памяти. Хорошие навыки программирования и строгое отношение к программированию всегда являются самыми важными. Не позволяйте небольшой собственной ошибке вызвать большую дыру в памяти.
(5) Освободите ссылки на бесполезные объекты как можно скорее.
Когда большинство программистов используют временные переменные, они автоматически устанавливают для ссылочной переменной значение null после выхода из активной области (области), что означает, что сборщик мусора будет собирать объект. Вы должны обратить внимание на то, отслеживается ли объект, на который указывает ссылка, если да, удалите прослушиватель, а затем назначьте нулевое значение.
Другими словами, лучше контролировать операции частого обращения к памяти и освобождения памяти самостоятельно, но метод System.gc () может быть неприменим. Лучше использовать finalize для принудительного выполнения или написать свой собственный метод finalize.
Я обнаружил ошибку TOMCAT: java.lang.OutOfMemoryError: пространство кучи Java, поэтому я проверил информацию и нашел решение:
If Java runs out of memory, the following error occurs:
Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
Java heap size can be increased as follows:
java -Xms -Xmx
Defaults are:
java -Xms32m -Xmx128m
Если вы используете выигрыш
/tomcat/bin/catalina.bat плюс следующая команда:
set JAVA_OPTS=-Xms32m -Xmx256m
Если вы используете unix / linux
/tomcat/bin/catalina.sh плюс следующая команда:
JAVA_OPTS=»-Xms32m -Xmx256m»
инструмент просмотра и анализа памяти jvm
В отрасли существует множество мощных инструментов для профилей Java, таких как Jporfiler и yourkit. Я не хочу говорить об этих платных вещах. Я хочу сказать, что сама java обеспечивает большой мониторинг памяти. Маленькие инструменты, перечисленные ниже инструменты — лишь небольшая часть. Все еще довольно интересно внимательно изучить инструменты jdk 🙂
1: вывод журнала gc
-verbose: gc и -XX: + PrintTenuringDistribution и т. д.
Код коллекции HTML-кода
Usage:
jmap -histo (to connect to running process and print histogram of java object heap
jmap -dump: (to connect to running process and dump java heap)
dump-options: format=b binary default file=
dump heap to
Example: jmap -dump:format=b,file=heap.bin
jmap -dump:file=c:dump.txt 340
Обратите внимание, что 340 — это pid java-процесса моей машины. Размер выгруженного файла превышает 10 мегабайт, и я только что открыл tomcat и запустил очень простое приложение без какого-либо доступа. Его можно представить на большом и загруженном сервере. , Насколько большим должен быть файл дампа? Что вам нужно знать, так это то, что информация о файле дампа очень примитивна и определенно не подходит для просмотра людьми напрямую, а содержимое, отображаемое jmap -histo, слишком простое, например, оно только показывает, сколько памяти занимают определенные типы объектов и количество этих объектов. , Но нет более подробной информации, например, кто создал эти объекты. Итак, какая польза от файла дампа? Конечно полезно, потому что есть инструмент для анализа файла дампа памяти jvm.
6: анализатор памяти eclipse
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
S0: Зона susvivor0 нового поколения, коэффициент использования площадей 54 . 62%
S1: область susvivor1 нового поколения, коэффициент использования пространства составляет 0,00% (поскольку второй второстепенный сбор не был выполнен)

Совместимость : Windows 10, 8.1, 8, 7, Vista, XP
Загрузить размер : 6MB
Требования : Процессор 300 МГц, 256 MB Ram, 22 MB HDD
Ограничения: эта загрузка представляет собой бесплатную ознакомительную версию. Полный ремонт, начиная с $ 19.95.
Ошибка запуска виртуальной машины Java обычно вызвано неверно настроенными системными настройками или нерегулярными записями в реестре Windows. Эта ошибка может быть исправлена специальным программным обеспечением, которое восстанавливает реестр и настраивает системные настройки для восстановления стабильности
Если у вас есть ошибка Java Virtual Machine Launcher, мы настоятельно рекомендуем вам Загрузка (ошибка запуска виртуальной машины Java) Repair Tool .
This article contains information that shows you how to fix Java Virtual Machine Launcher error both (manually) and (automatically) , In addition, this article will help you troubleshoot some common error messages related to Java Virtual Machine Launcher error that you may receive.
Примечание: Эта статья была обновлено на 2019-11-14 и ранее опубликованный под WIKI_Q210794
Contents [show]
Значение ошибки Java Machine Machine Launcher?
Ошибка или неточность, вызванная ошибкой, совершая просчеты о том, что вы делаете. Это состояние неправильного суждения или концепции в вашем поведении, которое позволяет совершать катастрофические события. В машинах ошибка — это способ измерения разницы между наблюдаемым значением или вычисленным значением события против его реального значения.
Это отклонение от правильности и точности. Когда возникают ошибки, машины терпят крах, компьютеры замораживаются и программное обеспечение перестает работать. Ошибки — это в основном непреднамеренные события. В большинстве случаев ошибки являются результатом плохого управления и подготовки.
Причины ошибки запуска виртуальной машины Java?
Если вы получили эту ошибку на своем ПК, это означает, что произошла сбой в работе вашей системы. Общие причины включают неправильную или неудачную установку или удаление программного обеспечения, которое может привести к недействительным записям в вашем реестре Windows, последствиям атаки вирусов или вредоносных программ, неправильному отключению системы из-за сбоя питания или другого фактора, кто-то с небольшими техническими знаниями, случайно удалив необходимый системный файл или запись в реестре, а также ряд других причин. Непосредственной причиной ошибки «Ошибка запуска виртуальной машины Java» является неспособность правильно выполнить одну из своих обычных операций с помощью системного или прикладного компонента.
More info on Java Virtual Machine Launcher error
разрабатывать собственные приложения или апплеты Java (см. объяснение на странице загрузки Sun, http: //www.oracle.com/technetwork/java/javase/downloads/index.html). битный процессор, так как это другая вещь, о которой сообщение об ошибке упоминается? Если вы не разработчик, у вас, вероятно, неправильный тип, попробуйте все.
Я не могу избавиться от этого установленного Java, который ищет компонент, которого у вас нет. JDK относится к набору разработчиков Java, который необходим только в том случае, если вы собираетесь всплывать каждый раз, когда я открываю свой компьютер. Я имею в виду, у вас есть шанс получить AMD 64
При запуске эта ошибка всегда появляется из «Java Virtual Machine Launcher», говоря: «Программа не могла найти основной класс, программа выйдет». Его действительно раздражает, я задавался вопросом, знает ли кто-нибудь, как я могу избавиться от него? Ошибка запуска виртуальной машины Java продолжает появляться
отвечая на ваш запрос о помощи. Благодарим вас за терпение и снова извините за задержку.
************************************************** *
Нам нужно увидеть некоторую информацию о том, что происходит на вашем компьютере. Найдены записи IFEO. Следуйте инструкциям, которые поп-тема не была умышленно упущена.
Я HelpBot: автоматизированная программа, разработанная для того, чтобы время от времени заразился мой компьютер. остальной части этого сообщения. Обратите внимание, что ваш A / V и снова подключитесь к Интернету. продолжает появляться каждую минуту или около того.
для публикации результатов.
Привет, это похоже на некоторые УСЛУГИ / ДРАЙВЕРЫ ===============
, Блокнот откроется с объяснением об инструменте.
Здесь, на Bleeping Computer, мы время от времени перегружаемся, стираем файл servidorcito.jar (это испанский для «маленького сервера»). Наша миссия — помочь всем, кто в ней нуждается, но иногда это помогает сотрудникам Bleeping Computer помочь вам! Запустите проверку, включите Защитник * Отключено / Обновлено *
SP: AVG AntiVirus Free Edition 2013 * Включено / Обновлено *
.
============== Запуск процессов ===============
, Это сообщение содержит очень важную информацию, поэтому, пожалуйста,
и мы стараемся не отставать. Откроется небольшой ящик, после чего появится следующее диалоговое окно с результатами.
Интернет и отключить всю антивирусную защиту. Никто не читал все это, прежде чем делать . массивы ошибок: запуск виртуальной машины Java, является ли это шпионским ПО?
уважаем Русико. С C: Program Files Yahoo! Companion Installs cpn yt.dll
O2 — BHO: Yahoo!
Любая помощь возникла бы ошибка, но я не могу остановить ее. В поле ошибки находится заголовок JAVA VIRTUAL MACHINE LAUNCHER это сообщение при первой загрузке. Спасибо.
и сообщение об ошибке это НЕ МОЖЕТ НАЙТИ ГЛАВНЫЙ КЛАСС. ПРОГРАММА.
совсем недавно мой компьютер отправил мне
Вы действительно заслуживаете комиссию за поле битвы или что-то в этом роде.
и все кажется, что там хорошо работает. Это НЕ происходит во вторичной учетной записи 1.6.0_13
На этом компьютере есть учетные записи пользователей 2, оба являются администраторами. Любой или переключая пользователя на основную учетную запись .
? Виртуальная машина Java
Произошло фатальное исключение.
Программа будет закрыта?
DomLuc, спасибо за своевременный ответ, где проблема? Может ли это привести к простому, но эффективному решению моей проблемы! Есть ли способ отслеживать, что сообщения об ошибках, сложенные 20 при запуске главной учетной записью, не нашли ничего близкого к тому, чтобы помочь.
XP Home Edition Версия 2002
SP3
Dell Dimension 8400
Предложения Java JRE? Большинство других значков, которые я нажимаю на точку, которая устранит это. У меня есть googled сопли из этого, и дальше будет также производить эту ошибку. Я не могу сделать восстановление системы во время загрузки личных настроек? обработать?
Затем я получу ошибку запуска виртуальной машины java. Кто-нибудь знает на иностранном языке китайский / jap рода. Я получаю кучу ошибок на моем компьютере. Ill post скриншоты, если это так?
Запрограммируйте его, он говорит Не удалось найти основной класс.
По-прежнему имеют такое же сообщение об ошибке при открытии программы. Что такое ошибка EXACT и проблема с запуском виртуальной машины Java при попытке открыть программу. Я уже не знал всех предыдущих версий java, какие программы вызывают ошибку Java?
Любая помощь и переустановка их со всеми новыми современными версиями.
Привет, у меня есть шлюз с окнами xp pro sp3, и я был бы благодарен. Проблема запуска виртуальной машины Java
Я запускаю XP, и все остальное работает нормально. Это ничего не значит, что выйдет. Программа, но больше раздражает. В сообщении говорится: «Может ли запустить Launcher» с большим красным «X» в нем, который имеет кнопку «ОК» для продолжения.
Когда мой Dell загружается, я получаю всплывающее окно под названием «Виртуальная машина Java избавиться от этого сообщения?
Что мне нужно сделать, чтобы не найти основной класс. Решено: запуск виртуальной машины java
Программа выйдет из игры «—хороши, я нахожусь в техасе, пожалуйста, присылайте к дьявольским веб-сканирующим сценариям электронной почты.
Вы будете получать спам от [email protected]
Возможно, вы захотите снять свою почту со своей почты.
диалоговое окно «java virtual machine launcher» «не может найти основной класс. Решено: запуск виртуальной машины JAVA
Программа хочет выйти
Любые мысли о том, как я говорю, что говорится —
Пусковая установка виртуальной машины Java
не может найти основной класс. Благодаря,
может исправить это сообщение об ошибке.
При первой загрузке моего компьютера я получаю всплывающее окно с ошибкой Quickie — сообщение о запуске Java Virtual Machine Launcher
Программа выйдет. «Это очень раздражает, и я попробовал разные загрузки, чтобы исправить это. Спасибо за предложения?
Когда я загружаюсь, я получаю сообщение так много. Любой «Java Virtual Machine Launcher» не смог найти основной класс.
Скачайте утилиту для удаления Junkware на свой рабочий стол. Закройте защитное программное обеспечение, чтобы избежать возможных конфликтов. Запустите инструмент, дважды щелкнув его. Для получения информации об этой загрузке, пожалуйста, посетите
на ваш Desktop1. Лицензия на этой веб-странице: TurorialLink 1Link 2IMPORTANT .
Сохраните ComboFix.exe, они не мешают работе ComboFix.3. Закройте / отключите все антивирусные и антивирусные программы, поэтому Менеджер, ANSYS, Inc.
Я взял это и положил в свой чип 256, чтобы узнать, есть ли эта проблема с ME.
У меня есть Рам и что-то об ошибке с JAVA. У меня 512, и все прошло хорошо. Меня никогда не ценили.
Поэтому я снова попробовал, и когда он загружает игру, poof, она автоматически перезагружается. Когда я иду на сайт, чтобы играть в онлайн, возможно, баран плохо, и похоже, что оба они в порядке. Я убираю установленную игру, моя система приходит с ошибкой и / или перезагружается. Ошибка говорит, что у меня сейчас не хватает бара.
Я продолжаю получать java-сообщение, не могу загрузить java-ошибку виртуальной машины, найденную информацию об изменении окружающей среды, но никто не работает: (пожалуйста, сообщите
Я попытался удалить или удалить любые java-файлы и начать с нуля также с помощью окон 10.
Привет, я отправил сообщение с фатальным исключением и закрою
Как это исправить? Ошибка: не удалось создать виртуальную машину Java
Программа будет закрыта.’ Почему он делает инструкции в этой статье советника ПК? Кликните сюда
Вы пробовали следовать этому и как я могу это исправить?
Хорошо, я купил игру под названием Minecraft для моей дочери. Версия Java: http://javatester.org/version.html
какая у вас версия? Когда мы пытались загрузить и запустить его, появляется сообщение об ошибке, что в окне LIVE: что он говорит?
Перейдите сюда: http://javatester.org/enabled.html и сообщите, что он говорит
В таком случае, пожалуйста, пройдите на жаргоне! Программа будет закрыта.’
Я действительно не понимаю, что это значит, я бы очень признателен за любую помощь или совет.
Перейдите сюда, чтобы подтвердить:
‘Ошибка: не удалось создать виртуальную машину Java.’
‘Ошибка: произошло фатальное исключение. Сегодня утром я не технически настроен и до сих пор не смог его использовать. Виртуальная машина Java — Не удается найти ошибку основного класса
Любые предложения будут высоко ценится.
вы используете? OS = windows 98, я, ошибка виртуальной машины, которая сказала: «Не могу найти главный класс». Я попытался установить Azureus, но получил «Java 2k, xp и т. Д.».
Какая ОС сделала что-то неправильно?
На прошлой неделе у меня была огромная проблема с вирусом / трояном. у меня есть
Вы установили java 5 release 9? Может быть, я выдаю то, что Chaslang помог мне решить — он был потрясающим. В рамках удаления malaware я должен был удалить Java, который был на моем компьютере, и заменить его на Sun Java.
Пожалуйста, помогите, если включены через мою систему. Пожалуйста, установите, они помогут, но теперь в строке справки также возникают проблемы с Java. Я попытался снова установить Java, и он сообщает мне сообщение «Нет поддержки Java.
Я работаю над вами, может быть . Я вышел на пенсию и могу загрузить последнюю версию Java из Oracle по крайней мере в 10 раз. Я пытался получить доступ, не вижу его . Я пытался связаться с виртуальной машиной HP java ».
То же самое я хотел загрузить не из-за ошибки! Я использую эту проблему для недель 2 . Я пытался подключиться к Интернету, чтобы поговорить с HP, поскольку я обнаружил, что не могу позволить себе заплатить кому-то . Вам нужна Java, чтобы сделать это, и я, конечно, охват.
Теперь я получаю сообщение об ошибке, что игра Vista с IE 8. Я убедился, что все Java-иконы стреляют, чтобы найти какие-либо проблемы. Они делают ошибку. Я получаю
Я буду держать POGO, как и раньше. благодаря
что я в курсе, и установка не требуется. Я использовал POGO, беспокоя его. Виртуальная машина Java?
новые компьютеры с Windows XP Professional. Здесь мне нужна виртуальная машина Java. Мне все время говорят об этом, и это бесплатно? Одной из проблем, с которыми я столкнулся сейчас, является
Кто-нибудь знает, где я могу получить: http://ftp.uni-stuttgart.de/pub/systems/win95/fixes/VM/msjavx86.exe
Привет, я недавно купил два факта, что я не могу использовать Java.
![]()
Здравствуйте. Данная публикация посвящается всем ценителям Minecraft и других игр, требующих установки Java. На днях знакомые попросили помочь: при попытке запустить Майнкрафт у них появлялось сообщение — Java Virtual Machine Launcher ошибка, как исправить сейчас расскажу.
Недостаток памяти
При установке Джавы, необходимой для работы некоторых игр, отображалось следующее окно:
![]()
Она указывает на то, что для создаваемой виртуальной машины не хватает памяти. Очень часто подобная ситуация возникает, если некорректно выходить из игры (нажав Alt + F4 ) или при внезапном отключении ПК.
В моем случае, ошибка появилась после того, как пользователь случайно удалил компонент Java, потом пытался его переустановить, но на последнем этапе инсталляции отображалось вышеупомянутое окно.
На зарубежных источниках нашел два решения. Начну с более простого.
Настройка переменной среды
- Открываем панель управления. В Windows 7 это можно сделать через меню «Пуск», в «десятке» достаточно кликнуть правой кнопкой мышки по кнопке «Старт» (или нажать Win + X ), и выбрать из списка нужный элемент:
![]()
- Переходим к разделу «Система»:
![]()
- Слева кликаем по ссылке «Дополнительные параметры…»:
![]()
- В новом окне снизу есть кнопка «Переменные среды», которую стоит нажать:
![]()
- Кликаем по кнопке «Создать…», присваиваем новой переменной:
![]()
- Обязательно сохраняем все изменения, нажав на ОК. Перезагрузка компьютера не требуется.
Теперь при запуске установщика Джава ошибка Java Virtual Machine Launcher не появиться.
Переходим ко второму способу.
Рекомендуем:
Создание файла запуска
Покажу всё на примере Minecraft.
- Открываем пользовательскую папку, где хранятся игровые настройки. Для этого нажимаем Win + R и пишем команду:
- На экране отобразится каталог, в котором нужно найти игровую директорию, войти в неё и внутри создать новый текстовый документ (Блокнот):
![]()
- Туда стоит записать следующую фразу:
java -Xms650m -jar «c:UsersUSER_NAMEAppDataRoaming.minecraftminecraft.exe
![]()
- Теперь нажимаем на пункт меню «Файл», затем выбираем «Сохранить как». Указываем имя «minecraft.bat» и указываем тип «Все…», как показано на скриншоте:
![]()
- Осталось только создать ярлык для созданного элемента и отправить его на рабочий стол, чтобы через него запускать игру.
Вы узнали, как исправить ошибку Java Virtual Machine Launcher. Но если вопросы остались, обязательно задавайте их с помощью формы комментирования внизу страницы.
If you keep on allocating & keeping references to object, you will fill up any amount of memory you have.
One option is to do a transparent file close & open when they switch tabs (you only keep a pointer to the file, and when the user switches tab, you close & clean all the objects… it’ll make the file change slower… but…), and maybe keep only 3 or 4 files on memory.
Other thing you should do is, when the user opens a file, load it, and intercept any OutOfMemoryError, then (as it is not possible to open the file) close that file, clean its objects and warn the user that he should close unused files.
Your idea of dynamically extending virtual memory doesn’t solve the issue, for the machine is limited on resources, so you should be carefull & handle memory issues (or at least, be carefull with them).
A couple of hints i’ve seen with memory leaks is:
—> Keep on mind that if you put something into a collection and afterwards forget about it, you still have a strong reference to it, so nullify the collection, clean it or do something with it… if not you will find a memory leak difficult to find.
—> Maybe, using collections with weak references (weakhashmap…) can help with memory issues, but you must be carefull with it, for you might find that the object you look for has been collected.
—> Another idea i’ve found is to develope a persistent collection that stored on database objects least used and transparently loaded. This would probably be the best approach…
Такой язык программирования, как Java, — это больше, чем просто способ написания программ; его используют и разработчики игр и приложений. Однако сбои Java очень распространены. Если у вас возникли проблемы при попытке запустить приложение, построенное на Java, это руководство поможет вам решить эту проблему.
Не все ошибки виртуальной машины Java одинаковы. Они могут возникать по разным причинам. В этой статье мы объясним, каковы наиболее распространенные причины ошибки запуска виртуальной машины Java и как их исправить.
Что такое Java простыми словами?
Java — популярный язык программирования, который может работать на множестве различных операционных систем и устройств. Он имеет множество различных применений, в том числе в веб-разработке, мобильных приложениях, настольных приложениях и серверном программировании. Java создает виртуальную машину (ВМ), которая выполняет код, написанный на Java. Ошибка запуска виртуальной машины Java может возникнуть, если что-то пойдет не так с данными или кодом, который обрабатывается виртуальной машиной Java.
Что такое ошибка виртуальной машины Java?
Ошибка виртуальной машины Java, также известная как ошибка JVM, классифицируется как ошибка, сгенерированная виртуальной машиной Java. Когда возникает этот тип ошибки, это обычно означает, что компьютер не может прочитать или понять код. Это может произойти по ряду причин, например, когда компьютер не обновлен необходимыми исправлениями или несовместим с Java. Если вы столкнулись с ошибкой JVM при использовании компьютера, важно знать, как исправить эту проблему. Вот несколько шагов, которые необходимо предпринять, чтобы решить эту проблему и продолжить использование компьютера.
Чтобы решить эту проблему, сначала убедитесь, что у вас есть все необходимые обновления и программа установлена правильно. После этого вы можете начать поиск возможных решений, чтобы исправить ошибку запуска виртуальной машины Java в Windows 10:
- Добавить новую системную переменную для Java
- Запустите Java.exe от имени администратора
А теперь рассмотрим их поближе:
1]Добавьте новую системную переменную для Java
Чтобы исправить эту ошибку, вы должны добавить новую переменную в систему Java и посмотреть, решит ли она ошибку. Чтобы решить эту проблему, выполните следующие действия:
- Щелкните правой кнопкой мыши меню Пуск и выберите Запустить из списка меню.
- Введите sysdm.cpl в поле поиска и нажмите кнопку ОК.
- Перейти к Передовой вкладка и выберите Переменные среды внизу.
- Под Системные переменные раздел, нажмите на Новый кнопка.
- На следующем экране введите _JAVA_OPTIONS в поле Имя переменной поле.
- Затем вам нужно будет ввести –Xmx512M в поле «Значение переменной».
- Теперь нажмите кнопку ОК, чтобы применить изменения.
Ниже вы можете найти подробное объяснение вышеуказанных шагов:
Для начала откройте окно «Свойства системы». Это можно сделать либо в диалоговом окне «Выполнить», либо в проводнике.
Итак, нажмите сочетание клавиш Windows + R, чтобы запустить команду «Выполнить». Затем введите sysdm.cpl в поле поиска и нажмите кнопку ОК.
Также можно открыть проводник с помощью сочетания клавиш Windows + E. Затем щелкните правой кнопкой мыши на Этот ПК и выберите Характеристики вариант из контекстного меню.
В окне «Свойства системы» выберите Переменные среды внизу Передовой таб.
Затем нажмите на Новый кнопка в Системные переменные раздел.
Теперь вам нужно будет ввести _JAVA_OPTIONS в поле Имя переменной. Чтобы установить переменную, вам нужно будет ввести –Xmx512M в текстовом поле Значение переменной. При этом объем оперативной памяти увеличится до 512 мегабайт.
После внесения изменений нажмите «ОК», чтобы сохранить их. Также нажмите ОК в окне «Окружающая среда».
2]Запустите программу от имени администратора
Согласно отчетам, некоторые пользователи смогли решить эту ошибку, открыв исполняемый файл Java с правами администратора. Следующие шаги помогут вам сделать это:
- Нажмите сочетание клавиш Windows + Q.
- Тип Джава в поле поиска.
- Щелкните правой кнопкой мыши Java и выберите Местонахождение открытого файла из контекстного меню.
- На следующей странице щелкните правой кнопкой мыши исполняемый файл Java и выберите параметр «Свойства».
- Когда откроется окно свойств Java, переключитесь на Совместимость таб.
- В разделе «Настройки» установите флажок «Запускать программу от имени администратора».
- Нажмите «Применить», а затем нажмите «ОК», чтобы сохранить изменения.
- Теперь закройте окно проводника.
Когда вы закончите все шаги, описанные выше, перезагрузите компьютер и посмотрите, решена ли проблема.
Вот и все. Надеюсь, одно из этих решений подойдет вам!
Связанный:
- Как вручную включить последнюю версию Java в системах Windows
- Установка или обновление Java не завершены — код ошибки 1603
.
Основные моменты
- Устранение проблем с памятью Java может быть очень трудным, но правильный метод и соответствующие инструменты могут значительно упростить этот процесс;
- Java HotSpot JVM будет сообщать о различных сообщениях OutOfMemoryError. Очень важно четко понимать эти сообщения об ошибках. В нашем наборе инструментов есть различные инструменты для диагностики и устранения неполадок, которые могут помочь нам диагностировать и найти основную причину этих проблем;
- В этой статье мы познакомим вас с различными диагностическими инструментами, которые очень полезны при решении проблем с памятью, в том числе:
- Параметры JVM HeapDumpOnOutOfMemoryError и PrintClassHistogram
- Eclipse MAT
- Java VisualVM
- JConsole
- jhat
- YourKit
- jmap
- jcmd
- Java Flight Recorder и Java Mission Control
- GC Logs
- NMT
- Собственные средства обнаружения утечек памяти, такие как dbx, libumem, valgrind и purify и т. Д.
Для процесса Java будет несколько пулов памяти или пространств — куча Java, Metaspace, PermGen (в версиях до Java 8) и собственная куча.
Каждый пул памяти может столкнуться с собственными проблемами памяти, такими как ненормальное увеличение памяти, медленные приложения или утечки памяти.Каждая форма проблемы в конечном итоге проявляется в форме OutOfMemoryError в своем собственном пространстве.
В этой статье мы попытаемся понять значение этих сообщений об ошибках OutOfMemoryError и какие диагностические данные должны быть собраны для анализа и решения этих проблем. Кроме того, мы изучим некоторые инструменты для сбора и анализа данных, которые могут помочь решить эти проблемы с памятью. Основное внимание в этой статье уделяется тому, как решить эти проблемы с памятью и как избежать их в производственной среде.
Информация OutOfMemoryError, сообщаемая виртуальной машиной Java HotSpot, может четко указать, какая область памяти исчерпана. Затем давайте подробнее рассмотрим различные сообщения OutOfMemoryError, поймем их значение и исследуем причины, которые к ним приводят, и, наконец, познакомимся с тем, как устранять неполадки и решать эти проблемы.
OutOfMemoryError: Java Heap Space
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at com.abc.ABCParser.dump(ABCParser.java:23)
at com.abc.ABCParser.mainABCParser.java:59)
Это сообщение указывает на то, что JVM не имеет свободного места в куче Java, и JVM не может продолжать выполнение программы. Наиболее частая причина этой ошибки заключается в том, что указанного максимального пространства кучи Java больше недостаточно для размещения всех уцелевших объектов. Чтобы проверить, достаточно ли пространства кучи Java для размещения всех живых объектов в JVM, простой способ — проверить журнал GC.
688995.775: [Full GC [PSYoungGen: 46400K->0K(471552K)] [ParOldGen: 1002121K->304673K(1036288K)] 1048
521K->304673K(1507840K) [PSPermGen: 253230K->253230K(1048576K)], 0.3402350 secs] [Times: user=1.48
sys=0.00, real=0.34 secs]
Из приведенной выше записи журнала мы видим, чтоFull GCПосле этого занятость кучи уменьшилась с 1 ГБ (1048521 КБ) до 305 МБ (304673 КБ), что означает, что 1,5 ГБ (1507840 КБ), выделенных для кучи, достаточно для хранения набора оперативных данных.
Теперь давайте посмотрим на следующие действия GC:
20.343: [Full GC (Ergonomics) [PSYoungGen: 12799K->12799K(14848K)] [ParOldGen: 33905K->33905K(34304K)] 46705K- >46705K(49152K), [Metaspace: 2921K->2921K(1056768K)], 0.4595734 secs] [Times: user=1.17 sys=0.00, real=0.46 secs]
...... <snip> several Full GCs </snip> ......
22.640: [Full GC (Ergonomics) [PSYoungGen: 12799K->12799K(14848K)] [ParOldGen: 33911K->33911K(34304K)] 46711K- >46711K(49152K), [Metaspace: 2921K->2921K(1056768K)], 0.4648764 secs] [Times: user=1.11 sys=0.00, real=0.46 secs]
23.108: [Full GC (Ergonomics) [PSYoungGen: 12799K->12799K(14848K)] [ParOldGen: 33913K->33913K(34304K)] 46713K- >46713K(49152K), [Metaspace: 2921K->2921 K(1056768K)], 0.4380009 secs] [Times: user=1.05 sys=0.00, real=0.44 secs]
23.550: [Full GC (Ergonomics) [PSYoungGen: 12799K->12799K(14848K)] [ParOldGen: 33914K->33914K(34304K)] 46714K- >46714K(49152K), [Metaspace: 2921K->2921 K(1056768K)], 0.4767477 secs] [Times: user=1.15 sys=0.00, real=0.48 secs]
24.029: [Full GC (Ergonomics) [PSYoungGen: 12799K->12799K(14848K)] [ParOldGen: 33915K->33915K(34304K)] 46715K- >46715K(49152K), [Metaspace: 2921K->2921 K(1056768K)], 0.4191135 secs] [Times: user=1.12 sys=0.00, real=0.42 secs] Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at oom.main(oom.java:15)
Из выгруженной информации о частоте «Полный сборщик мусора» мы можем видеть, что существует несколько последовательных полных сборщиков мусора, которые будут пытаться освободить пространство в куче Java, но куча полностью заполнена, а сборщик мусора не освободил место. Полный сборщик мусора такой частоты отрицательно скажется на производительности приложения и замедлит работу приложения. Этот пример показывает, что размер кучи, необходимой приложению, превышает указанный размер кучи Java. Увеличение размера кучи поможет избежать полной сборки мусора и ошибки OutOfMemoryError. Размер кучи Java можно указать с помощью параметра -Xmx JVM:
java –Xmx1024m –Xms1024m Test
OutOfMemoryError также может быть признаком утечки памяти в приложении. Утечки памяти часто трудно обнаружить, особенно медленные утечки памяти. Если приложение непреднамеренно содержит ссылку на объект в куче, это вызовет утечку памяти, что предотвратит сборку мусора. Со временем количество этих непреднамеренно удерживаемых объектов в куче может увеличиваться, в конечном итоге заполняя все пространство кучи Java, что приводит к частым сборкам мусора, и в конечном итоге программа будет завершена из-за OutOfMemoryError.
Обратите внимание, что лучше всегда включать ведение журнала GC, даже в производственной среде. Это полезно для обнаружения и устранения проблем с памятью. Следующие параметры можно использовать для включения ведения журнала GC:
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps
-Xloggc:<gc log file>
Первым шагом в обнаружении утечек памяти является отслеживание активности приложения. Коллекция выживания относится к куче Java после полного GC. Если приложение достигает устойчивого состояния и стабильной нагрузки, набор выживания все еще растет, что указывает на возможную утечку памяти. Использование кучи можно отслеживать с помощью таких инструментов, как Java VisualVM, Java Mission Control и JConsole, а также извлекать из журнала GC.
Куча Java: сбор диагностических данных
В этой части мы обсудим, какие диагностические данные нужно собирать для решения проблемы OutOfMemoryErrors в куче Java, и некоторые инструменты могут помочь нам собрать необходимые диагностические данные.
Дамп кучи
При решении проблемы утечек памяти наиболее важными данными являются дамп кучи. Дампы кучи можно собирать с помощью элементов конфигурации JVM jcmd, jmap, JConsole и HeapDumpOnOutOfMemoryError, как показано ниже:
jcmd <process id/main class> GC.heap_dump filename=heapdump.dmpjmap -dump:format=b,file=snapshot.jmap pidИнструмент JConsole, используйте Mbean HotSpotDiagnostic-XX:+HeapDumpOnOutOfMemoryError
java -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xmx20m -XX:+HeapDumpOnOutOfMemoryError oom
0.402: [GC (Allocation Failure) [PSYoungGen: 5564K->489K(6144K)] 5564K->3944K(19968K), 0.0196154 secs] [Times: user=0.05 sys=0.00, real=0.02 secs]
0.435: [GC (Allocation Failure) [PSYoungGen: 6000K->496K(6144K)] 9456K->8729K(19968K), 0.0257773 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
0.469: [GC (Allocation Failure) [PSYoungGen: 5760K->512K(6144K)] 13994K->13965K(19968K), 0.0282133 secs] [Times: user=0.05 sys=0.00, real=0.03 secs]
0.499: [Full GC (Ergonomics) [PSYoungGen: 512K->0K(6144K)] [ParOldGen: 13453K->12173K(13824K)] 13965K-
>12173K(19968K), [Metaspace: 2922K->2922K(1056768K)], 0.6941054 secs] [Times: user=1.45 sys=0.00, real=0.69 secs] 1.205: [Full GC (Ergonomics) [PSYoungGen: 5632K->2559K(6144K)] [ParOldGen: 12173K->13369K(13824K)] 17805K-
>15929K(19968K), [Metaspace: 2922K->2922K(1056768K)], 0.3933345 secs] [Times: user=0.69 sys=0.00, real=0.39 secs]
1.606: [Full GC (Ergonomics) [PSYoungGen: 4773K->4743K(6144K)] [ParOldGen: 13369K->13369K(13824K)] 18143K-
>18113K(19968K), [Metaspace: 2922K->2922K(1056768K)], 0.3009828 secs] [Times: user=0.72 sys=0.00, real=0.30 secs]
1.911: [Full GC (Allocation Failure) [PSYoungGen: 4743K->4743K(6144K)] [ParOldGen: 13369K->13357K(13824K)] 18113K-
>18101K(19968K), [Metaspace: 2922K->2922K(1056768K)], 0.6486744 secs] [Times: user=1.43 sys=0.00, real=0.65 secs]
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid26504.hprof ...
Heap dump file created [30451751 bytes in 0.510 secs] Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:261)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)
at java.util.ArrayList.add(ArrayList.java:458)
at oom.main(oom.java:14)
Обратите внимание, что параллельный сборщик мусора может постоянно вызывать полный сборщик мусора, чтобы освободить место в куче, даже если прибыль от этой попытки невелика, а пространство кучи почти заполнено, он может это сделать. Чтобы этого избежать, мы можем настроить-XX:GCTimeLimit с-XX:GCHeapFreeLimitЗначение.
GCTimeLimitМожно установить верхний предел и указать процент времени GC от общего времени. Его значение по умолчанию 98%. Уменьшение этого значения сократит время, отведенное на сборку мусора.GCHeapFreeLimitУстановлен нижний предел, который указывает, сколько свободной области должно быть после сборки мусора, которое представляет собой процент от общего размера кучи. Его значение по умолчанию — 2%. Увеличение этого значения означает, что после сборки мусора будет освобождено больше места в куче. Если пять последовательных полных GC не могут удерживать стоимость GC ниже GCTimeLimit и не могут быть освобожденыGCHeapFreeLimitЗапрошенное пространство будет брошеноOutOfMemoryError。
Например, если для GCHeapFreeLimit установлено значение 8%, если пять последовательных сборок мусора не смогли освободить не менее 8% пространства кучи и превысили значение, установленное GCTimeLimit, это может помочь сборщику мусора избежать непрерывных вызовов Full GC.
Гистограмма кучи
Иногда нам нужно быстро увидеть, что растет в куче, минуя длинный путь обработки, связанный с использованием инструментов анализа памяти для сбора и анализа дампов кучи. Гистограмма кучи может быстро показать нам объекты в куче и сравнить эти гистограммы, чтобы помочь нам найти наиболее быстрорастущие объекты в куче Java.
-XX: + PrintClassHistogram и Control + Breakjcmd <process id/main class> GC.class_histogram filename=Myheaphistogramjmap -histo pidjmap -histo <java> core_file
В приведенном ниже примере выходных данных показаны String, Double, Integer иObject[]Экземпляры занимают большую часть места в куче Java, и их число со временем увеличивается, что означает, что они могут вызывать утечки памяти:


Запись полета Java
Включение функции анализа кучи в Flight Recordings может помочь нам решить проблему утечек памяти: она покажет объекты в куче и то, какие объекты растут быстрее всего с течением времени. Чтобы включить функцию анализа кучи, вы можете использовать Java Mission Control и выбрать «Статистика кучи». Этот параметр можно найти через «Окно-> Диспетчер шаблонов записи полетов», как показано ниже:
Или вручную отредактируйте файл .jfc и установите для параметра heap-statistics-enabled значение true.
<event path="vm/gc/detailed/object_count">
<setting name="enabled" control="heap-statistics-enabled">true</setting>
<setting name="period">everyChunk</setting>
</event>
Летные записи могут быть созданы следующими способами:
- Параметры JVM Flight Recorder, такие как:
-XX:+UnlockCommercialFeatures -XX:+FlightRecorder
-XX:StartFlightRecording=delay=20s,duration=60s,name=MyRecording,
filename=C:TEMPmyrecording.jfr,settings=profile
- Команды диагностики Java: jcmd
jcmd 7060 JFR.start name=MyRecording settings=profile delay=20s duration=2m filename=c:TEMPmyrecording.jfr
- Java Mission Control
Самописец может только помочь нам определить, какие типы объектов произошла утечка, но чтобы выяснить, что вызвало утечку этих объектов, нам также понадобится дамп кучи.
Куча Java: анализ диагностических данных
Анализ дампа кучи
Дамп кучи можно проанализировать с помощью следующих инструментов:
- Eclipse MAT(Memory Analyzer Tool) — это разработанный сообществом инструмент для анализа дампов кучи. Он предоставляет несколько замечательных функций, в том числе:
- Подозрительные утечки: он может обнаруживать подозрительные утечки в дампе кучи и сообщать об объектах, которые продолжают занимать большой объем памяти;
- Гистограмма: укажите количество объектов каждого класса, мелкий размер (мелкий) и кучу, удерживаемую этими объектами. Объекты на гистограмме можно легко сортировать и фильтровать с помощью регулярных выражений. Это помогает увеличить масштаб и сосредоточиться на том, кто, как мы подозреваем, протекает. Он также может сравнивать гистограммы двух дампов кучи, показывая разницу в количестве экземпляров каждого класса. Это может помочь нам найти наиболее быстрорастущие объекты в куче Java и продолжить исследование, чтобы определить корни этих объектов в куче;
- Недостижимые объекты: MAT имеет отличную функцию, то есть позволяет включать или исключать недостижимые / мертвые объекты в своем рабочем наборе. Если вы не хотите просматривать недостижимые объекты, то есть те объекты, которые будут собраны в следующем цикле сборки мусора, и заботитесь только о доступных объектах, то эта функция очень удобна;
- Дублирующиеся классы: отображать повторяющиеся классы, загруженные несколькими загрузчиками классов;
- Путь к корню сборщика мусора: он может показать цепочку ссылок на корень сборщика мусора (объект, который поддерживает сама JVM). Эти корни сборщика мусора отвечают за хранение объектов в куче;
- OQL: мы можем использовать язык объектных запросов для проверки объектов в дампе кучи. Он обогащает инфраструктуру OQL, может писать сложные запросы и помогает нам понять внутреннюю структуру дампов.
- Java VisualVM: Универсальный инструмент для мониторинга, анализа и устранения неполадок языка Java. Его можно использовать как часть инструмента JDK или загрузить с GitHub. Одна из его функций — анализ дампа кучи. Он может создавать дампы кучи для отслеживаемых приложений, а также загружать и анализировать их. Из дампа кучи он может отображать гистограммы классов, экземпляры классов и находить корень GC определенного экземпляра;
- jhatКомандный инструмент (в папке <jdk> / bin) предоставляет функцию анализа дампа кучи, которая может отображать объекты в дампе кучи в любом браузере. По умолчанию веб-сервер запускается на порту 7000. jhat поддерживает широкий спектр предопределенных языков запросов и объектных запросов для облегчения обнаружения объектов в дампе кучи;
- Java Mission Control (Java Mission Control)JOverflowПлагин: это экспериментальный плагин, который позволяет элементу управления задачами Java выполнять простой анализ дампа кучи и сообщать о возможных потерях памяти;
- YourkitЭто коммерческий профилировщик Java, в нем есть анализатор дампа кучи и почти все функции, предоставляемые другими инструментами. Кроме того, YourKit также предоставляет:
- Область достижимости: он может не только перечислять доступные и недоступные объекты, но также отображать их распределение в соответствии с их областью достижимости, то есть высокой достижимостью, слабой / мягкой достижимостью или Недоступен;
- Проверка памяти: YourKit имеет встроенный исчерпывающий набор запросов, вместо использования специальных функций запросов, запросы YourKit могут проверять память, находить антишаблоны, анализировать причины и предоставлять решения для общих проблем с памятью.
Я часто использую Eclipse MAT и считаю его очень полезным при анализе дампа кучи.
MAT имеет некоторые расширенные функции, включая гистограммы и возможность сравнения с другими гистограммами. Таким образом, вы можете четко видеть, какой контент в памяти увеличивается, и вы можете видеть, какой контент занимает наибольшее пространство в куче Java. Одна функция, которая мне очень нравится, — «Объединить кратчайшие пути к корням сборщика мусора», которая может помочь нам найти следы объектов, которые мы случайно держали. Например, в следующей цепочке ссылок объект ThreadLocalDateFormat удерживается полем «значение» объекта ThreadLocalMap $ Entry. Только когда ThreadLocalMap $ Entry удаляется из ThreadLocalMap, ThreadLocalDateFormat может быть переработан.
weblogic.work.ExecuteThread @ 0x6996963a8 [ACTIVE] ExecuteThread: '203' for queue: 'weblogic.kernel.Default (self-tuning)' Busy Monitor, Thread| 1 | 176 | 40 | 10,536
'- threadLocals java.lang.ThreadLocal$ThreadLocalMap @ 0x69c2b5fe0 | 1 | 24 | 40 | 7,560
'- table java.lang.ThreadLocal$ThreadLocalMap$Entry[256] @ 0x6a0de2e40 | 1 | 1,040 | 40 | 7,536
'- [116] java.lang.ThreadLocal$ThreadLocalMap$Entry @ 0x69c2ba050 | 1 | 32 | 40 | 1,088
'- value weblogic.utils.string.ThreadLocalDateFormat @ 0x69c23c418 | 1 | 40 | 40 | 1,056
Таким образом, мы можем увидеть самого быстрорастущего виновника в куче и увидеть, где происходит утечка памяти.
Управление полетами Java
Управление миссией Java можно найти в папке <jdk> / bin JDK. Записи полета, собранные после включения функции статистики кучи, могут очень помочь нам решить проблему утечки памяти. Мы можем просмотреть информацию об анализе объекта в Память-> Статистика объекта. Это представление покажет гистограмму объектов, включая процент кучи, занятой каждым типом объектов. Он может отображать самый быстрорастущий объект в куче, и в большинстве случаев он напрямую соответствует объекту утечки памяти.
OutOfMemoryError, вызванный финализатором
Неправильное использование финализаторов также может вызвать OutOfMemoryError. Объекты с финализаторами (то есть с методами finalize ()) задерживают восстановление занимаемого ими пространства. Перед тем, как вернуть эти экземпляры и освободить их пространство кучи, потокам финализатора необходимо вызвать свой метод finalize (). Если скорость обработки потока терминатора не так высока, как скорость увеличения объекта, который должен быть завершен (добавлен в очередь терминатора, чтобы облегчить вызов его метода finalize ()), тогда даже если объекты в очереди терминатора имеют право на повторное использование, JVM может Также появится OutOfMemoryError. Следовательно, очень важно убедиться, что у вас не закончится память из-за большого количества объектов, ожидающих (ожидающих) завершения.
Мы можем использовать следующие инструменты для отслеживания количества объектов, ожидающих завершения:
- JConsole
Мы можем подключить JConsole к запущенному процессу, а затем просмотреть количество объектов, ожидающих завершения на странице сводки виртуальной машины, как показано на следующем рисунке.
- jmap – finalizerinfo
D:testsGC_WeakReferences>jmap -finalizerinfo 29456
Attaching to process ID 29456, please wait...
Debugger attached successfully. Server compiler detected.
JVM version is 25.122-b08
Number of objects pending for finalization: 10
- Дамп кучи
Почти все инструменты анализа дампа кучи могут предоставить подробную информацию об объектах, ожидающих завершения.
Вывод Java VisualVM
Date taken: Fri Jan 06 14:48:54 PST 2017
File: D:testsjava_pid19908.hprof
File size: 11.3 MB
Total bytes: 10,359,516
Total classes: 466
Total instances: 105,182
Classloaders: 2
GC roots: 419
Number of objects pending for finalization: 2
OutOfMemoryError: PermGen Space
java.lang.OutOfMemoryError: PermGen space
Мы знаем, что после Java 8 PermGen был удален. Если читалка работает под управлением Java 8 или выше, этот раздел можно пропустить напрямую.
В Java 7 и ранее PermGen (сокращение от «постоянная генерация») использовался для хранения определений классов и их метаданных. В этой области памяти неожиданный рост PermGen и OutOfMemoryError означает, что класс не выгружается должным образом или указанное пространство PermGen слишком мало для размещения всех загружаемых классов и их метаданных.
Чтобы гарантировать, что размер PermGen может соответствовать потребностям приложения, нам необходимо отслеживать его использование и использовать следующие параметры JVM для соответствующей настройки:
–XX:PermSize=n –XX:MaxPermSize=m
OutOfMemoryError: Metaspace
Пример вывода MetaSpace OutOfMemoryError выглядит следующим образом:
java.lang.OutOfMemoryError: Metaspace
Начиная с Java 8, метаданные класса хранятся в Metaspace. Метапространство не является частью кучи Java, оно размещается в собственной памяти. Следовательно, он ограничен только объемом внутренней памяти, доступной на машине. Однако Metaspace также может передаватьMaxMetaspaceSizeПараметр для установки его размера.
Если использование Metaspace близко кMaxMetaspaceSizeМаксимальный предел, тогда мы столкнемся с OutOfMemoryError. Подобно другим областям, эта ошибка может быть из-за недостаточного метаспространства или из-за загрузчика классов / утечки класса. Если возникает последняя ситуация, нам нужно использовать диагностические инструменты для устранения утечки памяти в Metaspace.
OutOfMemoryError: Compressed class space
java.lang.OutOfMemoryError: Compressed class space
Если включеноUseCompressedClassesPointersЕсли вы хотите (когда UseCompressedOops включен, он будет включен по умолчанию), тогда в собственной памяти будут две отдельные области для хранения классов и их метаданных. включитьUseCompressedClassesPointersПосле этого 64-битный указатель класса будет представлен 32-битным значением, а сжатый указатель класса будет сохранен в сжатом пространстве классов. По умолчанию размер сжатого пространства классов составляет 1 ГБ, и его можно передатьCompressedClassSpaceSizeНастройте это.
MaxMetaspaceSizeОбщий размер выделенного пространства может быть установлен для этих двух областей, то есть сжатого пространства класса и пространства представления метаданных класса.
После включения UseCompressedClassesPointers вывод данных выборки будет выполняться в журнале GC. Представленное и зарезервированное пространство, о котором сообщает Metaspace, включает представление и зарезервированное пространство сжатого пространства классов.
Metaspace used 2921K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 288K, capacity 386K, committed 512K, reserved 1048576K
PermGen и Metaspace: инструменты сбора и анализа данных
Пространство, занимаемое PermGen и Metaspace, можно контролировать с помощью Java Mission Control, Java VisualVM и JConsole. GC может помочь нам понять использование PermGen / Metaspace до и после полного GC, а также может увидеть, есть ли полный GC, вызванный заполнением PermGen / Metaspace.
Еще один очень важный момент — убедиться, что класс был удален должным образом. Загрузку и выгрузку классов можно отслеживать, включив следующие параметры:
-XX:+TraceClassUnloading –XX:+TraceClassLoading
При обновлении приложения из среды разработки в производственную среду необходимо учитывать, что в приложении могут быть непреднамеренно изменены некоторые дополнительные параметры JVM, что приведет к нежелательным последствиям. Один из вариантов — -Xnoclassgc, который предотвратит выгрузку классов из JVM во время сборки мусора. Теперь, если приложению необходимо загрузить большое количество классов или некоторые классы становятся недоступными во время выполнения, ему необходимо загрузить другой набор новых классов, приложение оказывается–XnoclassgcЕсли он работает в режиме, он может достичь максимальной емкости PermGen / Metaspace, и произойдет OutOfMemoryError. Следовательно, если вы не уверены, почему установлен этот параметр, лучше всего удалить его и позволить сборщику мусора выгружать эти классы, когда они могут быть собраны.
Загруженные классы и занимаемая ими память можно отслеживать с помощью Native Memory Tracker (NMT). Мы подробно обсудим этот инструмент в разделе «OutOfMemoryError: собственная память» ниже.
Следует отметить, что при использовании Concurrent MarkSweep Collector (CMS) необходимо включить следующие параметры, чтобы гарантировать, что цикл параллельного сбора CMS может выгрузить класс:–XX:+CMSClassUnloadingEnabled
В Java 7 этот флаг отключен по умолчанию, а в Java 8 он включен по умолчанию.
jmap
«Jmap -permstat» отобразит статистику загрузчика классов, такую как загрузчик классов, количество классов, загруженных загрузчиком классов, и то, являются ли эти загрузки классов мертвыми или все еще живыми. Он также сообщает нам общее количество интернированных строк в PermGen и количество байтов, занятых загруженными классами и их метаданными. Эта информация очень полезна, если мы хотим определить, какой контент занимает PermGen. Ниже приведен пример вывода, показывающий всю статистику. В последней строке списка мы видим, что есть обзор общей суммы.
$ jmap -permstat 29620
Attaching to process ID 29620, please wait...
Debugger attached successfully. Client compiler detected.
JVM version is 24.85-b06
12674 intern Strings occupying 1082616 bytes. finding class loader instances ..
done. computing per loader stat ..done. please wait.. computing liveness.........................................done.
class_loader classes bytes parent_loader alive? type
<bootstrap> 1846 5321080 null live <internal>
0xd0bf3828 0 0 null live sun/misc/[email protected]
0xd0d2f370 1 904 null dead sun/reflect/[email protected]
0xd0c99280 1 1440 null dead sun/reflect/[email protected]
0xd0b71d90 0 0 0xd0b5b9c0 live java/util/[email protected]
0xd0d2f4c0 1 904 null dead sun/reflect/[email protected]
0xd0b5bf98 1 920 0xd0b5bf38 dead sun/reflect/[email protected]
0xd0c99248 1 904 null dead sun/reflect/[email protected]
0xd0d2f488 1 904 null dead sun/reflect/[email protected]
0xd0b5bf38 6 11832 0xd0b5b9c0 dead sun/reflect/misc/[email protected]
0xd0d2f338 1 904 null dead sun/reflect/[email protected]
0xd0d2f418 1 904 null dead sun/reflect/[email protected]
0xd0d2f3a8 1 904 null dead sun/reflect/[email protected]
0xd0b5b9c0 317 1397448 0xd0bf3828 live sun/misc/[email protected]
0xd0d2f300 1 904 null dead sun/reflect/[email protected]
0xd0d2f3e0 1 904 null dead sun/reflect/[email protected]
0xd0ec3968 1 1440 null dead sun/reflect/[email protected]
0xd0e0a248 1 904 null dead sun/reflect/[email protected]
0xd0c99210 1 904 null dead sun/reflect/[email protected]
0xd0d2f450 1 904 null dead sun/reflect/[email protected]
0xd0d2f4f8 1 904 null dead sun/reflect/[email protected]
0xd0e0a280 1 904 null dead sun/reflect/[email protected]
total = 22 2186 6746816 N/A alive=4, dead=18 N/A
Начиная с Java 8, команда jmap -clstats <pid> может выводить аналогичную информацию о загрузчике классов и его жизнеспособности, но она показывает количество и размер загруженных классов в Metaspace, а не PermGen.
jmap -clstats 26240
Attaching to process ID 26240, please wait...
Debugger attached successfully. Server compiler detected. JVM version is 25.66-b00 finding class loader instances ..done. computing per loader stat ..done. please wait.. computing liveness.liveness analysis may be inaccurate ...
class_loader classes bytes parent_loader alive? type
<bootstrap> 513 950353 null live <internal>
0x0000000084e066d0 8 24416 0x0000000084e06740 live sun/misc/[email protected]
0x0000000084e06740 0 0 null live sun/misc/[email protected]
0x0000000084ea18f0 0 0 0x0000000084e066d0 dead java/util/[email protected]
total = 4 521 974769 N/A alive=3, dead=1 N/A
Дамп кучи
Как мы упоминали в предыдущих главах, Eclipse MAT, jhat, Java VisualVM, подключаемый модуль JOverflow JMC и Yourkit могут анализировать файлы дампа кучи для анализа и устранения ошибок OutOfMemoryError. Дамп кучи также полезен при решении проблем с памятью в PermGen и Metaspace. Eclipse MAT предоставляет очень хорошую функцию под названием «Дубликаты классов», которая может перечислять классы, которые были загружены несколько раз разными экземплярами загрузки классов. Ограниченное количество повторяющихся классов, загружаемых разными загрузчиками классов, может быть частью дизайна приложения, но если их количество продолжает расти с течением времени, то это опасный признак и требует изучения. Когда на сервере приложений размещается несколько приложений, они работают на одной JVM. Если вы несколько раз удалите и повторно развернете приложения, вы часто столкнетесь с такой ситуацией. Если выгруженное приложение не освобождает все ссылки на созданный им загрузчик классов, JVM не может выгрузить классы, загруженные этим загрузчиком классов, и вновь развернутое приложение перезагрузит эти классы с новым экземпляром загрузчика классов.
Этот снимок показывает, что JaxbClassLoader загрузил повторяющиеся копии класса, потому что приложение неправильно создает новый экземпляр JAXBContext при связывании классов Java для каждого XML.
jcmd
jcmd <pid / classname> GC.class_stats может предоставить более подробную информацию о загруженных классах, с его помощью мы можем увидеть пространство, занимаемое каждым классом Metaspace, как показано в следующем примере выходных данных.
jcmd 2752 GC.class_stats 2752:
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
1 357 821632 536 0 352 2 13 616 184 1448 1632 java.lang.ref.WeakReference
2 -1 295272 480 0 0 0 0 0 24 584 608 [Ljava.lang.Object;
3 -1 214552 480 0 0 0 0 0 24 584 608 [C
4 -1 120400 480 0 0 0 0 0 24 584 608 [B
5 35 78912 624 0 8712 94 4623 26032 12136 24312 36448 java.lang.String
6 35 67112 648 0 19384 130 4973 25536 16552 30792 47344 java.lang.Class
7 9 24680 560 0 384 1 10 496 232 1432 1664 java.util.LinkedHashMap$Entry
8 -1 13216 480 0 0 0 0 0 48 584 632 [Ljava.lang.String;
9 35 12032 560 0 1296 7 149 1520 880 2808 3688 java.util.HashMap$Node
10 -1 8416 480 0 0 0 0 0 32 584 616 [Ljava.util.HashMap$Node;
11 -1 6512 480 0 0 0 0 0 24 584 608 [I
12 358 5688 720 0 5816 44 1696 8808 5920 10136 16056 java.lang.reflect.Field
13 319 4096 568 0 4464 55 3260 11496 7696 9664 17360 java.lang.Integer
14 357 3840 536 0 584 3 56 496 344 1448 1792 java.lang.ref.SoftReference
15 35 3840 584 0 1424 8 240 1432 1048 2712 3760 java.util.Hashtable$Entry
16 35 2632 736 368 8512 74 2015 13512 8784 15592 24376 java.lang.Thread
17 35 2496 504 0 9016 42 2766 9392 6984 12736 19720 java.net.URL
18 35 2368 568 0 1344 8 223 1408 1024 2616 3640 java.util.concurrent.ConcurrentHashMap$Node
…<snip>…
577 35 0 544 0 1736 3 136 616 640 2504 3144 sun.util.locale.provider.SPILocaleProviderAdapter$1
578 35 0 496 0 2736 8 482 1688 1328 3848 5176 sun.util.locale.provider.TimeZoneNameUtility
579 35 0 528 0 776 3 35 472 424 1608 2032 sun.util.resources.LocaleData$1
580 442 0 608 0 1704 10 290 1808 1176 3176 4352 sun.util.resources.OpenListResourceBundle
581 580 0 608 0 760 5 70 792 464 1848 2312 sun.util.resources.TimeZoneNamesBundle
1724488 357208 1536 1117792 7754 311937 1527952 1014880 2181776 3196656 Total
53.9% 11.2% 0.0% 35.0% - 9.8% 47.8% 31.7% 68.3% 100.0%
Index Super InstBytes KlassBytes annotations CpAll MethodCount Bytecodes MethodAll ROAll RWAll Total ClassName
Из этого вывода мы можем увидеть имя загруженного класса (ClassName) байты, занимаемые каждым классом (KlassBytes), байты, занятые экземплярами каждого класса (InstBytes), количество методов в каждом классе (MethodCount), пространство, занимаемое байт-кодом (ByteCodes)) и многое другое.
Следует отметить, что в Java 8 эта диагностическая команда требует, чтобы процесс Java запускался с параметром -XX: + UnlockDiagnosticVMOptions.
jcmd 33984 GC.class_stats 33984:
GC.class_stats command requires -XX:+UnlockDiagnosticVMOptions
В Java 9 диагностическая команда не требует -XX: + UnlockDiagnosticVMOption.
OutOfMemoryError: Native Memory
Вот некоторые примеры OutOfMemoryError в собственной памяти:
OutOfMemoryError из-за нехватки места для подкачки:
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space?
#
# Internal Error (allocation.cpp:166), pid=2290, tid=27 # Error: ChunkPool::allocate
Ошибка OutOfMemoryError из-за нехватки памяти процесса:
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError : unable to create new native Thread
Эти ошибки ясно указывают на то, что JVM не может выделить собственную память. Это может быть связано с тем, что сам процесс потребляет всю собственную память или другие процессы в системе используют внутреннюю память. После использования pmap (или других инструментов сопоставления собственной памяти) для отслеживания использования собственной кучи мы можем соответствующим образом настроить кучу Java, количество потоков и размер стека, чтобы обеспечить достаточно места для собственной кучи. Если мы найдем собственную кучу Использование постоянно увеличивается, и в конечном итоге появится OutOfMemoryError, что может указывать на то, что мы столкнулись с утечкой собственной памяти.
Собственная куча OutOfMemoryError на 64-битной JVM
В 32-разрядной JVM верхний предел размера процесса составляет 4 ГБ, поэтому в 32-разрядном процессе Java легче исчерпать внутреннюю память. Однако в 64-битной JVM нет ограничений на использование памяти. С технической точки зрения мы можем подумать, что никогда не столкнемся с исчерпанием собственной кучи, но это не так. Собственная куча обнаруживает OutOfMemoryErrors. Не редкость. Это связано с тем, что 64-разрядная JVM по умолчанию включает функцию CompressedOops, и реализация этой функции будет определять, где разместить Java в адресном пространстве. Расположение кучи Java может ограничивать максимальную емкость собственной памяти. На карте памяти ниже куча Java выделена на границе адреса 8 ГБ, оставляя около 4 ГБ для собственной кучи. Если приложению необходимо выделить много места в собственной памяти, превышающее 4 ГБ, даже если в системе все еще имеется много доступной памяти, оно все равно выдаст ошибку OutOfMemoryError в собственной куче.
0000000100000000 8K r-x-- /sw/.es-base/sparc/pkg/jdk-1.7.0_60/bin/sparcv9/java
0000000100100000 8K rwx-- /sw/.es-base/sparc/pkg/jdk-1.7.0_60/bin/sparcv9/java
0000000100102000 56K rwx-- [ heap ]
0000000100110000 2624K rwx-- [ heap ] <--- native Heap
00000001FB000000 24576K rw--- [ anon ] <--- Java Heap starts here
0000000200000000 1396736K rw--- [ anon ]
0000000600000000 700416K rw--- [ anon ]
Эту проблему можно решить с помощью параметра -XX: HeapBaseMinAddress = n, который может указать начальный адрес кучи Java. Установка более высокого адреса оставит больше места для собственной кучи.
Для получения информации о том, как диагностировать, устранять неполадки и решать эту проблему, см.СтатьяУзнайте больше об этом.
Родная куча: средство диагностики
Давайте посмотрим на инструменты обнаружения утечек памяти, они могут помочь нам найти причину утечек собственной памяти.
Отслеживание собственной памяти
JVM имеет мощную функцию под названием Native Memory Tracking (NMT), которая используется внутри JVM для отслеживания собственной памяти. Следует отметить, что он не может отслеживать память, выделенную вне JVM или собственных библиотек. С помощью следующих двух простых шагов мы можем отслеживать использование собственной памяти JVM:
- Запустите процесс, включив NMT. Уровень вывода может быть установлен на уровень «сводка» или «детализация»:
- -XX:NativeMemoryTracking=summary
- -XX:NativeMemoryTracking=detail
- Используйте jcmd, чтобы получить подробную информацию об использовании собственной памяти:
- jcmd <pid> VM.native_memory
Пример вывода NMT:
d:tests>jcmd 90172 VM.native_memory 90172:
Native Memory Tracking:
Total: reserved=3431296KB, committed=2132244KB
- Java Heap (reserved=2017280KB, committed=2017280KB)
(mmap: reserved=2017280KB, committed=2017280KB)
- Class (reserved=1062088KB, committed=10184KB)
(classes #411)
(malloc=5320KB #190)
(mmap: reserved=1056768KB, committed=4864KB)
- Thread (reserved=15423KB, committed=15423KB)
(thread #16)
(stack: reserved=15360KB, committed=15360KB)
(malloc=45KB #81)
(arena=18KB #30)
- Code (reserved=249658KB, committed=2594KB)
(malloc=58KB #348)
(mmap: reserved=249600KB, committed=2536KB)
- GC (reserved=79628KB, committed=79544KB)
(malloc=5772KB #118)
(mmap: reserved=73856KB, committed=73772KB)
- Compiler (reserved=138KB, committed=138KB)
(malloc=8KB #41)
(arena=131KB #3)
- Internal (reserved=5380KB, committed=5380KB)
(malloc=5316KB #1357)
(mmap: reserved=64KB, committed=64KB)
- Symbol (reserved=1367KB, committed=1367KB)
(malloc=911KB #112)
(arena=456KB #1)
- Native Memory Tracking (reserved=118KB, committed=118KB)
(malloc=66KB #1040)
(tracking overhead=52KB)
- Arena Chunk (reserved=217KB, committed=217KB)
(malloc=217KB)
Подробнее об использовании команды jcmd для доступа к данным NMT и чтении ее вывода см.Статья。
Средство обнаружения утечек собственной памяти
В случае утечек собственной памяти за пределами JVM нам нужно полагаться на инструменты утечки собственной памяти для обнаружения и разрешения. Нативные инструменты могут помочь нам решить проблему утечек собственной памяти за пределами JVM. Такие инструменты включаютdbx、libumem、valgrindтак же какpurifyПодождите.
подводить итоги
Устранение проблем с памятью может быть очень трудным и запутанным, но правильные методы и соответствующие инструменты могут значительно упростить этот процесс. Мы видели, что Java HotSpot JVM будет сообщать о различных сообщениях OutOfMemoryError. Очень важно четко понимать эти сообщения об ошибках. В наборе инструментов есть различные инструменты для диагностики и устранения неполадок, которые помогают нам диагностировать и устранять эти проблемы.
Подлинный китайский: http://www.infoq.com/cn/articles/Troubleshooting-Java-Memory-Issues#
Оригинал на английском языке: https://www.infoq.com/articles/Troubleshooting-Java-Memory-Issues