«Замена» для Finalize () не намного лучше ... почему они не могут просто понять это правильно? [закрыто]JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 «Замена» для Finalize () не намного лучше ... почему они не могут просто понять это правильно? [закрыто]

Сообщение Anonymous »

Позвольте мне сначала сказать, я знаю, что чище не рекламируется как «замена» для Finalize (); Но именно так люди будут думать об этом и использовать это (нравится Oracle или нет). < /p>
и позвольте мне, во-вторых, скажем: Try-with-resources ... Очевидно, это совершенно звуко и лучший способ очистить ресурсы, где они жизнеспособны. Но есть много случаев, когда управление ресурсами просто не может быть песочницей в локальную сферу. Игровые ресурсы или какие -либо различные приобретенные ресурсы являются очевидными примерами. Лишь немного безопаснее, хотя и намного, намного сложнее и уроднее в использовании. < /P>
Итак, каковы обычно цитируемые проблемы с завершением? Во -первых, те, которые (вероятно) не могут быть исправлены: < /p>

Непредсказуемое время. Ну, да. Но в ситуациях, когда управление ресурсами не может быть локализовано, какие альтернативы есть, кроме как очистить при недоступном? Существуют хакерские способы использования справочного подсчета, но для него нет языковой поддержки. Ну да. Но, безусловно, только большая проблема, если очень чрезмерно используется (я полагаю). < /Li>
Никакие гарантии завершивания () не будут называются применением резкого прекращения. Я действительно не покупаю это: если приложение внезапно заканчивается, ресурсы умирают с процессом - или я что -то упускаю? Кроме того, Try-with-resources также не гарантированно очистит при внезапном завершении! Ну, это, очевидно, фиксатор, верно? Если новый и звуковой механизм представлен для замены Finalize (), они будут весело поддерживать его и получить правильно! Таким образом, предложите больше гарантий в механизме замены (плюс, в любом случае, вряд ли вызовет проблему). < /Li>
В редких обстоятельствах доказано, что некоторые GCs называют Finalize () слишком рано, то есть на все еще упоминаемые объекты. Ну (а) это ошибка, так что исправьте ее и (б) снова, если добавлен новый звуковой механизм, коллекционеры просто должны сделать его правильно на этот раз! Легкое исправление: если некоторая замена Finalize (), скажем, чистка (), была введена, компилятор может отказаться от того, что вы можете сделать все, что выставляет ссылку на любой другой код в этом методе (и не должен быть полностью пропертым анализом глубокого побега, он может быть ограничен самим методом). < /Li>
Super.finalize (если реализуется) всегда должен быть выпущен в окончательно. Отлично. Встройте его в механизм, вероятно, путем De-Sugaring во время компиляции (хотя он может быть применен и во время выполнения). < /Li>
Проблема безопасности, если исключение добавлено в конструктор, а подкласс обращается к частично построенному объекту. Это я вообще не покупаю. Существуют гораздо более простые способы изучить любой объект для вредоносных целей, которые не полагаются на исключение, которое происходит, чтобы быть брошенным в конструктор. Но в любом случае ... Конечно, новый механизм может легко исправить это, стирая данные? /> один. Infintize () в c# не осужден. Просто рекомендуется «использовать его только при необходимости» (хотя это немного тавтологического). Предположительно, им только что удалось сделать это правильно. < /P>
два. Как часто кажется случаем, языковые хранители ограничивают полезную функциональность только кодом платформы. «Делай, как мы говорим, не как мы». Потому что (например,) отключенные байтобафферы гарантированно освободят память вне HEAP, когда объект становится недоступным. Так что, очевидно, можно выпустить ресурсы после того, как стать недоступными, но только если вы пишете основные классы платформы. (Во многом так, как в течение многих лет нам все говорили, что использование небезопасности было ужасной идеей, которая может заставить наших детей умереть, несмотря на то, что они используются повсюду в классах J.U.Concurrent и других.) .

Подробнее здесь: https://stackoverflow.com/questions/797 ... y-just-get
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • «Замена» для Finalize () не намного лучше ... почему они не могут просто понять это правильно? [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Что будет делать поток Finalizer, если в методе Finalize Java возникнет бесконечный цикл или взаимоблокировка?
    Anonymous » » в форуме JAVA
    0 Ответы
    22 Просмотры
    Последнее сообщение Anonymous
  • Влияет ли AggressiveInlining на Finalize в любой версии .NET?
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Влияет ли AggressiveInlining на Finalize в любой версии .NET?
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Должен ли я использовать Finalize () или нет в Java? [дублировать]
    Anonymous » » в форуме JAVA
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»