2015-10-31 6 views
0

Когда я хочу, чтобы прочитать использование барана из моей программы сJava Чтение Ram Использование

"давно используется = Runtime.getRuntime() TotalMemory() -Runtime.getRuntime() FreeMemory();.."

метод, он возвращает мне то же значение каждый раз. Например моего код

if(selectSort.equals("1")){ 

       //-------------------------BEST CASE MERGE--------------------------------------- 

       if(selectArray.equals("1")) 
        mergeSort.mergeSort(array1,0,array1.length - 1); 

       else if(selectArray.equals("2")) 
        mergeSort.mergeSort(array2,0,array2.length - 1); 

       else if(selectArray.equals("3")) 
        mergeSort.mergeSort(array3,0,array3.length - 1); 

       else if(selectArray.equals("4")) 
        mergeSort.mergeSort(array4,0,array4.length - 1); 
       else 
        System.out.println("Wrong Choice"); 

       long used = Runtime.getRuntime().totalMemory() -Runtime.getRuntime().freeMemory(); 
       String memoryString = format.format(used/(1024*1024)); 
       System.out.println("\nMemory Usage of : " + memoryString + " MB"); 

       //-----------------------------END--------------------------------------------------- 
      } 

здесь нет никаких проблем, значение оперативной памяти 6 - 7 - 17 - 27 в порядке, НО

if(selectSort.equals("2")){ 

       //-------------------------BEST CASE QUICK--------------------------------------- 

       if(selectArray.equals("1")) 
        quickSort.quickSort(array1, 0, array1.length - 1); 
       else if(selectArray.equals("2")) 
        quickSort.quickSort(array2, 0, array2.length - 1); 
       else if(selectArray.equals("3")) 
        quickSort.quickSort(array3, 0, array3.length - 1); 
       else if(selectArray.equals("4")) 
        quickSort.quickSort(array4, 0, array4.length - 1); 
       else 
        System.out.println("Wrong Choice"); 

       long used = Runtime.getRuntime().totalMemory() -Runtime.getRuntime().freeMemory(); 
       String memoryString = format.format(used/(1024*1024)); 
       System.out.println("\nMemory Usage of : " + memoryString + " MB"); 

там значения барана одинаков, 6. Я не может понять, почему? Вы можете мне помочь? Благодарю.

Вот моя программа, просто импортировать его и начать, есть меню;)

https://drive.google.com/open?id=0B-4t0pVRkFn_b3FJQkF0cmFIWlE

+0

Я пробовал все, но я потерпел неудачу, тогда я попробую format.format, но результат такой же – Berkin

ответ

0

То, что эти вызовы измерения является распределение памяти виртуальной машины Java. Существует важная разница между объемом памяти, которую ОС выделила для JVM, и объемом той памяти, которую JVM фактически использует для хранения данных.

Кроме того, внутренняя память JVM освобождается только после запуска сборщика мусора (GC). И после этого память обычно не возвращается в ОС.

+0

Хорошо, но если есть проблема с сборщиком мусора, результат первого алгоритма не был 6 7 17 27, im i wrong? – Berkin

+0

Ну, в конце концов, все зависит от реализации алгоритма сортировки. Похоже, что ваш 'quicksort' делает сортировку на месте и, следовательно, не потребляется дополнительная память, а' mergesort', похоже, требует дополнительной памяти. Один из них может заключаться в том, что Mergesort основан на рекурсии, и с каждым рекурсивным вызовом используется дополнительный стек стека. Взгляните на это сравнение: http://www.cs.wcupa.edu/rkline/ds/fast-sorts.html – hotzst