Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

l8_nc

.pdf
Скачиваний:
13
Добавлен:
19.04.2015
Размер:
732.67 Кб
Скачать

Уборка мусора а Java

Слабая гипотеза о поколениях

Постулаты

Большинство объектов умирают молодыми

Число ссылок на молодые объекты мало

Следствие – хранить и обслуживать молодые и старые объекты раздельно

Молодое поколение – сборщик мусора настроен на производительность

Старое поколение – сборщик настроен на компактное хранение

Продвижение – перекинуть из молодых в старые при достижении возраста зрелости.

© 2013 NetCracker Technology Corporation Confidential

31

Устройство памяти в Java

http://www.slideshare.net/aragozin/java-9545575

http://habrahabr.ru/post/112676/

© 2013 NetCracker Technology Corporation Confidential

32

КПДВ

«Если бы в Java действительно

работала сборка мусора, большинство

программ бы удаляли сами себя при первом же запуске.»

Robert Sewell. Программист.

© 2013 NetCracker Technology Corporation Confidential

33

Профайлинг

HPROF -Heap Profiler

© 2013 NetCracker Technology Corporation Confidential

34

Недостатки профайлера

Профайлер знает о вашем приложении гораздо меньше, чем вы

Профайлер профилирует каждый вызов

Профайлер может вносить сильную погрешность и даже менять картину в целом

Использование

знакомство с ним

© 2013 NetCracker Technology Corporation Confidential

35

Heap Allocation Profiles (heap=sites)

java -agentlib:hprof=heap=sites Interpretator 1.a

THREAD START (obj=50000173, id = 200002, name="HPROF gc_finish watcher", group="system") THREAD START (obj=50000173, id = 200001, name="main", group="main")

THREAD END (id = 200001)

THREAD START (obj=50000174, id = 200003, name="DestroyJavaVM", group="main") THREAD END (id = 200003)

TRACE 300000: <empty> TRACE 300001:

java.lang.Thread.<init>(<Unknown Source>:Unknown line) TRACE 300002:

java.lang.Thread.<init>(<Unknown Source>:Unknown line) TRACE 300003:

java.lang.String.toCharArray(<Unknown Source>:Unknown line) java.lang.Thread.init(<Unknown Source>:Unknown line) java.lang.Thread.<init>(<Unknown Source>:Unknown line)

TRACE 300004:

java.lang.AbstractStringBuilder.<init>(<Unknown Source>:Unknown line) java.lang.StringBuilder.<init>(<Unknown Source>:Unknown line) sun.misc.PostVMInitHook.trackJavaUsage(<Unknown Source>:Unknown line) sun.misc.PostVMInitHook.run(<Unknown Source>:Unknown line)

 

 

 

 

 

 

 

 

percent

live

 

alloc'ed stack class

 

rank

self

accum

bytes objs

bytes

objs trace name

1

8.66%

8.66%

49728

12

49728

12

300142

byte[]

2

5.65%

14.32%

32464

152

32464

152

300006

char[]

3

4.29%

18.60%

24624

3

24624

3

300596

byte[]

4

2.86%

21.46%

16400

1

16400

1

300386

char[]

5

2.86%

24.32%

16400

1

16400

1

300706

char[]

6

2.13%

26.45%

12240

45

12240

45

300583

boolean[]

7

1.43%

27.88%

8208

1

8208

1

300384

byte[]

8

1.43%

29.31%

8208

1

8208

1

300914

byte[]

9

1.32%

30.63%

7568

2

7568

2

301052

int[]

© 2013 NetCracker Technology Corporation Confidential

36

CPU UsageTimes Profile (cpu=times)

CPU TIME (ms) BEGIN (total

= 280) Sun Sep 22 21:36:21 2013

rank

self

accum

count

trace method

1

2.50%

2.50%

9

300589

java.io.Win32FileSystem.normalize

2

2.14%

4.64%

449

300584

java.lang.AbstractStringBuilder.append

3

2.14%

6.79%

429

300509

java.lang.StringBuilder.append

4

1.79%

8.57%

429

300604

java.lang.CharacterDataLatin1.toLowerCase

5

1.79%

10.36%

9

300609

java.lang.String.toLowerCase

6

1.43%

11.79%

1

302043

 

sun.nio.fs.WindowsChannelFactory.newFileChannel

7

1.43%

13.21%

858

300618

java.lang.String.charAt

8

1.07%

14.29%

6

301312

java.lang.ClassLoader.defineClass

9

1.07%

15.36%

50

300141

 

java.util.concurrent.locks.ReentrantLock$Sync.nonfairTryAcquire

10

1.07%

16.43%

429

300603

java.lang.CharacterDataLatin1.getProperties

© 2013 NetCracker Technology Corporation Confidential

37

JVisualVM

© 2013 NetCracker Technology Corporation Confidential

38

Другие средства

Отладочная печать – служит разработчикам ПО с 60-х годов прошлого века

Thread stack sampling (kill -QUIT PID)

BTrace – аналог DTrace для JVM

Самостоятельная расстановка вызовов профилирования в коде (вызовы JAMon, запись данных во внешнее хранилище для постобработки, статистическая предобработка)

© 2013 NetCracker Technology Corporation Confidential

39

Суровая правда жизни

Не надейтесь найти в корпорации документацию. Исходя из того, что мне довелось видеть — все знания в компании передаются в основном посредством разговоров и мастер-классов. Часть доступной информации передается по электронной почте и вообще нигде не сохраняется. В остальном мире сейчас так не принято — ведь если кого-то вдруг нечаянно собьет автобус, то никто другой не сможет легко взять и продолжить его работу (например, сесть и сразу писать дальше код). И тут это считается нормой. Если бы у меня была компания, то я бы предпочел иметь вики на тысячи страниц.

Важно не то, что ты сделал — важно то, что ты продал. Можно днями улучшать свой код и править чужие ошибки, но пока это не оказывает никакого влияния на продажи и результат усилий невозможно продать — ваша работа практически ничего не значит. Никого не интересуют ваши правки кода в погоне за его чистотой или стилистическим единством; никого не интересует и решение проблем с архитектурой. На вас даже могут обидеться, если вы будете заниматься подобным. Когда я был студентом, мне не это рассказывали.

Не всем есть дело до программирования. Вы не всегда будете работать с теми, кто нежно любит разработку софта. У большинства людей здесь есть в жизни что-то еще (семья, дети), поэтому стремление написать чистый код чаще всего не входит в их планы. И это нормально. Я научился не ждать энтузиазма от всех и каждого.

2-3 часа чистого кодинга в день — это замечательная цифра. До того, как я попал на свою работу, я

программировал 8-10 часов каждый день, сидя за своими проектами. А в новом окружении у меня едва удается писать код 2 часа кряду. Большую часть своего времени я провожу в попытках понять, как работает чужой некомментированный/недокументированный код, занимаюсь отладкой странного поведения программ и посещаю ежедневные собрания. Все сказанное касается не только меня, поэтому случается, что проходят дни без единого коммита во всей команде. И это тоже нормально.

Суть в том, чтобы делалось дело. Если менеджер просит вас о кнопке, которая будет делать то-то и это, то никого не интересует, чего вы там наворотите. Когда запрошенная функция начинает работать, можно считать, что задача выполнена — все остальное можно будет поправить потом. Хотя, честно говоря, сам-то я с этим обещанным «потом» никогда так и не сталкивался. В колледже мне говорили, что качество кода так же важно, как и сам результат его работы. Тут оказалось, что это не так.

Чему я научился за 8 месяцев в Microsoft http://habrahabr.ru/post/183130/

© 2013 NetCracker Technology Corporation Confidential

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]