嗨,我对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");
}
}
答案 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的基础结构(例如即时编译器),并且与您的程序完全无关。