2016-10-20 4 views
1

Я применяю пул объектов, где мы сталкиваемся с проблемами из-за огромного количества создания объекта. Для этого мне нужен метод clear() для очистки или восстановления объекта по умолчанию для каждого объекта, как если бы он был вновь созданным объектом. Можно ли это сделать без ручного вызова каждого метода для установки по умолчанию, поскольку это приведет к ошибке, если разработчик забыл обновить clear() при изменении bean class.восстановление объекта по умолчанию

+0

Просто мысль, если вы всегда вызываете clear() из конструктора, было бы довольно очевидно, чтобы разработчик niex касался кода, в котором clear() - это то, где происходит инициализация объекта. Конечно, не пуленепробиваемый. Затем вы можете подумать, как далеко вы можете получить автоматические тесты. Если вы сериализуете новый и использованный, но очищенный объект, а сериализации не совпадают, это может быть признаком проблемы, например. –

+0

Не могли бы вы указать вашу проблему? Это память? Это вычислительное время? В случае, если у вас есть проблема с памятью, объединение объектов может быть неэффективным (если данные не вписываются в ОЗУ, это не подходит, никаких исправлений для этого, кроме переосмысления вашей структуры данных). Это похоже на [XY-Problem] (http://xyproblem.info/) для меня. – Turing85

ответ

0

Прежде всего, все нежелательные объекты автоматически собираются сборщиком мусора.

Другой вариант вы должны запросить сборщик мусора с помощью:

System.gc(); 

ИЛИ

Runtime.getRuntime().gc(); 

не Вы можете Override finalize method в классе фасоли

protected void finalize() throws Throwable 
{ 
//Keep some resource closing operations here 
} 
+1

OP упомянул, что проблема ** создания ** объекта - проблема, а не память (я полагаю, это больше времени, чем проблема с памятью). – Turing85

+1

System.gc(); должен (должен) не использоваться в продуктивном коде. Но в этом случае сборщик мусора должен быть настроен с аргументами. См. Https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/ –

+0

Спасибо за исправление –

0

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

В то же время, я бы сказал, что ваше избегание огромного количества создания объекта здесь неоправданно, пока вы не увидите в профилировщике значительное время этого конкретного события. Я бы также сказал, что из-за сложной структуры ваших классов (поскольку вы не хотите писать этот чистый метод самим собой, я думаю, они сложны) - очистка этих объектов, которые они сами будут брать, сопоставимы с временем создания этого объекта. Объединение в Java в большинстве случаев используется для действительно дорогостоящих объектов, таких как потоки или соединения БД.

Смежные вопросы