Size: a a a

2017 July 11

LP

Luger Parabellum in Java Developers
вот еще вопрос. что такое метод finalize, когда он вызывается, и что будет, если в его реализацию засунуть бесконечный цикл? вот так:
class Foo{
   @Override
   public void finalize(){
       while(true);
   }
}
источник

I

Isabek in Java Developers
Luger Parabellum
CME будет, все дело в реализации subList
Значит subList возвращает не ArrayList?
источник

LP

Luger Parabellum in Java Developers
Isabek
Значит subList возвращает не ArrayList?
да
источник

KB

Kalys Bakytbekov in Java Developers
Luger Parabellum
вот еще вопрос. что такое метод finalize, когда он вызывается, и что будет, если в его реализацию засунуть бесконечный цикл? вот так:
class Foo{
   @Override
   public void finalize(){
       while(true);
   }
}
Outofmemoryexception?
источник

V

Vlad in Java Developers
Luger Parabellum
вот еще вопрос. что такое метод finalize, когда он вызывается, и что будет, если в его реализацию засунуть бесконечный цикл? вот так:
class Foo{
   @Override
   public void finalize(){
       while(true);
   }
}
Finalize вызывает перед дестроем объекта
источник

LP

Luger Parabellum in Java Developers
Vlad
Finalize вызывает перед дестроем объекта
угу, когда ссылок не осталось
источник

I

Isabek in Java Developers
Luger Parabellum
вот еще вопрос. что такое метод finalize, когда он вызывается, и что будет, если в его реализацию засунуть бесконечный цикл? вот так:
class Foo{
   @Override
   public void finalize(){
       while(true);
   }
}
Он типа деструктор. Но его рекомендуют не использовать.
источник

I

Isabek in Java Developers
Kalys Bakytbekov
Outofmemoryexception?
@Luger_08 так?
источник

I

Isabek in Java Developers
Или ЖВМ умеет сбрасывать через некоторое время?
источник

LP

Luger Parabellum in Java Developers
нет)
источник

LP

Luger Parabellum in Java Developers
ну точнее да, но не скоро это заметишь
источник

V

Vlad in Java Developers
Вообще while(true) адовая вещь с точки зрения проца
источник

LP

Luger Parabellum in Java Developers
если изменить Foo немного:
class Foo{
   byte[] tmp = new byte[1000000];
   @Override
   public void finalize(){
       System.out.println("LongFinalize finalizer");
       while(true);
   }
}
источник

V

Vlad in Java Developers
Luger Parabellum
ну точнее да, но не скоро это заметишь
Ну можно и не заметить если приложение быстрый закончит выполнение..
источник

LP

Luger Parabellum in Java Developers
и запустить там скажем java -Xms8m -Xmx8m Main вот так
источник

I

Isabek in Java Developers
@Luger_08 в каких случаях надо использовать finalize? Я знаю, что он используется в стримах(файл стримы. при закрытии ресурса).
источник

KB

Kalys Bakytbekov in Java Developers
Isabek
@Luger_08 в каких случаях надо использовать finalize? Я знаю, что он используется в стримах(файл стримы. при закрытии ресурса).
Там же файнали нет?
источник

I

Isabek in Java Developers
Например FileOutputStream оверайдит finalize.
protected void finalize() throws IOException {
       if (fd != null) {
           if (fd == FileDescriptor.out || fd == FileDescriptor.err) {
               flush();
           } else {
               close();
           }
       }
   }
источник

LP

Luger Parabellum in Java Developers
Isabek
@Luger_08 в каких случаях надо использовать finalize? Я знаю, что он используется в стримах(файл стримы. при закрытии ресурса).
например, при работе с unsafe)
источник

V

Vlad in Java Developers
Isabek
@Luger_08 в каких случаях надо использовать finalize? Я знаю, что он используется в стримах(файл стримы. при закрытии ресурса).
Ну скорее это все просто обертки для того чтобы закрыть проблемы с мемори ликам и прочем добром которое портит производительность. Так как на сколько я помню метод не гарантированный. И лучше не юзать..
источник