История изменений
Исправление m0rph, (текущая версия) :
Пока, кроме «кривого тормозилова» никто ничего конкретного не привел.
Ну ты сам посуди:
- VM во время работы основной программы постоянно осуществляет кучу проверок, что программа не пытается сделать что-то плохое. Проверка на выход за границы массива,
проверка на jump за пределы метода(edited: выполняется один раз при верификации байткода) и т.п. - VM постоянно профилирует программу, выявляя наиболее часто выполняющиеся куски кода и оптимизирует их на лету.
- VM время от времени запускает сборку мусора, что само пе себе не является тривиальной задачей. Сборщик мусора должен определить недосягаемые объекты (объекты на которые отсутствуют ссылки или же объекты с циклическими ссылками, до которых больше нельзя добраться), поддерживать в актуальном состоянии пулы поколений объектов, возможно проводить дефрагментацию этих пулов и т.п.
И все это делается параллельно с работой основной программы. Тут как ни крути, все равно производительность программы на C++ если и достанешь, то только в отдельно взятых участках кода. А самое главное - на компьютере выполняются и другие программы, которым тоже нужны процессорные такты, прожигаемые VM впустую, и память, резервирующаяся и возможно простаивающаяя для пулов объектов.
Исходная версия m0rph, :
Пока, кроме «кривого тормозилова» никто ничего конкретного не привел.
Ну ты сам посуди:
- VM во время работы основной программы постоянно осуществляет кучу проверок, что программа не пытается сделать что-то плохое. Проверка на выход за границы массива, проверка на jump за пределы метода и т.п.
- VM постоянно профилирует программу, выявляя наиболее часто выполняющиеся куски кода и оптимизирует их на лету.
- VM время от времени запускает сборку мусора, что само пе себе не является тривиальной задачей. Сборщик мусора должен определить недосягаемые объекты (объекты на которые отсутствуют ссылки или же объекты с циклическими ссылками, до которых больше нельзя добраться), поддерживать в актуальном состоянии пулы поколений объектов, возможно проводить дефрагментацию этих пулов и т.п.
И все это делается параллельно с работой основной программы. Тут как ни крути, все равно производительность программы на C++ если и достанешь, то только в отдельно взятых участках кода. А самое главное - на компьютере выполняются несколько программ, которым тоже нужны процессорные такты, прожигаемые VM впустую, и память, резервирующаяся и возможно простаивающаяя для пулов объектов.