JavaRush /Курсы /Java Syntax /Время жизни объекта

Время жизни объекта

Java Syntax
6 уровень , 4 лекция
Открыта

— Ещё хочу рассказать пару интересных вещей про время жизни объектов. В Java случайно потерять объект очень сложно – если у тебя есть ссылка на него, значит, объект гарантированно жив.

Ссылки на объекты нельзя поменять. Нельзя увеличить или уменьшить. Также нельзя создать ссылку на объект – ее можно только присвоить. Или обнулить. Все.

Ясно. Т.е. если я обнулю (сотру) все ссылки на объект, то я никогда не смогу получить на него ссылку и обращаться к нему?

— Да. Но часто наблюдается обратная ситуация – слишком много неиспользуемых живых объектов. Часто программисты создают объекты десятками и хранят их в различных списках для обработки, но никогда эти списки не чистят.

Чаще всего ненужные объекты помечаются программистами, как неиспользуемые и все. А удалением их из списков никто не занимается. Так что для больших Java-программ характерно раздувание – все больше и больше неиспользуемых объектов остаются жить в памяти.

— Ты столкнёшься с этим ещё не скоро. Но я буду каждый раз обращать твоё внимание, на неиспользуемые больше объекты и правильный способ их утилизации.

Ок. спасибо. Ты прояснила мне пару моментов насчет ссылок.

6
Задача
Java Syntax Pro, 6 уровень, 4 лекция
Недоступна
Удаляем одинаковые строки
Удаляем одинаковые строки
Комментарии (188)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
11 марта 2024
11.03.2024 check, мой уровень 6
Ultron Уровень 4 Expert
21 января 2024
под объектами имеется ввиду сами объкты и классы, переменные, методы?
Byte Boss Уровень 33
5 марта 2023
Аналогично. На текущий момент имею 980 материи. Девать её абсолютно некуда. 🤨
Nikita Prokaev Уровень 23
14 июля 2022
Почти в каждой лекции вижу комментарии про недостаток материи. Вы все задачи что-ль скипаете? У меня за 900 ее, девать некуда. Решайте задачи, информации на каждую тему можно в интернете нагуглить кучу и еще видосов столько же.
Anonymous #2234949 Уровень 9
13 января 2022
Специально растягивают лекции, дабы материю всю оставили
Aleksei Reinsalu Уровень 19
20 ноября 2021
информация на вырост, поживем увидим
murMeow Уровень 5
16 октября 2021
Почитайте "Изучаем Java" от Кэти Сьерра и Берт Бейтс) В ней в первых главах просто и с картинками разжевана тема про объекты и ссылки. Да и сама книга хорошая как дополнение к курсу
Юличка Уровень 32
17 июня 2021
пока не очень понимаю зачем нам это, как отдельная лекция
Инна Уровень 29
20 сентября 2021
Предыдущая статья про сборщик мусора и вовсе была вставлена в курс повторно, я ее уже читала. Видимо надо было высосать из пальца 16 уровень
Valua Sinicyn Уровень 41
17 февраля 2021
На самом деле все просто: • объекты на которые не ведет ни одна ссылка считаются мертворожденными и удаляются сборщиком мусора при следующем проходе; • неиспользуемые объекты, в т.ч., дефолтные нужно обнулять (обнулять ссылки на них), чтобы они были удалены Garbage Collector и не захламляли систему. Возьмем, для примера, котов :)
 
public class Main{
  public static void main(String[] args){
    new Cats("Васька").info();
    Cats cat2 = new Cats();
    cat2.info();
    Cats cat3 = new Cats("Персик");
    cat3.info();
    
    try{
      cat2 = null;
      cat2.info();
}
    catch(NullPointerException e){
      System.out.println(e.getMessage());
  }
 }
}
public class Cats{
  String name;
  public Cats(){
}
  public Cats(String name){
    this.name = name;
}
  public void info(){
    System.out.println("Тест");
 }
}
 
Исходим из того, что обнуленная ссылка считается мертвой и не может вызывать метод, т.к., метод вызывается на объекте, на который обнуленная ссылка уже не ссылается (будет выброшено исключение NullPointerException, которое мы обработали в try - catch). Такой вот каламбур. Отвязали ссылку от объекта - ссылка сдохла. Привязали сдохшую ссылку к новому объекту - ссылка ожила. Итак. Создано 3 кота. 1-й бессылочный (будет удален сборщиком мусора). 2-й дефолтный (имеет значение null по умолчанию), но все равно считается "живым", поэтому обнуляем ссылку в 10-й строке. 3-й кот выжил, ибо: - имеет ссылку; - ссылка не обнулена. Коты виртуальные. В реале ни один кот не пострадал. Я сам кошатник до мозга костей. :) Надеюсь, теперь тема стала понятной. Особое внимание - необходимости также обнулять ссылки на дефолтные объекты. Геттер не использовал для наглядности и чтобы облегчить код. Всем удачи.
hidden #2448783 Уровень 19
7 декабря 2020
у меня такой хлам в голове .
Sergey Уровень 22
7 декабря 2020
поддержу, что-то муть пошла
hidden #2448783 Уровень 19
7 декабря 2020
прям как в этой лекции.