`
- 浏览:
16658 次
- 性别:
- 来自:
杭州
-
以具体的SQL语句 select a+b fromtable 为例进行说明,下面是它的解析过程:
1.调用虚函数Add.eval(),需确认Add两边数据类型
2.调用虚函数a.eval(),需要确认a的数据类型
3.确认a的数据类型是int,装箱
4.调用虚函数b.eval(),需确认b的数据类型
5.确认b的数据类型是int,装箱
6.调用int类型的add
7.返回装箱后的计算结果
从上面的步骤可以看出,一条SQL语句的解析需要进行多次虚函数的调用。我们知道,虚函数的调用会极大的降低效率。那么,虚函数的调用为什么会影响效率呢?
有人答案是:虚函数调用会进行一次间接寻址过程。事实上这一步间接寻址真的会显著降低运行效率?显然不是。
流水线的打断才是真正降低效率的原因。
我们知道,虚函数的调用时是运行时多态,意思就是在编译期你是无法知道虚函数的具体调用。设想一下,如果说不是虚函数,那么在编译时期,其相对地址是确定的,编译器可以直接生成jmp/invoke指令; 如果是虚函数,多出来的一次查找vtable所带来的开销,倒是次要的,关键在于,这个函数地址是动态的,譬如 取到的地址在eax里,则在call eax之后的那些已经被预取进入流水线的所有指令都将失效。流水线越长,一次分支预测失败的代价也就越大,如下所示:
pf->test
001E146D mov eax,dword ptr[pf]
011E1470 mov edx,dword,ptr[eax]
011E1472 mov esi,esp
011E1474 mov ecx,dword ptr[pf]
011E1477 mov eax,dword ptr[edx]
011E1479 eax <-----------------------分支预测失败
011E147B cmp esi esp
011E147D @ILT+355(__RTC_CheckEsp)(11E1168h)
说到流水线,penalty基本上都是因为气泡(分支指令导致预取失败)。虽然引入流水线极大提高了效率,流水线不是越长越好。
Scala的运行时反射机制很好机制很好解决了这个问题。未完待续,下回分解。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
字节码生成库是生成和转换java字节码的高级api。
字节码生成库拥有高级的API生成和转换Java字节码。
字节码生成:为什么Spring技术很强大?
ASM操作字节码,动态生成Java类class文件,模拟Spring的AOP实现原理。
基于Java字节码的混淆技术研究 基于Java字节码的混淆技术研究
1. 字符串自动生成字节码功能.(为系统自带DEBUG工具服务) 2. 在生成的字节码中已经包含E命令,偏移地址,结束标记. 3. 偏移地址能修改. 工具使用事项:(Ascii.EXE ) 1.回车时 按 Crtl + Enter 2.输入Hello World! ...
可变字节码,一种压缩算法,是大规模数据存储的一个不错的选择
jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载jvm字节码自动加载
- 第10章 前端编译与优化10.2.4 语义分析与字节码生成经过语法分析之后,编译器获得了程序代码的抽象语法树表示,抽象语法树能够表示一个结构正确的源程序,但
这篇文章我们以输出 "Hello, World" 来开始字节码之旅,如果之前没有怎么接触过字节码的话,这篇⽂章应该能够让你对字节码有⼀个最基本的认识。
关于java字节码的开源介绍,可以参考来吧 关于java字节码的开源介绍,可以参考来吧
Java字节码分析工具,系统分析了java字节码文件,即java class类文件,对该文件中的各种成分以树的形式描述出来,只能针对未加密的class文件,一般由标准java编译器编译生成的class文件都未加密,该系统在vs2003下面...
字节码实战
java字节码加密
java字节码反编译工具 JAD+FrontEnd
传统的破解很麻烦,要在pc上进行,搭建开发环境,反编译dex代码回java,修改后,再编译成dex(困难),打包apk Dalvik字节码编辑器则选择了完全不同的技术路线.既然java编译字节码,而字节码的文档是公开的,那就能够直接解释...
1.2.2:字节码生成技术(bytecode generation,即CG) 6 1.2.3:scala代码优化 7 二:sparkSQL运行架构 8 2.1:Tree和Rule 9 2.1.1:Tree 10 2.1.2:Rule 10 2.2:sqlContext的运行过程 12 2.3:hiveContext的运行...
查看编辑class文件,可查看操作字节码bytecode指令
轻松看懂Java字节码,对java字节码的详细分析,理解java字节码
Java字节码优化框架