В этой статье я хочу рассказать о полученном опыте оптимизации приложений по памяти с использованием стандартных механизмов оптимизации JVM таких, как различные типы ссылок, стратегиях garbage collection’а, множестве ключей, влияющих на сборку мусора. Уверен, что каждому из вас приходилось жонглировать параметрами для улучшения производительности и вы не найдете в статье какой-то черной магии или рецепта от недостатка памяти, просто хочется поделиться своим опытом.
Читать полностью »
Рубрика «jvm» - 11
Тюнинг JVM на примере одного проекта
2013-04-01 в 12:16, admin, рубрики: hotspot, java, jpoint, jvm, Блог компании Luxoft, метки: hotspot, java, jpoint, jvmЧасто задаваемые вопросы про asm.js
2013-03-04 в 13:36, admin, рубрики: clang, clr, Emscripten, ES6, javascript, jit, jvm, Mandreel, mozilla, NaCl, offline, PNaCl, source maps, SpiderMonkey, динамическая компиляция, оптимизация кода, оптимизация программ, сборка мусора, управляемый код, фонд Мозиллыasm.js — новый язык?
Нет, это просто подмножество JavaScript. Программа на asm.js одинаково поведёт себя и в существующих движках JavaScript, и в движке с предварительной (ahead-of-time, AOT) компиляцией, способном распознавать и оптимизировать asm.js; различаться будет её скорость, разумеется!
Какой выигрыш в производительности можно ожидать от asm.js?
Сейчас ещё рано утверждать. Однако наши предварительные измерения производительности программ, скомпилированных из Си в asm.js, показывают не более чем двукратное замедление по сравнению с компилированными в машинный код посредством clang. Мы опубликуем дальнейшие измерения, когда насобираем их.
Как я могу следить за ходом реализации?
Мозилла работает над первой реализацией оптимизирующего компилятора asm.js для SpiderMonkey. В вики Фонда Мозиллы также опубликован план разработки дальнейших выпусков и оптимизаций. Если авторы других движков JavaScript опубликуют собственные планы реализации компиляторов asm.js, мы их здесь упомянем.
Почему бы вам не разработать синтаксис байткода вместо необычного диалекта джаваскрипта?
Для компиляторов наподобие Emscripten или Mandreel синтаксис байткодового языка попросту не особенно значим. Притом большинство байткодов и вообще машинных языков имеют двоичный формат, не читаемый людьми. Однако мы можем создать на уровне asm.js более человеко-читаемый синтаксис, который будет и удобным в дизассемблировании, и пригодным для чтения и записи людьми.
То обстоятельство, что asm.js — это JavaScript, не обернётся ли непредсказуемым выполнением кода?
Предварительная (ahead-of-time, AOT) компиляция asm.js может генерировать код, выполнение которого весьма предсказуемо, потому что валидный код asm.js ограничен крайне небольшим подмножеством JavaScript, состоящим только из строго типизированных целых чисел, чисел с плавающей точкою, арифметических операций, вызовов функций и обращения к куче.
Почему бы тогда не NaCl или PNaCl вместо этого? Вы просто упорствуете насчёт JavaScript?
Принципиальным достоинством asm.js по сравнению с новыми технологиями вроде NaCl и PNaCl является то, что asm.js работает сегодня: существующие движки JavaScript ужé неплохо оптимизируют код, написанный в таком стиле. Что означает, что разработчики могут выпускать код на asm.js сегодня, а со временем его работа будет ускоряться. Другою важною пользою является заметно бóльшая простота реализации, для которой потребуется совсем немного дополнительных механизмов поверх существующих движков JavaScript — и не понадобится слой совместимости API.
Разработчик Smalltalk для JVM собирает средства для завершения разработки версии 1.0
2013-02-22 в 21:08, admin, рубрики: indiegogo, java, jvm, smalltalk, краудфандинг, Программирование, метки: indiegogo, java, jvm, smalltalk, краудфандингСтраница проекта на Indiegogo: Redline Smalltalk V1.0
Под Java Virtual Machine уже разработано и портировано большое количество языков программирования — Scala, Clojure, Groovy, JRuby, Jython, Fantom, Kotlin и т.д… Выбор средств у разработчиков в мире Java просто огромен. Но есть еще один язык, который наверное многие бы хотели видеть на JVM со стабильной реализацией — Smalltalk!
Разработчик James Ladd собирает средства ($20 000), чтобы уйти на полный рабочий день для доведения Redline Smalltalk до версии 1.0. Осталось собрать чуть меньше половины суммы.
Новые перспективы Java Enterprise с Polyglot JVM
2013-02-15 в 11:17, admin, рубрики: java, java ee, jvm, spring, Блог компании EPAM Systems, метки: java, java ee, jvm, spring В этой статье хочу поделиться размышлениями об архитектуре серверных платформ для корпоративных приложений на Java с использованием Java EE, Spring, Akka.
Почему возникло желание написать? На JavaOne 2012 много было рассказано о трендах и изменениях в мире Java и JVM — Polyglot JVM, лямбды, модульность. На конференции возникло ощущение, что все наработки Java EE не должны зависеть от языка программирования. Сейчас часто задают вопрос – какой язык заменит Java? Но тогда куда девать все существующие технологии разработки корпоративных приложений? Эти технологии однозначно имеют ценность. Можно ли одновременно заменить язык программирования и при этом сохранить существующие наработки и сделанные инвестиции? Видимо да.
Теперь постараюсь подробнее – о влиянии тренда Polyglot JVM.
Введение Polyglot JVM достигает двух целей: открывает путь инновациям и позволяет сохранить все технологии Java в секторе корпоративных приложений. Но путь к этим выводам будет долгим;-)
Эта статья – для разработчиков корпоративных приложений. Надеюсь, она поможет систематизировать знания по архитектурам серверных платформ на базе Java и, возможно, вдохновит расширить диапазон используемых языков.
Читать полностью »
Вся правда о вертикальном масштабировании в PaaS и почему Вы переплачиваете за обычный хостинг
2013-02-05 в 9:36, admin, рубрики: cloud computing, cloud hosting, garbage collector, java, Java 6, java 7, jvm, memory leaks, paas, platform as a service, Блог компании Jelastic, платформа как услуга, хостинг, метки: cloud computing, cloud hosting, garbage collector, Java 6, java 7, jvm, memory leaks, paas, platform as a service, платформа как услугаКак известно, приложение не всегда использует одинаковое количество ресурсов, но благодаря функции автоматического вертикального масштабирования, в Jelastic изменяется размер контейнера под приложение. Соответственно пользователю не нужно переплачивать за зарезервированные ресурсы, которые не используются, как в случае с другими PaaS. Ведь действительно, бизнес-модель всей хостинговой индустрии и старого поколения PaaS решений основана на «overselling». Таким образом, важность справедливой оплаты за фактическое потребление ресурсов очевидна.
Понятное дело, что в то время, когда разрабатывали JVM, никто не знал об облаках или виртуализации, и, тем более, никто даже не задумывался о плотности в PaaS. Сегодня виртуализация изменила ход игры в хостинговой индустрии, и эта революция будет продолжаться. Теперь мы можем более эффективно использовать ресурсы. Майкл Видстендт, один из главных архитекторов JVM в Oracle, подтвердил, что JVM совсем не предназначена для PaaS, но Oracle делает все возможное, чтобы изменить это. Плюс ребята из IBM двигаются в том же направлении. Некоторые примечания о динамическом поведением JVM можно найти в IBM JavaOne Keynote 2012 Highlights.Читать полностью »
Самопальная привязка С++ классов к JVM через JNI
2013-01-08 в 21:57, admin, рубрики: android, c++, java, jni, jvm, С++, метки: jni, jvm, С++ Так получилось, что недавно на работе мне понадобилось портировать старенькое нативное приложение под Android. Приложение написано в основном на C/C++. Захотелось мне это проделать грамотно и цивилизованно. Собственно об этом под катом
Читать полностью »
Doppio — JVM, Компилятор и дизассемблер в JavaScript
2012-10-04 в 3:06, admin, рубрики: Doppio, java, javascript, jvm, дизассемблер, компиляторНа сегодняшний день мы не испытываем недостатка в прекрасных вещах, которые написаны на JavaScript. Да и реализации JVM в JavaScript мы уже видели. Теме не менее, Doppio представляет собой наиболее полную и активно развивающуюся JVM.
Океаны, роботы и Java
2012-09-03 в 10:44, admin, рубрики: java, jvm, linux, paas, Блог компании Jelastic, Облачные вычисления, океан, Программирование, робототехника, роботы, метки: java, jvm, linux, paas, облачные вычисления, океан, Программирование, робототехника, роботыПоследний проект Джеймса Гослинга привлек к себе огромное внимание. Мы тоже активно следим за его развитием. Оказалось, что он использует Jelastic для своих разработок.
Размещаем индекс Lucene в RAM при помощи Azul Zing JVM
2012-08-01 в 14:13, admin, рубрики: garbage collector, java, jvm, высокая производительностьВесь поисковый индекс Google размещается в RAM памяти уже как минимум 5 лет. Почему бы не попробовать сделать то же самое и с поисковым индексом для Lucene?
В последнее время, оперативная память стала весьма недорога, поэтому для высоконагруженных ресурсов, вполне резонно ожидать серьезного улучшения производительности за счет размещения поискового индекса целиком в оперативной памяти.
Очевидный вопрос – не попробовать ли нам загрузить весь индекс, в предоставляемый Lucene класс RAMDirectory
?
Читать полностью »
GC и большой heap: друзья или враги?
2012-07-23 в 15:51, admin, рубрики: garbage collector, java, jvm, высокая производительность, метки: garbage collector, java, jvmСпоры о том, что лучше: ручное управление или автоматическое ведутся во многих областях науки и техники. Положиться на человека или отдаться на откуп бесстрастным механизмам и алгоритмам? Похоже, что в мире создания Enterprise решений чаша весов склонилась все-таки в сторону автоматического управления памятью, большей частью из-за того, что возиться с указателями, ручным управлением памятью и закрашивать седину после каждого бага, появившегося из-за «неправильного» компилятора С/C++ не хочется сейчас уже никому. Но до сих пор возникают на форумах топики, где не сдающиеся суровые приверженцы ручного управления памятью яростно и непримиримо отстаивают свои ретроградные взгляды в борьбе с прогрессивной частью человечества. Пусть их, оставим их в покое.
Одной из наиболее часто использующихся платформ с механизмами автоматического управления памятью стала Java. Но, автоматическое управление памятью принесло не только комфорт в нелегкий труд программистов, но и свои недостатки, с которыми приходиться сталкиваться всё чаще и чаще. Современные многопользовательские приложения, способные обработать огромный поток транзакций, требуют значительных аппаратных ресурсов, размеры которых раньше было трудно даже вообразить. Однако, дело не в размерах этих ресурсов, дело в том, что сборщик мусора, существующий в большинстве современных JVM, не может работать эффективно с большими объемами памяти.
Читать полностью »