© Syeerzy|Powered by LOFTER
写了 30 年代码的大叔

java使用的字节码虚拟机, 对比 ruby的字码虚拟机来说,   内存使用减少了, 但是速度也降低了.

因为 byte 太短, 以至于只能用于表示指令, 而无法同时表示指令的参数, 这势必造成每一条指令需要多次出栈(jvm是基于栈的虚拟机) , 而出栈操作是一个内存读取操作,  一般来说是远慢于cpu操作的.   另外一方面,  现代大多数硬件处理器上, 最高效(或并列最高效)的操作是 32位整数操作(即使是64位软硬件,  32位整数操作也是最快的操作) ,  而单独的字节操作的性能根据硬件不同,是等于或慢于32位整数操作的.     字节码因为只有8位, 因此每条指令占据的内存空间只有 8(无参数指令),16(单参数)或24位(双参数).    因此比 字码指令(所有指令都是32位) 更节约内存.

字码虚拟机, 因为所有指令含参数都是等长的32位, 这样所有取指操作都是32位读, 理论上内存访问次数比字节码要少得多, 并且完整的32位整数作为指令读入以后被多次使用时,  访问的其实都是cpu的缓存.