Презентация к докладу "Куда уходит память?" на JEEConf Kiev 2012. О размере объектов в java на разных архитектурах, о потреблении памяти типичными java приложениями. Пока нету видео доклада можно почитать мою статью на хабре на эту тему http://habrahabr.ru/post/134102/
3. Тенденции за последние 8 лет
Средний heap вырос с 0,5ГБ до 5ГБ
Вырос уровень абстракции
Миграция с 32-х разрядных
архитектур на 64-х разрядные
Количество ядер увеличилось в 8 раз
31. Коллекции
Среднее java приложение ~1 млн HashSet
HashSet → HashMap → Array →
HashMap$Entry
Цена — 72 байта за new + 28 байт за каждое
новое значение
41. Денормализация модели
class Cursor { class Cursor2 {
String icon; String icon;
Position pos; int x;
} int y;
class Position { }
int x;
int y;
}
Объект Cursor2 занимает на 30% меньше
памяти
45. Hadoop
public void map(...) {
...
for (String word : words) {
output.collect(new Text(word), new IntVal(1));
}
}
46. Hadoop
class MyMapper ... {
Text wordText = new Text();
IntVal one = new IntVal(1);
public void map(...) {
...
for (String word : words) {
wordText.set(word);
output.collect(word, one);
}
}
}
47. Hadoop
public void reduce(Key key, Iterable<Value> values,
Context context) {
IntWritable c;
for (Value value : values) {
c = new IntWritable(0);
accMap.put(new Value(value), c);
}
}
48. Известные проекты
Постоянная генерация миллионов
объектов
Постоянные срабатывания сборщика
49. Intellij Idea
protected int computeDeltaUpToRoot() {
return computeDeltaUpToRoot(new NodeCachedOffsets());
}
static class NodeCachedOffsets {
private int modCount;
private int deltaUpToRoot;
private boolean allDeltasUpAreNull;
}
50. Известные проекты
Вся модель в памяти
Используют свои коллекции вместо
стандартных
Отказались от оболочек
51. Известные проекты
Часть модели в памяти
Целая команда по
оптимизации памяти
52. Известные проекты
Огромные heap (60ГБ)
Проблемы с паузами
сборщика
Off-heap решение