簡體   English   中英

Java程序消耗太多內存

[英]Java program consumes too much memory

嗨,我是Java編程的新手。 我編寫的以下程序似乎占用大量內存(大約240 MB,這正常嗎?-我認為不是!)請提出一些優化此程序的方法,以減少內存存儲。

程序 -

 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");
    }
}

即使是運行簡單的Helloworld程序,Java都需要加載300多個類。 我的意思是說Java初始化需要內存。 Java具有用於定義內存使用情況的Xmx和Xms選項。 有關更多詳細信息,請查閱Java文檔。

對於jvm進程,通常需要24 MB。

您需要記住,Java程序不能單獨運行,但是需要Java Virtual Machine平台來處理內存,字節碼執行和其他任務。 Oracle JVM使用大量內存來加快執行速度,因此,即使是很小的程序也要付出很大的啟動代價。

這就是為什么小型實用程序很少用Java編寫的原因。

您需要在JVM 內部進行測量,以確定是否使用了過多的內存。 為此使用分析器。 JDK中的JVisualVM是一個很好的免費啟動分析器。

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

其中大部分將是JVM的基礎結構(例如即時編譯器),並且與您的程序完全無關。

暫無
暫無

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

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