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

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

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

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

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

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

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

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

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

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

6
Задача
Java Syntax Pro, 6 уровень, 4 лекция
Недоступна
Удаляем одинаковые строки
В этой задаче тебе нужно: 1. Считать 6строк и заполнить ими массив strings. 2. Удалить повторяющиеся строки из массива strings, заменив их на null (null должны быть не строками "null"). Примеры. 1. Массив после чтения строк: {"Hello", "Hello", "World", "Java", "Tasks", "World"} 2. Массив после уд
Комментарии (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 Уровень 20
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
прям как в этой лекции.