Я бы расставил акценты несколько иначе. На мой взгляд, josm тормозит больше, чем poltach. Возможно, это из-за того, что обычно я работаю на Atom. Но именно на процессорах низкой производительности и проявляется тормознутость в наибольшей степени.
А от кодера - да, зависит. Причем в гораздо большей степени, чем от того, компилируемый язык или интерпретируемый. Но факт остается фактом: на процессорах типа Atom JOSM тормозит нещадно. Я, например, не могу с ним работать.
На С тоже пишут переносимый код. Но виртуальная машина для него не нужна.
В том то и дело, что текст java компилируется не в native код, а в байт-код, который процессор выполнять не способен. Может только интерпретировать.
Правда, уже после появления java были разработаны процессоры, способные выполнять байт-код, но x86 к ним не относится.
Для переносимости между платформами там байткод, а VM - чтобы его исполнять. Это можно делать прямой интерпретацией, либо предкомпилированием в нативный код, что она и делает. Это и есть JIT.
JOSM не так чтобы особо тормозной, но java жрет память, причем совершенно бесполезным образом - вот это самая гадость. Система лезет в своп - начинаются тормоза. Я не спец по java, но могу предположить что она в целом медленнее работает потому что, во-первых, у JIT не особо много времени на оптимизацию под целевую платформу, ибо нативный код надо скорее начать исполнять, во-вторых, gc, а лишний indirection, всякие счетчики ссылок, и собственно реальная трата циклов когда он работает, и в-третьих, тот факт, что добавляется дополнительная прослойка для вызова библиотечных функций, тех же X11 и GL. В общем то, что когда домиков очень много он действительно рисует их не очень быстро - скорее всего не шибко эффективная работа с GL, что от языка не зависит.
К слову, я лулзов ради за ночь написал на C парсер .osm - пока он в 6-8 раз быстрее expat и libxml2 (SAX обертка над ним в 1.5 раза медленее). Интересно было бы его сравнить с тем, что используется в osmosis. А вообще как раз большие-то объемы данных можно обрабатывать и интерпретируемыми языками, гораздо более высокие требования - у интерактивных приложений.
Кстати, может быть. На мой взгляд, 1 Гбайт памяти на 5 Мбайтную карту - вполне достаточно. Но JVM может считать иначе.
По моему опыту, чтобы GL начал тормозить, нужно скормить ему не менее 100000 объектов. Я сильно сомневаюсь, что “много домиков” дотягивают до таких цифр.
Ява не разу не интерпретируемый язык. Сначала компиляция до байт-кода, а потом исполнение в виртуальной машине. И тормознутость как раз из-за ВМ.
Интерпретируемыми ЯВУ являются python, perl, rexx и пр. Где нет другого представления программы, кроме как в исходном коде.
Ну, я неспособен написать парсер OSM за ночь - у меня это занимает примерно на порядок больше времени (неделя-две). Но скорость обработки почти не отличается от времени простого копирования. Т.е. основное время уходит на операции с диском, чем на собственно обработку процессором.
Интерактивные приложения - да: один кадр должен строиться не дольше 30-50 мс на среднем компьютере и не дольше 150 мс - на мобильной архитектуре.
Ну а для пакетной обработки приемлемыми временем считаю от единиц секунд (правда, для 4 Гб файла это нереально) до единиц минут (что для указанного объема вполне достижимо).
Для josm-то да (т.е. у меня, например, josm запускается с -Xmx1024m, а с -Xmx512m, бывало, ему не хватало памяти, хотя по-моему там жрет wms слой), а вообще, разумеется, это ОЧЕНЬ много, потому что даже карта-то 5Мб не весит - там xml, реальных данных в 15 раз меньше.
В современных играх более миллиона поликов в кадре, причем с текстурами, освещением и шейдерами. Дело не в количестве, дело в том, чтобы рисовать сразу по многу пачками, и не гонять их по шине каждый кадр. Проще говоря, VBO. Плюс кое-что наверное можно и в шейдеры вынести.