Я запускаю приложение с интенсивным вводом-выводом, и когда я запускаю профилировщик jvisualvm, я вижу, что NumberAwareComparator занимает 33% памяти и 55% всех объектов!
Это нормально? Зачем это делать? Где я могу начать искать решение этой проблемы?
/ * более поздняя редакция - пример кода * /
//Using GPars
(0..length - 1).eachParallel { i ->
def final h = [:]
distHash[i] = h
println("Calculating distances ")
if (i + 1 < length - 1) {
((i + 1)..length - 1).each {j ->
def d = distanceCalc.getDistance(paragraphs[i], paragraphs[j])
if (d < 0.25) {
h[j] = d
}
}
}
}
Спасибо!
Я думаю, что у меня есть какое-то объяснение, но я все еще не уверен насчет механизма.
У меня была функция, которая выполняла некоторые базовые числовые вычисления, и когда она работала, у меня было множество экземпляров NumberAwareComparator:
(0..length - 1).eachParallel { i ->
def final h = [:]
distHash[i] = h
println("Calculating distances ")
if (i + 1 < length - 1) {
((i + 1)..length - 1).each {j ->
def d = distanceCalc.getDistance(paragraphs[i], paragraphs[j])
if (d < 0.25) {
h[j] = d
}
}
}
}
Как только я объявил тип для каждой переменной (как показано ниже), все компараторы пропали и были заменены на числа с плавающей запятой / ints
(0..length - 1).eachParallel { i ->
final LinkedHashMap<Integer, Float> h = new LinkedHashMap<Integer, Float>()
distHash[i] = h
println("Calculating distances ")
if (i + 1 < length - 1) {
((i + 1)..length - 1).each {j ->
float d = distanceCalc.getDistance(paragraphs[i], paragraphs[j])
if (d < 0.25) {
h[j] = d
}
}
}
}