0

嗨,我对 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

4 回答 4

4

即使是运行一个简单的 Helloworld 程序,java 也需要加载 300 多个类。我的意思是Java初始化需要内存。Java 有用于定义内存使用的 Xmx 和 Xms 选项。有关更多详细信息,请参阅Java 文档

于 2012-09-09T18:02:14.777 回答
3

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

于 2012-09-09T18:52:38.167 回答
2

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

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

您需要在 JVM内部进行测量以确定是否使用了过多的内存。为此使用探查器。JDK 中的 JVisualVM 是一个不错的免费启动分析器。

于 2012-09-09T18:57:08.430 回答
1

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

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

于 2012-09-09T19:09:47.217 回答