【问题标题】:Java program consumes too much memoryJava程序消耗太多内存
【发布时间】:2012-09-09 17:53:31
【问题描述】:

您好,我对 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");
    }
}

【问题讨论】:

  • 定义“使用24M”;你是怎么得出这个数字的?另外,这很难阅读。
  • .. 另外请编辑您的问题,以便您的代码很好地放置在代码 sn-p 中。
  • 您的性能目标数字是多少,以及(正如 Dave 评论的那样)您使用的确切值是多少(Windows 上的性能计数器,...)?当你没有很好的可衡量的目标时,“优化”某些东西并不是一个好主意。
  • @DaveNewton 请参阅以下链接,[link] (ideone.com/pUszr) 占用的内存为 245632 kB。
  • @abhey 那是~240M,不是 24M,FWIW。

标签: java arrays sorting memory


【解决方案1】:

即使是运行一个简单的 Helloworld 程序,java 也需要加载 300 多个类。我的意思是Java初始化需要内存。 Java 有用于定义内存使用的 Xmx 和 Xms 选项。更多详情请通过Java documentation

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-16
          • 2011-09-23
          • 1970-01-01
          • 1970-01-01
          • 2019-01-16
          • 2016-06-29
          相关资源
          最近更新 更多