平媒用稿,请勿转载

前言

年前的业余时间,对脚本娘fiscevm的c语言版进行了大量优化工作,在使用了1.6新增的关于stackMap部分内容对typeStack进行优化,以及对指令的Dispatcher造成的分支预测失败次数进行优化之后,脚本娘的速度提升了130%,现在已经接近java -Xint的90%了,在我的i7 macbook air上,用runtime里的com/cirnoworks/fisce/privat/Linpack来测试,旧版fiscevm是30Mflops/s左右,新版是65Mflops左右,用-Xint关掉HotSpot的java是80Mflops/s左右。当然,打开HotSpot的话,java是1300Mflops/s。不jit的虚拟机再怎么着也赶不上jit的虚拟机啊

随想

想想从脚本娘诞生开始,就一直处在闭门造车的阶段,当时要是经常抬头看看他山之石就好了。也因此,在借助了很多他山之石之后,我也想利用接下来几篇的时间,把脚本娘成长的经历,也就是对解释型虚拟机的性能优化历程分享给大家,敬请期待。

Chaptor 0 在开始之前

代码

作为对比的基准,优化前的代码在这里下载:fiscevm-c-master.tar.gz

优化后的版本在这里下载:fiscevm-c-vmgen.tar.gz

术语

  1. thread: 当前的线程 里面包括了一系列的frames,还有锁等等相关的信息
  2. frame: 当前的执行上下文,比如指令的位置pc,栈顶指针sp等等,在thread中以堆栈的形式堆放,
  3. sp: 栈顶指针
  4. pc: 指令指针
  5. instructions: 当前方法的指令列表,是个数组,instructions[ip]就是当前的指令
  6. 剩下的名称在第一次使用的时候会提供解释

基本结构

堆栈(Stack)

堆栈是一块

目录

高可移植解释型虚拟机优化专场·开场篇
高可移植解释型虚拟机优化专场·第一章 stackMap的解析和优化
高可移植解释型虚拟机优化专场·第一章·补