2012-09-09 89 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