java - How to test memory used considering garbage collector? -
i testing sorting algorithm, , test average used memory testing 1000 random vectors. problem when run 20 random vector inside loop, garbage collector run , lose calculation. should please? don't want test manual 1 one =x.
for(int j = 0; j < 1000; j++) { int vetoriginal[] = generate(); for(int = 0; < 10; i++) { int vetparateste[] = vetoriginal.clone(); long memoriainicial = runtime.getruntime().freememory() / 1024; mergesort(vetparateste); somamemoriakb += memoriainicial - runtime.getruntime().freememory()/1024; } } system.out.println("average memory used: " + somamemoriakb / (1000* 10));
ok, i'm little late here , have solved now, in case else wants know, easiest way prevent gc cleaning object keep reference in object. every object create add sort of container array/hash/vector/list or whatever language supports. eg:
var items array[0..numberofitems] (var = 0; < numberofitems; i++) { var vector = createvector() items[i] = vector; }
the container add overhead need measure first subtract amount final output. example:
var basememory = measurememory() var numberofitems = 1000 // create array of known size (eg 1000 bytes) var arrayofknownsize array[0..numberofitems] (var = 0; < numberofitems; i++) arrayofknownsize[i] = int32(0xff) // calculate size occupied data ... var expectedmemory = sizeof(int32) * numberofitems // ... subtract total memory usage , overhead var arrayoverhead = measurememory() - basememory - expectedmemory // measure memory used array of vectors basememory = measurememory() var vectors array[0..numberofitems] (var = 0; < numberofitems; i++) { var vector = createvector() vectors[i] = vector; } // subtract array overhead memory usage var usedmemory = measurememory() - basememory - arrayoverhead var averagememory = usedmemory / numberofitems
you same measurements did, inserting each vector array , subtract arrayoverhead memory usage final result.
Comments
Post a Comment