ddv wrote:zzhou wrote:1. На Java оно работает быстрее (потому что Jit в Яве анализирует код на лету - учитывая то, как он исполнялся)
Даже если оно и анализирует код на лету ( в чем я глубоко сомневаюсь,..скорее всего он компилирует при загрузке класса или т.п.), то тогда на это тратятся НЕМАЛЫЕ ресурсы и оно НЕ может быть быстрее native кода.
В Яве нет автоматической компиляции в нативный код. Т.е. она не производится обязательно перед выполнением кода - когда Jit решит что код достаточно критичен - тогда и сделает.
Компилирование из bytecode в нативный делается один раз - и для приложения которое висит долго (место кассира, веб сервер) затраты мизерны. Но когда сишный компилятор имеет доступ только к development-time информации, Jit имеет доступ к дизайн-тайм информации.
Т.е. грубо говоря - если забыл указать const в C++ - то оптимизатор его обыно не сможет соответственно оптимизировать. Java - сможет.
zzhou wrote:
многие _реально_ важные вещи работают быстрее (покажите мне "среднего программиста" на C++ который будет грамотно использовать heap - а на Яве это автоматом) - т.е. выделение памяти под объект очень дешёвое)
Быстрее чего?? Вы утверждаете что Native код после JIT будет быстрее ....Native кода который откомпилирован и оптимизирован компилятором на основе более полной информации??? Что значит правильно использовать heap??? Выделение памяти это всегда недешевое удовольствие, и особенно для много потоковых систем.[/quote]
1. У компилятора меньше информации чему у Jit.
2. На Яве есть "куча", которой заправляет VM. Т.е. когда делается new... - то нет автоматического malloc - вместо этого просто VM учитывает что такие-то 20 байт заняты таким-то объектом (malloc выполняется только когда куча уже заполнена). При этом VM:
- Может решить что этот объект может жить на стеке - и выделит под него память на стеке (что быстрее)
- Делит объекты на "долгоживущие", "короткоживущие" и т.д. - соответственно размещая их на куче, нменьшая фрагментацию памяти.
На С++ - это решает программист и это весьма нетривиально (начинаются или игры с библиотеками - или долгие часы в профайлере - или и то и другое сразу)
zzhou wrote:2. На Яве меньше утечек ресурсов - приложение реже падает.
На С++ как напишешь так и будет работать. Это в яве утечка ресурсов возможна даже если все правильно написано.[/quote]
Примеры утечек ресурсов в "правильно написанной" Ява-программе?
zzhou wrote:С чего это на Яве библиотеки более стабильные? Получается парадокс...пишут менее квалифицированные - а результат более стабильный... Вам самому не смешно?
1. Кто сказал что на Яве пишут менее квалифицированные? Менее снобские - это да.
2. Результат более стабилен - в том числе - и из-за преимуществ языка.
3. Я привёл пример Hibernate, JSF и т.д. - которых на C++ всерьёз нет, и которые очень сильно упрощают разработку _реальных_ приложений.