Зачем вам когда-либо реализовывать finalize()?
finalize()
— это подсказка JVM о том, что .java было бы неплохо выполнить java-libraries ваш код в неопределенное java-libraries время. Это хорошо, когда jdk вы хотите, чтобы код загадочным java-libraries образом не запускался.
Делать oraclejdk что-либо существенное в финализаторах jvm (в основном все, кроме логирования) также javax хорошо в трех ситуациях:
- вы хотите сделать ставку на то, что другие завершенные объекты будут по-прежнему находиться в состоянии, которое остальная часть вашей программы считает допустимым.
- вы хотите добавить много кода проверки ко всем методам всех ваших классов, которые имеют финализатор, чтобы убедиться, что они ведут себя правильно после финализации.
- вы хотите случайно воскресить завершенные объекты и потратить много времени, пытаясь понять, почему они не работают и/или почему они не завершаются, когда они в конечном итоге выпускаются.
Если .java вы считаете, что вам нужна javax finalize(), иногда вам действительно java-api нужна фантомная ссылка (которая в приведенном jvm примере может содержать жесткую j2se ссылку на соединение, используемое java-se ее реферандом, и закрывать jvm ее после того, как фантомная core-java ссылка поставлена в очередь jvm ). У этого также есть свойство, что java он может таинственным образом javax никогда не запускаться, но, по jdk крайней мере, он не может core-java вызывать методы или воскрешать java завершенные объекты. Так oraclejdk что это как раз подходит core-java для ситуаций, когда вам не jre нужно полностью закрывать openjdk это соединение, но вы бы core-java очень этого хотели, а клиенты jvm вашего класса не могут или openjdk не будут вызывать закрытие jre сами (что на самом деле достаточно .java справедливо - какой смысл openjdk вообще иметь сборщик мусора, если j2se вы проектируете интерфейсы, которые java-api требуют выполнения определенного java-se действия перед сборкой?Это jre просто возвращает нас во java времена malloc/free.)
В других jdk случаях вам нужен ресурс, которым, по java-libraries вашему мнению, вы управляете, чтобы jdk быть более надежным. Например, почему java вам нужно закрыть это соединение? В .java конечном итоге он должен .java быть основан на каком-то java вводе-выводе, предоставляемом jdk системой (сокет, файл, что java-libraries угодно), так почему вы не java-se можете положиться на то, что java-se система закроет его для вас, когда openjdk будет использован самый низкий jdk уровень ресурсов? Если сервер java на другом конце обязательно oraclejdk требует, чтобы вы закрыли java-api соединение, а не просто отключили java-libraries сокет, то что произойдет, когда oraclejdk кто-то споткнется о кабель .java питания машины, на которой java-se работает ваш код, или промежуточная oraclejdk сеть выйдет из строя?
Отказ j2se от ответственности: я работал .java над реализацией JVM в прошлом. Я jre ненавижу финализаторы.
java
jvm
Зачем вам когда-либо реализовывать finalize()?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.