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

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

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

onyn

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

 

oas6mtM.png

 

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

 

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

 

 

 

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

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

 

 

 

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

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

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


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

 

 

как он вообще определяет? Через 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 получается в килобайтах.

 

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

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


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

 

 

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

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


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

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

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


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

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

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


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

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