Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Помогите Стоит ли опасаться утечки памяти?

Тема в разделе "Разработка плагинов для новичков", создана пользователем JonBoss, 21 сен 2015.

  1. Автор темы
    JonBoss

    JonBoss Активный участник Пользователь

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Мне сейчас приходится работать с большими объемами данных, и все я не могу хранить в оперативной памяти. Поэтому я подгружаю нужную информацию при необходимости (При заходе каждого игрока). Я читал, чтобы оперативная память освобождалась, нужно убирать все указатели на ненужные объекты. У меня есть вопросы:
    1. Когда проходит очистка? На рандом или когда сервер займет всю выделенную ему память?
    2. Можно как-то вручную удалять?
    3. Дает ли сбой эта система? Если да, то как часто? Как избежать?
     
  2. Хостинг MineCraft
    <
  3. VLnet

    VLnet Участник Пользователь

    Баллы:
    36
    Skype:
    The_Vladimir_UA
    Отвечу на 1 и 2 вопрос.
    Если нужно немедленно освободить память, которую занимает объект нужно всем ссылкам, указывающим на этот объект, присвоить значение null, а затем вызвать System.gc();

    Например,
    Код:
    Integer v1 =newInteger(10);
    Integer v2 = v1;
    ...
    v1 =null;
    v2 =null;
    System.gc();


    Метод gc() удаляет из памяти только объекты классов (на которые нет ни одной ссылки в программе). Вообще вызывать явно его не обязательно, т.к. виртуальная машина периодически вызывает его сама.

    P.S. Таким образом можно удалять только объекты. Переменные встроенных типов (int, float, char и т.д.) этот метод не удаляет (да и null им присвоить нельзя).
     
  4. Автор темы
    JonBoss

    JonBoss Активный участник Пользователь

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Ну если просто нужно убрать все ссылки, тогда хорошо. Спасибо :)
    Еще быть бы уверенным, что сам сервер уберет свои ссылки
     
  5. Agravaine

    Agravaine Активный участник Пользователь

    Баллы:
    88
    Имя в Minecraft:
    Agravaine25
    Ага, вы еще запустите поток, который бы каждый 10 секунд вызывал сборщик мусора.
    Сами разрабы джавы не рекомендуют вообще самому его вызывать.
     
  6. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Немного про System.gc();
    Если уберете все ссылки на объект, можете быть спокойны - уборщик мусора не пропустит этот объект.
    Тут не надо беспокоиться как в С++, что вы не убрали какой-то динамически созданный объект из памяти
     
  7. Автор темы
    JonBoss

    JonBoss Активный участник Пользователь

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Как раз таки в c++ мне было спокойнее. Все было под моим контролем :)[DOUBLEPOST=1442872400,1442872347][/DOUBLEPOST]
    Я не буду его юзать. Доверюсь мусорщику
     
  8. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Отдыхайте :D
     
  9. Автор темы
    JonBoss

    JonBoss Активный участник Пользователь

    Баллы:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Ну это точно :D
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Как писал Agravaine, использовать System.gc() не рекомендуется. Алсо, использовать gc() в основном потоке сервера вообще анально карается.
    Для того, чтобы было "спокойнее", лучше использовать (де /)сериализацию данных, если у каждого игрока одни и те же виды данных.
    И после выполнения метода все созданные в нём переменные теряют ссылки, после чего вычищаются gc.
     
  11. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
  12. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    У джавы разных GC вагон и маленькая тележка, и они отличаются методом работы, впрочем они все обеспечивают сборку любых объектов не видимых из активной области видимости. Включая зацикленные списки.
     

Поделиться этой страницей