Создал новый объект в геттере, убедившись, что он не находится в ВМ

Я создал действительно простое приложение для запроса предметов, инструментов, а что нет. Я использовал базу данных для хранения всей этой информации. Мой класс менеджера заявок использует геттер, который возвращает новый экземпляр заявки, используя информацию из базы данных. Будет ли этот новый объект в стеке навсегда? Как я могу заставить его собраться? Как я могу сделать это лучше, например, как написать функцию, не создавая новый объект?

public static Requisition getRequisition(int id) {
  //logic for getting the correct id and so forth
  return new Requisition(id, /*logic for name*/, /*logic for price and other fields*/);
}

1 ответ

Если бы это не было определено как проблема с производительностью, я бы не беспокоился об этом. Java сборщик мусора очень эффективен для очистки после вас.

Объекты в Java никогда не хранятся в стеке, только в куче. ссылки могут быть помещены в стек, и они исчезнут, как только выйдут из области видимости. Созданный объект будет собираться мусором на первом этапе сбора после потери последней ссылки на него.

Не видя функции и того, как она реализована в настоящее время, очень сложно посоветовать, как ее улучшить. Однако в качестве первой мысли можно использовать одноэлементный объект и заставить получателя обновлять его значения. Хотя это может вызвать проблемы в другом месте, если предполагается, что объект не изменяется после выборки.

Другие вопросы по тегам