Вот что я пытаюсь определить ...Статический метод экземпляра для общего использования
У меня есть класс утилиты для добавления строк в текстовый файл. Это должно использоваться рядом других классов, таких как общий файл ведения журнала.
В моей первой реализации у меня были все классы , которые хотели использовать его, чтобы сделать экземпляр без ссылок, например.
new Logger(logline,logname);
Конструктор создает PrintWriter
, добавляет строку и закрывает файл.
Это казалось расточительным, поскольку новый экземпляр создается для каждой прилагаемой строки.
Альтернатива заключается в использовании статический метод, называемый «ИгНеЬп» в этом общем классе, так как я понял, что статические методы и данные повторно использовать ту же память над & над ... но
этот статический метод создает экземпляр PrintWriter
для выполнения его работы, поэтому это не означает, что для каждой строки, как # 1, создается новый экземпляр из PrintWriter
?
Во всяком случае, (я относительно новым для Java) есть ли хорошо известно, одобрил способ сделать это, или мы просто создать прочь, и пусть мусор коллектор убирать за нами?
Благодаря
Спасибо, Крис! Это было предположение о том, что большинство из меня вызвало резонанс . Существует 2 файла журнала, один из которых является обычным протоколированием и один для ошибок - поэтому сохранение ссылок в HashMap (таблица отправки) отлично. Ключом может быть имя файла. Одна вещь, которую я не поймал .. О закрытии цели ведения журнала ... файл закрывается после каждой строки. Должен ли я также освобождать память? Думал, что это произойдет, когда JVM выйдет (при завершении программы). – javaphild
Закрытие файла регистрации для каждой строки журнала означает, что вам необходимо повторно открыть для каждой строки журнала. Это будет серьезный удар производительности. Вы должны использовать flush(), если цель состоит в том, чтобы убедиться, что данные регистрации попадают на диск; который по-прежнему несет определенную производительность, но не так много. Однако, если вы все еще настаиваете на закрытии файла после каждой строки, вам не нужно беспокоиться о его закрытии в другом месте. Да, вы можете оставить эту карту автоматически. –
Использование имени файла в качестве ключа может быть прекрасным, если только клиенты ссылаются на имена файлов только с помощью строковых констант, а не как прямые строковые литералы. Это уменьшает эффект, который могут иметь опечатки, и означает, что имена ваших файлов хранятся только в одном месте, что облегчает их изменение, если это необходимо. –