簡體   English   中英

對於Java中的自動預定應用程序,哪種方法更好?

[英]For an auto scheduled app in Java, which way is better?

我在以下位置問了一個問題: 使用Java的靜態方法main有什么實際區別?

但是並沒有得到答案,所以我想換一種說法,看看這次的問題是否更清楚:

我有一個帶有靜態main方法的A類:

public class Class_A
{
  ...

  public static void main(String[] args) 
  {
   ...
  }
}

我還有一個B類,它每天在后台24小時不間斷運行,並且每小時都會自動啟動Class_A。 Class_A使用大量內存,並且容量很大,因此,當完成時,我希望所有內存都可以回收,我正在盡自己最大的努力來確保這種情況發生,但是有時在程序中的某處可能會發生內存泄漏,所以最好讓Class_B調用:

new Class_A().main(new String[]{});

因此,完成后可以更好地回收內存嗎? 還是最好打電話:Class_A.main(new String [] {})?

那無濟於事。 即使您刪除所有Class實例並調用垃圾收集器,JVM也會保留在內存中。 解決這個問題的簡單方法是使用第二個JVM實例。 或者只是將調用部分放在cron之類的東西中。

new Class_A().main(new String[]{});

實際上是

{    // a scope for the new object
     Class_A immediatelyFreeForGC = new Class_A();
}
Class_A.main(new String[]{});

您創建的對象不會改變任何東西(除非它的構造函數有副作用),因為靜態方法總是靜態調用的,而不管您如何編寫它。

你甚至可以做

 Class_A classA = null;
 classA.main();

將沒有NullPointerException因為classA引用的對象被完全忽略。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM