2012-09-09 88 views
0

嗨,我相對較新的Java編程。我寫的下列程序似​​乎需要大量的內存(大約240 MB,這是正常的嗎? - 我不這麼認爲!) 請建議一些優化此程序的方法,以減少內存存儲空間。Java程序消耗太多內存

計劃 -

You have 2 sorted array suppose arr1[4] and arr2[3] 
      now we have to combinely sort them using very little extra space(i.e. in-place sort) 
      ex..arr1[4]={5,8,11,14,16} 
      arr[2]={1,7,10} 
      then result should be--in arr1[4]={1,5,7,8,10} 
      in arr2[3]={11,14,16} 

代碼 -

import java.util.*; 

class sort_in_place 
{ 
    public static void main(String args[]) 
    { 
     // input 2 sorted arrays 
     int []a = {5,8,11,14,16}; 
     int []b = {1,7,10}; 

     System.out.println("initial array: a = "+Arrays.toString(a)+" b = "+Arrays.toString(b)+"\n"); 

     // use extra space to store the array 'a' elements. 
     int key = 0, i=0; 

     for(i=0; i<a.length ; i++) 
     { 
      key = a[i];   // store value in temporary variable key. 

      // if key is greater than 1st element of array 'b' then exchange their values and sort array 'b' 
      if(key > b[0]) 
      { 
       int j = 1; 
       a[i] = b[0]; 
       while(j<b.length && key > b[j]) 
       { 
        b[j-1] = b[j]; 
        j++; 
       } 
       b[j-1] = key; 
      } 
     } 
     System.out.println("final array: a = "+Arrays.toString(a)+" b = "+Arrays.toString(b)+"\n"); 
    } 
} 
+9

定義「使用24M」;你是如何得到這個數字的?另外這很難讀。 –

+0

..此外,請編輯您的問題,以便您的代碼放置在代碼片段中。 –

+1

你的性能目標數量是多少?(正如戴夫所評論的)你使用的是什麼確切的值(在Windows上的性能指標......)?當你沒有好的可測量目標時,「優化」某些東西並不是一個好主意。 –

回答

2

您需要記住,Java程序不能獨立運行,但需要Java虛擬機平臺來處理內存,字節代碼執行和其他任務。 Oracle JVM使用相當多的內存來加速執行,因此即使是普通的小程序也會帶來巨大的啓動代價。

這就是爲什麼小公用事業很少用Java編寫的原因。

您需要測量裏面的JVM以確定您是否使用了太多的內存。爲此使用一個分析器。 JDK中的JVisualVM是一款不錯的免費啓動分析器。

+0

謝謝。我將從現在開始使用分析器。 – abhey

4

即使運行一個簡單的HelloWorld程序的Java也將需要300+類加載。我的意思是Java初始化需要內存。 Java具有用於定義內存使用情況的Xmx和Xms選項。有關更多詳細信息,請參閱Java documentation

3

對於jvm進程,24 MB是正常的。

1

您的程序使用的內存遠少於240 MB ideone報告。我只是在筆記本上運行它,在main()的末尾插入System.in.read();來延遲終止,並用windows任務管理器查看了相應的進程。報道峯值內存使用爲9 MB ...

大多數,這將是JVM的基礎設施(如即時編譯器),並完全無關的程序。

+0

感謝您的信息。 – abhey