LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Виртуальная Ява

Posted by LG.BALUKATION на 2009/06/16

Мысли на примерно эту тему у мены были в основном после SUN TechDays, однако вот что-то тож вспомнилось и решил написать.

Не секрет, что Java является весьма популярным решением некоторых проблем — у неё есть своя ниша (в основном, серверная) и конкурентов вроде не так уж и много. Ну т. е. про серверные решения мне сложно судить (вроде как позиции JavaEE весьма крепки — С++ там не в може, может ruby или python?), так что опишу своё мнение про остальные два направления (десктопное и мобильное).

На десктопе мне кажется сейчас дела у JavaSE вполне себе скромны — ИМХО она могла бы быть чем-то вроде Delphi образца 1998-2003 годов, т. е. есть же куча мелочей, которым скорость не особо важна и их хотелось бы реализовать попроще да побыстрее. Однако здесь царит хаос — на OSX хватает разборов между Carbon и Cocoa, а жава там идёт лесом; Solaris скорее девелперский WIP, чем пригодная для простых юзеров система; в Linux/*BSD бал правят классические GTK+ и Qt (который несколько сложнее изначально, но и гораздо богаче по возможностям); Windows предлагает девелоперам валить с обычного WinAPI и сей на фирмовый dotNet и вроде прошли уже времена когда там писалась куча всяких прожек на JavaSE — такие «мелочи» сейчас делают на C# (фич больше, работает быстрее) или Adobe AIR (модно?). Конечно, это не значит, что на JavaSE вообще ничего не пишут — просто «бум прошёл» и остались лишь те, кому это действительно надо (как например Eclipse).

Отдельно хочу сказать про игры — ИМХО игры на JavaSE это бред! Вроде кто-то сваял одну такую, некоторые использовали Java для скриптов и тулз, но полностью писать движёк на ней не рационально — всё-таки игра должна быть быстрой, очень быстрой и красивой, а JavaSE на персоналках далеко не самая быстрая штука.

Зато игры очень популярны в JavaME — в основном это всякие простенькие штуки для телефонов, примерно как были на приставках 20 лет назад. Их разработка стоит мало, а телефон есть почти у каждого и некоторые любят на нём поиграть время-от-времени… Хотя тут не тоже всё просто — JavaME не единственная мобильная платформа, она прекрасно вписывается в «простенький телефон», который постепенно вытесняется более технологичными поделками. Например, сейчас не редко можно встретить в казалось бы обычном телефоне процессор уровня ARM7-9 с частотой в 200-400 МГц и десятками мегабайт оперативной памяти — в такой конфигурации нормально может работать не только прошивка, но и полноценная ОС со всякими нативными программами. JavaME тоже не стоит на месте, в погоне за скоростью там стали использовать всякие хитрые методы интерпретации (JIT например, хотя он потребляет дополнительную память), на некоторых процессорах вообще задействована Jazelle («примочка» для аппаратной трансляции байт-кодов в ассемблер ARM), но это всё равно менее гибко, чем нативный код. Ещё будущее JavaME не так уж ясно — SUN последние годы обещает MIDP3, но производители железа как-то не спешат поддерживать эти начинания, а сам SUN выкидывает поддержку разных систем из своего SDK (WTK1 мог работать в Windows/Linux/Solaris как на x86 так и SPARC, WTK2 уже в Windows/Linux x86, а текущий WTK3 только Windows) и открыв исходники похоже теряет интерес к развитию проекта. Видимо основной мобильной Java вскоре станет Google Android, а конкурировать ему придётся с мобильными Linux’ом и Darwin’ом.

Но пост вообще не об этом немного — как-то меня заинтересовал вопрос виртуализации Java. Ведь сама-по-себе виртуализация есть уже очень давно, даже на таких убогих платформах как PC. Несколько лет назад Intel и AMD даже представили некие аппаратные технологии, упрощающие это суровое занятие и куча систем начали «вдруг» внедрять поддержку виртуализации в себя (ну скажем контейнеры в Solaris, KVM в линуксе и подобная приблуда в Widows Server, грозящая вырости в нечто типа солярисных контейнеров для совместимости со старым софтом в десктопном Windows).

Однако, когда мы пользуем Java в виртуальной машине, ей ИМХО не так уж и много перепадает — виртуализация несколько медленнее нативного выполнения, а Java вносит ещё пять копеек общие накладные расходы. При этом ИМХО было бы вполне логично, если и в host- и в guest-окружении есть Java, использовать версию host’а — она выполняется без лишних посредников и вообще проще же поддерживать/обслуживать одну единую среду для всех, чем кучу разных — по одной на систему. Ну или хотя бы должен быть некий способ дать виртуальной Java понять, что она виртуальная и следует несколько по-другому использовать ресурсы (части манипуляций следует избегать, потому как они в виртуалке заметно сложнее устроены чем в настоящем железе — например выделение памяти, лучше запросить один большой «кусок», чем много маленьких, пусть он и будет заметно больше необходимого).

Интересной альтернативой мне кажутся штуки навроде GCJ (среди профих фич это ешё и «примочка» к GCC для компиляции Java в нативный код), но как-то там глухо всё и новостей годами нет :-( Хотя вот всякие вещи типа грядущего уже этой осенью OpenCL и не первый год доступной CUDA тоже наверное могут заметно поднять скорость выполнения Java-кода, но мне кажется таких реализаций JVM в ближайшее время не будет.

Сдаётся мне, в ближайшие пару лет Java будет не хило потеснена на всех направлениях кроме серверов — а это значит нас ждут новые платформы, хорошие и разные. С другой стороны, виртуализация наступает в осном именно в серверном сегменте, так что м/б и появится та самая «виртуальная ява» =)

Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s