Реализация строк в питоне сделана в C, и не очень понятно, почему она должна тормозить.
Питонячий код можно еще разогнать (и afair сильно выиграть по потреблению памяти), если сделать вот так:
''.join(map(str, range(1000000))
Таким образом мы не образовываем мусора в виде промежуточных строк ("0", "01", "012"
...) и прогоняем склейку средствами C
Про код на Java не могу ничего сказать, но мои примитивные познания подсказывают, что компилятор должен быть убить
т.к. s
в дальнейшем не используется, и возможно, JIT недостаточно прогрелся