java 伪泛型与c#真实泛型思考

沃日,不知道被那本书忽悠了,下面两种方式使用泛型其实性能上没有差别,区别的只是自己手动写强制类型转换或者是编译器做强制类型转换(语法糖解析)。。。我就奇怪了这个cast操作怎么会省掉了。。。

List a=new LinkedList<String>();
String s=(String)a.get(1);
List<String> b=new LinkedList<String>();
s=b.get(1);对应的bytecode,经测试的确性能上没有区别。 NEW LinkedList
DUP
INVOKESPECIAL LinkedList.<init>() : void
ASTORE 1
ALOAD 1: a
ICONST_1
INVOKEINTERFACE List.get(int) : Object
CHECKCAST String 
ASTORE 2

NEW LinkedList
DUP
INVOKESPECIAL LinkedList.<init>() : void
ASTORE 3
ALOAD 3: b
ICONST_1
INVOKEINTERFACE List.get(int) : Object
CHECKCAST String 
ASTORE 2: s 

 

c#真实泛型,这个泛型信息一直保留到nativecode中,不知道如何在规避类型膨胀的前提下做到了所有引用类型只生成一份nativecode(《CLR via c#》提到这一点),如果按照这种方式实现,按照道理应该和java一样要做一次强制类型转换,性能优势何在?了解的同学不吝赐教啊,捣鼓了下反汇编还没能整清楚。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值