Перейти к публикации
onyn

Лаунчер некорректно считает свободную память

Рекомендованные сообщения

onyn

Лаунчер некорректно считает количество свободной памяти в линуксе:

 

oas6mtM.png

 

Свободной считается память free + cached, а лаунчер смотрит только на free (как он вообще определяет? Через procfs?).

 

Хотя жить не мешает, так как не блокирует запуск игры, но пройти мимо я не мог.

 

 

 

Ещё комментарий про тему https://redserver.su/forum/topic/20322-sbornik-vrednykh-sovetov/

Тема закрыта для обсуждения, так что напишу тут.

 

 

 

Читайте текст ошибки. Если Java не будет хватать памяти, она вам об этом сообщит: "OutOfMemoryError" / "NoClassDefFoundError: Could not initialize class". 

Не совсем верно. В случае нехватки памяти, jvm станет часто делать full gc, что приводит к регулярным и долгим фризам игры. Как раз сегодня столкнулся с этим спецэффектом, когда попытался запустить HardTech клиент на настройках по умолчанию (около 700 МБ). С OOM игра точно не собиралась падать, но мусор собирала очень активно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Andrey

 

 

как он вообще определяет? Через procfs?
Штатными средствами java.

🖊️ Ура! Теперь у Вас есть подпись ☺️

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
onyn

Штатными - это через com.sun.management.OperatingSystemMXBean?

 

Вобщем, вот вариант через procfs:

String osName = System.getProperty("os.name").toLowerCase();
int freeMem = 0;
if ( osName.contains("linux") || osName.contains("unix") ) {
    File f = new File("/proc/meminfo");
    if ( f.isFile() ) {
        try ( BufferedReader br = new BufferedReader(new FileReader(f)) ) {
            String line;
            while ( (line = br.readLine()) != null ) {
                if ( line.startsWith("MemFree:") || line.startsWith("Cached:") ) {
                    String[] split = line.split("\\s+");
                    if ( split.length > 1 ) {
                        try {
                            freeMem += Integer.parseInt(split[1]);
                        } catch ( NumberFormatException e ) {
                            // ignore
                        }
                    }
                }
            }
        } catch ( FileNotFoundException e ) {
            e.printStackTrace();
        } catch ( IOException e ) {
            e.printStackTrace();
        }
    }
}

Значение freeMem получается в килобайтах.

 

Хотелось бы видеть в ближайшем обновлении лаунчера, так как каждый раз пропускать предупреждение надоест рано или поздно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Andrey

 

 

Штатными - это через com.sun.management.OperatingSystemMXBean?
Верно.

🖊️ Ура! Теперь у Вас есть подпись ☺️

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
onyn

С каких это пор пакет com.sun стал штатным? :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
onyn

Ну так что, имеет смысл надеяться на фикс? Я даже рабочий кусок кода написал. Можно проверить на любом линуксе в virtualbox.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...