7. Что такое Java Market share в 2002-м году превышал 50%. Снижение доли происходит медленно, и, в основном, в силу продвижения платформы .Net. Технологии Java поддерживают Sun, Oracle, IBM, SAP – почти все, кроме Microsoft :). Java применялась при создании таких систем, как Amazon, Ebay, LinkedIn, Yahoo. Платформа Java – это Ada, AWK, Clojure, Lisp, Forth, Groovy, Haskell, Lua, OCaml, Pascal, PHP, Prolog, Python, Rexx, Ruby, Scala, Scheme, TCL + ещё пара-тройка сотен менее известных или менее актуальных языков. Язык Java – это лучший в мире инструментарий разработчика: Eclipse, Intellij IDEA, NetBeans. Среда разработки Eclipse бесплатна, и вряд ли с чем-либо сравнима по функциональности и количеству дополнительных модулей. 3
10. У Java есть свои проблемы, но они не очень велики и, как правило, разрешимы4
11.
12. Есть проблема скорости обращения памяти: очень быстрая аллокация при НЕКОТОРЫХ алгоритмах работы GC может привести к ложной нехватке памяти: свободная память есть, но сборщик до неё «не добежал».
14. Понимать, каковы свойства имеющихся сборщиков мусора. Их – больше одного и они настраиваются. Знать о существовании других виртуальных машин. Oracle JRockIt. Команды java –client и java –server могут дать разницу в скорости на порядок.
15. Пулы объектов – были стандартным ответом, но есть минусы, и Sun их не рекомендует. 5
16.
17.
18. Нити – целый клубок Подход на основе select – ужасен! Ломка control flow, длинный поиск дескриптора в ядре. Не надо бояться. Практический опыт показал, что 10 000 (десять тысяч) нитей отлично отрабатывают под нагрузкой в 100 миллионов показов в сутки - при нелинейном распределении нагрузки. Пулы нитей – стандартная функциональность (ThreadPoolExecutor). Распределение нитей по ядрам зависит от VM и от режима её работы. Для серверного кода – JRockIt. Не забыть про ограничения системы (ulimit) и внутреннюю синхронизацию. И миллион нитей бесполезен, если все они стоят в очереди к одному семафору. 7
19. Back to Select Библиотека NIO – низкоуровнывый эффективный ввод-вывод. Есть аналог select. Есть memory mapped IO. Есть асинхронный ввод-вывод. Операции выполняются на самом низком из возможных уровней. В Unix операция transferTo, скорее всего, выльется в один системный вызов. FileChannel in = new FileInputStream(source).getChannel(); FileChannel out = new FileOutputStream(target).getChannel(); // JavaVM does its best to do this as native I/O operations. in.transferTo (0, in.size(), out); out.close(); in.close(); 8
20. Тяни-толкай Не всё нужно делать в контексте запроса Кешировать данные. Банально, но работает. Построить по запросу объект-ключ, искать по ключу в стандартном TreeMap – может работать удивительно быстро! Готовить данные, не дожидаясь обращения. Первый Yandex.Market стартовал три часа, но после этого вообще не обращался к дискам. Готовить бинарные данные, отстреливать ответ одним write-ом. Пример – отдача баннера. Стратегия явного отказа при cache miss может быть вполне уместна. Лучше показать журнальную статью без новостей, чем потерять посетителя вообще. 9
21. Инструментарий Конечно, Eclipse Профайлер, в том числе и для программ, работающих в среде сервера приложений – узкие места, граф исполнения. Профайлер памяти – использование памяти разными классами, утечки. Apache JMeter – нагрузочное тестирование, генерация нагрузки. JMX – анализ состояния программы и виртуальной машины в ран-тайме – стандартная функциональность в VM, можно дополнять программу своими функциями мониторинга и управления. 10
24. Избыточная гибкость Java – язык, который спроектирован для того, чтобы облегчить работу программиста. И он это действительно делает. Программирование на Java настолько эффективно, что приводит к изрядной генерализации и абстрагированию кода. В свою очередь, обобщённый код (хороший пример - Swing) допускает чрезвычайно гибкое использование. Но это не всегда нужно. Короче: если выкинуть Websphere и поставить JBoss – производительность может возрасти, а потребность в ресурсах – снизится. JBoss можно заменить на Tomcat. А Tomcat – на Jetty. А можно начать с Jetty, и сэкономить кучу времени! В то же время никто не запрещает при необходимости подняться от Jetty до Tomcat – и так далее. 13
25.
26. Не применяйте сложных механизмов работы с данными, типа ORM, или применяйте их крайне осмотрительно. Отладка производительности Hibernate может вынуть душу даже из админа с каменным сердцем.
27. Протоколированиеи т.п. – это можно делать асинхронно! Gardemarine нельзя убить, лишив его доступа к диску для записи log-файла, потому что протоколирование идёт через thread pool.14
28.
29. Не маргинальная технология - около 15 млн упоминаний по оценке Google. Версия 2.1 в релизе, версия 2.2 готовится к выпуску.
30. Жёсткое ручное управление памятью. Естественно, ссылка на такую память не может покидать пределы realtime кода.
34. Прямой доступ к памяти (возможность написания драйверов).15
35. Digital Zone clients Russian State Corporation RusNano (www.rusnano.com) Adobe (www.adobe.com) Apple (www.apple.com) Yandex (www.yandex.ru) largest Russian search engine Microsoft Russia MET, Russian Ministry of Economic Development Contact information +7 (499) 973-23-80, mailbox@dz.ru,www.dz.ru 127055, Moscow, Sushchevskaya str., house 27, structure 2, 334 office 16