Java程序消耗太多内存

时间:2012-09-09 17:53:31

标签: java arrays sorting 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");
    }
}

4 个答案:

答案 0 :(得分:4)

即使运行一个简单的Helloworld程序,java也需要加载300多个类。我在这里的意思是Java初始化需要内存。 Java具有Xmx和Xms选项,用于定义内存使用情况。有关详细信息,请浏览Java documentation

答案 1 :(得分:3)

对于jvm进程,24 MB是正常的。

答案 2 :(得分:2)

您需要记住,Java程序无法独立运行,但需要Java虚拟机平台来处理内存,字节码执行和其他任务。 Oracle JVM使用相当多的内存来加速执行,因此即使是小型程序也会带来很大的启动损失。

这就是小型实用程序很少用Java编写的原因。

您需要测量内部 JVM以确定是否使用了太多内存。使用分析器。 JDK中的JVisualVM是一个很好的免费启动分析器。

答案 3 :(得分:1)

您的程序使用的内存远远少于240 MB ideone报告。我只是在我的笔记本上运行它,在System.in.read();的末尾插入main()以延迟终止,并使用Windows任务管理器查看相应的进程。报告峰值内存使用 9 MB ...

其中大部分将是JVM的基础结构(例如即时编译器),并且与您的程序完全无关。