ОК, поэтому я немного опоздал, и вы, вероятно, уже решили это, но на тот случай, если кто-то еще захочет узнать: Самый простой способ предотвратить очистку объекта GC - это сохранить ссылку на это в другом объекте. Для каждого создаваемого вами объекта добавьте его в какой-нибудь контейнер, например, массив / хэш / вектор / список или что-то еще, поддерживаемое вашим языком. Например:
var items as Array[0..numberOfItems]
for (var i = 0; i < numberOfItems; i++) {
var vector = createVector()
items[i] = vector;
}
Контейнер добавит некоторые накладные расходы, поэтому вам нужно сначала измерить их, а затем вычесть эту сумму из конечного результата. Например:
var baseMemory = measureMemory()
var numberOfItems = 1000
// create an array of a known size (eg 1000 bytes)
var arrayOfKnownSize as Array[0..numberOfItems]
for (var i = 0; i < numberOfItems; i++)
arrayOfKnownSize[i] = Int32(0xFF)
// calculate the size occupied by just the data ...
var expectedMemory = sizeOf(Int32) * numberOfItems
// ... subtract this from the total memory usage and you will get the overhead
var arrayOverhead = measureMemory() - baseMemory - expectedMemory
// now measure the memory used by an array of vectors
baseMemory = measureMemory()
var vectors as Array[0..numberOfItems]
for (var i = 0; i < numberOfItems; i++) {
var vector = createVector()
vectors[i] = vector;
}
// subtract the array overhead from the memory usage
var usedMemory = measureMemory() - baseMemory - arrayOverhead
var averageMemory = usedMemory / numberOfItems
Затем вы сделаете те же измерения, что и вы, вставляя каждый вектор в массив и вычитая arrayOverhead из использования памяти, чтобы получить окончательный результат.