Я использую JProfiler 7.2.3 для профилирования распределения памяти в моем приложении. У меня есть классы с такими методами, как set(int, double)
и setDouble(int, double)
. Эти два метода абсолютно идентичны, но JProfiler говорит, что последний метод создает упакованный объект Double, а первый — нет.
Следующий код демонстрирует проблему. При записи выделения памяти с помощью JProfiler при вызовах setDouble(int, double)
создается 100 000 объектов Double, но в других идентичных методах объекты не создаются. Разница только в названии метода!
Как я могу предотвратить JProfiler от неправильного подсчета количества объектов Double без переименования метода setDouble? Почему JProfiler неправильно учитывает объекты Double?
public final class Test {
public static void main(String[] args) throws java.io.IOException {
Test test = new Test();
for (int i = 0; i < 100000; i++)
test.set(i, i);
for (int i = 0; i < 100000; i++)
test.setD(i, i);
for (int i = 0; i < 100000; i++)
test.setDestination(i, i);
// JProfiler says this method creates boxed Double objects
for (int i = 0; i < 100000; i++)
test.setDouble(i, i);
for (int i = 0; i < 100000; i++)
test.setDoubleValue(i, i);
// Don't terminate VM
System.in.read();
}
private double[] values = new double[100000];
public final void set(int i, double value) {
values[i] = value;
}
public final void setD(int i, double value) {
values[i] = value;
}
public final void setDestination(int i, double value) {
values[i] = value;
}
public final void setDouble(int i, double value) {
values[i] = value;
}
public final void setDoubleValue(int i, double value) {
values[i] = value;
}
}
setDouble(int, double)
создаст коробочное целое число. Я могу только предположить, что JProfiler автоматически заменяетsetDouble(int, double)
наsetDouble(Integer, Double)
. - person harvey   schedule 29.04.2014