假设我在Java中执行类似以下的冒泡排序示例:
package testing;
public class bubbleSort {
public static void main(String a[]) {
int i;
int array[] = { 12, 9, 4, 99, 120, 1, 3, 10 };
System.out.println("Values Before the sort:\n");
for (i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
System.out.println();
bubble_srt(array, array.length);
System.out.print("Values after the sort:\n");
for (i = 0; i < array.length; i++)
System.out.print(array[i] + " ");
System.out.println();
System.out.println("PAUSE");
}
public static void bubble_srt(int a[], int n) {
int i, j, t = 0;
for (i = 0; i < n; i++) {
for (j = 1; j < (n - i); j++) {
if (a[j - 1] > a[j]) {
t = a[j - 1];
a[j - 1] = a[j];
a[j] = t;
}
}
}
}
}
有没有办法找出
(a)元素数组的数据结构消耗多少RAM?
(b)如果没有 - 有没有办法比较进程消耗的RAM与香草HelloWorld相比多少?
package testing;
public class Testing {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
答案 0 :(得分:1)
元素数组的数据结构消耗了多少RAM?
不容易。它将长约40-48字节,这不值得担心。
如果没有 - 有没有办法比较进程消耗的RAM与香草HelloWorld相比多少?
猜测一下,我会说你的第一个例子比第二个例子使用多达100 KB。这是因为在意义之后继续分配加载额外的类并将int
值转换为String
这是大部分内存消耗。相比之下,你的阵列是微不足道的。
无论如何,100 KB也不值得担心。在桌面上,100 KB的成本不到1美分,并且可以重复使用。
答案 1 :(得分:1)
您可以使用getRunTime()
查找当前程序的运行时。 totalmemory
属性将帮助您找到使用的内存。
// Get the Java runtime
Runtime runtime = Runtime.getRuntime();
// Run the garbage collector
runtime.gc();
// Calculate the used memory
long memory = runtime.totalMemory() - runtime.freeMemory();
答案 2 :(得分:0)
您必须对应用程序进行概要分析才能获得真正的内存使用情况。试试YourKit。在调用sort之前向应用程序添加暂停。在运行排序之前和完成之后创建内存快照并进行比较。
调用所有GC不会带给你“真实”的结果。 VM本身分配了很多对象。将被清理,你会得到错误的图片。
答案 3 :(得分:0)
使用此公式;
static long memoryUsed() {
return runtime.totalMemory() - runtime.freeMemory();
}
static final Runtime runtime = Runtime.getRuntime();