В 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, но предпочтительно в соответствии с тем, что говорит спецификация языка о таких случаях).