博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
泛型(五)代码爆炸
阅读量:5303 次
发布时间:2019-06-14

本文共 638 字,大约阅读时间需要 2 分钟。

含义:在使用泛型类型参数的方法在进行JIT编译时,CLR获取方法的IL,用指定的类型实参进行替换,然后创建恰当的本地代码,这是泛型的主要特性之一。
 
然而有一个缺点,CLR要为每种不同的方法/类型组合生成本地代码,我们将这种现象称之为代码爆炸(code explosion),它会使应用程序的工作集显著增大,从而损害性能。
 
当然CLR不会坐视不管的,会提供一系列的优化措施,能够缓解代码爆炸
 
1.首先,假如为一个特定的类型实参调用了一个方法,以后再次使用相同类型实参来调用这个方法,CLR只会为这个方法/类型组合编译一次代码。所以,如果一个程序集使用List<DateTime>,一个完全不同的程序集(加载
 
到同一个AppDomain中)也使用List<DateTime>,CLR只会为List<DateTime>编译一次方法。
 
2.CLR认为所有引用类型实参都是完全相同的,所以代码能够共享。例如,CLR为List<String>的方法编译的代码可以直接用于List<Stream>的方法,因为String和Stream都是引用类型,CLR之所以能执行这个优化,是因为
 
所有引用类型的实参或变量实际只是指向堆上的对象的指针,而对象指针全部是以相同的方式来操纵。
 
但是某个类型的实参是值类型,CLR就必须专门为那个值类型生成本地代码。

转载于:https://www.cnblogs.com/liuhailiang/archive/2012/11/26/2788651.html

你可能感兴趣的文章
DFS-hdu-2821-Pusher
查看>>
Spring事务管理的三种方式
查看>>
MyEclipse中将普通Java项目convert(转化)为Maven项目
查看>>
node js 安装.node-gyp/8.9.4 权限 无法访问
查看>>
Java_正则表达式
查看>>
Linux内核分析——第二周学习笔记
查看>>
windows基本命令
查看>>
Qt图片显示效率的比较(转)
查看>>
VMware中CentOS设置静态IP
查看>>
剑指Offer_编程题_7
查看>>
js 变量大小写
查看>>
Linux系统的启动原理
查看>>
JDesktopPane JInternalFrames
查看>>
错误The request sent by the client was syntactically incorrect ()的解决
查看>>
Java基础知识学习(九)
查看>>
redis在windows下总是报错,就是下面的错误,这是哪里出错了
查看>>
Asp.net窄屏页面 手机端新闻列表
查看>>
Linux 密钥验证
查看>>
windows下UDP服务器和客户端的实现
查看>>
MySQL各版本的区别
查看>>