В Java я сделал следующие вещи, не задумываясь об этом:
public class Main {
public void run() {
// ...
}
public static void main(String[] args) {
new Main().run();
}
}
Однако в последнее время я не уверен, насколько безопасно это делать. В конце концов, после его создания нет ссылки на объект Main
(ну, есть ссылка this
, но делает ли это подсчет?), Поэтому похоже, что существует опасность того, что сборщик мусора может удалить объект, пока это в середине выполнения чего-то. Поэтому, возможно, метод Main
должен выглядеть следующим образом:
public static void main(String[] args) {
Main m = new Main();
m.run();
}
Теперь я уверен, что первая версия работает, и у меня никогда не было никаких проблем с ней, но я хотел бы знать, безопасно ли это делать во всех случаях (не только в конкретной JVM, но предпочтительно в соответствии с тем, что говорит спецификация языка о таких случаях).