Создал новый объект в геттере, убедившись, что он не находится в ВМ
Я создал действительно простое приложение для запроса предметов, инструментов, а что нет. Я использовал базу данных для хранения всей этой информации. Мой класс менеджера заявок использует геттер, который возвращает новый экземпляр заявки, используя информацию из базы данных. Будет ли этот новый объект в стеке навсегда? Как я могу заставить его собраться? Как я могу сделать это лучше, например, как написать функцию, не создавая новый объект?
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 никогда не хранятся в стеке, только в куче. ссылки могут быть помещены в стек, и они исчезнут, как только выйдут из области видимости. Созданный объект будет собираться мусором на первом этапе сбора после потери последней ссылки на него.
Не видя функции и того, как она реализована в настоящее время, очень сложно посоветовать, как ее улучшить. Однако в качестве первой мысли можно использовать одноэлементный объект и заставить получателя обновлять его значения. Хотя это может вызвать проблемы в другом месте, если предполагается, что объект не изменяется после выборки.