Обнаруживает ли V8 переменные типа int и обрабатывает ли их более эффективно?

Это больше о Node.JS, который использует движок V8. Это движок JavaScript, который также используется в Google Chrome.

Я слышал, что V8 очень быстр не только для Node, но и для браузеров. Тем не менее, одна вещь, которую я заметил в JavaScript, это то, что типы не кодируются для переменных.

Чтобы добиться этого в Java, вам потребуется Objectпеременный тип для всего. Это было бы значительно менее эффективно, например, в цикле for:

for (var i = 0; i < array.length; i++) {}

. У меня вопрос: как V8 обрабатывает типы переменных? Знает ли он, что эта переменная iвсегда является либо int, либо long? (Мне кажется это маловероятным, потому что i++может преобразовать longв double.)

Или V8 обрабатывает вещи таким образом, что это не имеет значения? Я думаю, что несколько простых примеров того, что может создать JIT-компилятор, будут полезны. И в Java, и в JavaScript есть JIT-компиляторы для преобразования кода в C.

Я не программист на C, но мне любопытно узнать, как обрабатываются типы, и действительно ли Java более эффективна в этой области. (да, я знаю, что ввод-вывод будет иметь гораздо большее значение для большинства программ, чем обработка типов)

5
задан Bryan Field 27 March 2012 в 16:06
поделиться