Skip to content

Commit

Permalink
知识点更新
Browse files Browse the repository at this point in the history
  • Loading branch information
hollis.zhl committed Jun 20, 2021
2 parents 215fa0e + 32087bb commit efa8bf3
Showing 1 changed file with 2 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@

`C++``C#`是使用`Code specialization`的处理机制前面提到他有一个缺点那就是**会导致代码膨胀**。另外一个弊端是在引用类型系统中浪费空间因为引用类型集合中元素本质上都是一个指针没必要为每个类型都产生一份执行代码而这也是Java编译器中采用`Code sharing`方式处理泛型的主要原因

`Java`编译器通过`Code sharing`方式为每个泛型类型创建唯一的字节码表示并且将该泛型类型的实例都映射到这个唯一的字节码表示上将多种泛型类形实例映射到唯一的字节码表示是通过**类型擦除**(`type erasue`)实现的
`Java`编译器通过`Code sharing`方式为每个泛型类型创建唯一的字节码表示并且将该泛型类型的实例都映射到这个唯一的字节码表示上将多种泛型类形实例映射到唯一的字节码表示是通过**类型擦除**(`type erasure`)实现的

* * *

### 什么是类型擦除

前面我们多次提到这个词:**类型擦除**(`type erasue`),那么到底什么是类型擦除呢
前面我们多次提到这个词:**类型擦除**(`type erasure`),那么到底什么是类型擦除呢

> 类型擦除指的是通过类型参数合并将泛型类型实例关联到同一份字节码上编译器只为泛型类型生成一份字节码并将其实例关联到这份字节码上类型擦除的关键在于从泛型类型中清除类型参数的相关信息并且再必要的时候添加类型检查和类型转换的方法类型擦除可以简单的理解为将泛型java代码转换为普通java代码只不过编译器更直接点将泛型java代码直接转换成普通java字节码类型擦除的主要过程如下1.将所有的泛型参数用其最左边界最顶级的父类型类型替换。(这部分内容可以看:[Java泛型中extends和super的理解][2]) 2.移除所有的类型参数

Expand Down

0 comments on commit efa8bf3

Please sign in to comment.