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

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

Discussion in 'Разработка плагинов для новичков' started by JonBoss, Sep 21, 2015.

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

    Trophy Points:
    76
    Skype:
    ya_narik1
    Имя в Minecraft:
    Jon
    Ну это точно :D
     
  10. Dereku

    Dereku Старожил

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

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

    Trophy Points:
    123
    Имя в Minecraft:
    Reality_SC
  12. Shevchik

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

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

Share This Page