Java基础-泛型、形变和GC

Java基础-泛型、形变和GC

本文链接:https://blog.csdn.net/feather_wch/article/details/131948105

泛型、形变

1、Gson中TypeToken的作用是什么?是如何获得泛型的类型信息的?

  1. TypeToken利用匿名内部类会持有泛型的类型信息,在signature中。进行解析。
  2. new TypeToken{}.getType();// 生成内部类的class文件,里面明确知道了里面T的类型是Fruit

2、数组 用GenricArrayType 代码是field.getGenericType()方法
3、非数组 用ParameterizedType,举例Map<String, Integer>

  1. getActualTypeArugments泛型实际类型-获取数组放的是String、Integer
  2. getRawType原始类型

4、泛型变量 TypeVariable getName名称 如K,获取上界和下界
5、通配符 WildcardType 获取到上界和下界

6、形变是什么?(不变、协变、逆变)

  1. 协变:extends,父类引用 = 子类对象
  2. 逆变:super,子类引用 = 父类对象
  3. 协变:生产者 out T,读取泛型数据
  4. 逆变:消费者 in T,写入泛型数据
  5. 不变:普通的泛型
  6. 协变、只读、生产者在RxJava中大量使用,用协变把List传入方法中,避免内鬼修改
  7. 协变、修改模式、消费者,修改List中数据后交给外界去打印

7、? extends Animal 和 ? extends T 和 T exntends Animal的区别

  1. ? extends Animal和? extends T 都是通配符类型参数,都是生产者消费者场景下用到的
  2. ? extends Animal:生产者,可以保证读取出来的是Animal或者T的子类:只能按照Animal和父类读取
  3. T exntends Animal:限定泛型需要是Animal的子类

8、逆变? super Dog,只可以按照Dog子类和Object存入数据,但没办法读取

  1. 无法确定具体是哪个类,只知道是Dog的父类,
  2. 读取时可以按照Object读取(特例),其他情况不能读取

9、上界通配符和下界通配符是指什么?

  1. ? extends Animal
  2. ? super Dog

10、Kotlin支持在声明处限定范围

  1. interface Callback
  2. Java不可以,只可以声明T

11、Kotlin中协变、逆变一起使用

<in INPUT, out OUTPUT>

形变和泛型擦除

12、T extends Animal、T super Animal会如何泛型擦除?

  1. 前者擦除为Animal,后者擦除为Object

13、泛型为什么不允许调用构造方法来实例化 new T()?

  1. 无法确定T的具体类型的构造方法有多少个参数

14、泛型擦除导致不可以用instanceOf

15、Java中的?等于Kotlin中的*

意义和作用一致

16、List<?> 等价于 List<? extends Object>

17、数组默认支持协变,在运行时才检查,容器集合会在编译时检查,使用泛型时优先用集合

GC

1、对象被标记为垃圾后,不可能再被标记为存活,因为不可达。已经找不到地址了。

2、reinterpret(重新解释)
3、为什么Java不允许直接操作内存?为了垃圾回收机制。
4、为什么C/C++不能有垃圾回收机制?因为可以直接访问内存地址

C、C++中可以用long保存内存地址,在GC后,还可以继续用,完蛋!

5、为什么JVM不去管理C/C++分配的内存空间?不好管,要出事。

6、创建对象

指针碰撞>有多线程问题>CAS+失败重试机制 or TLAB thread local allocate buffer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/9087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRGRU门控循环单元分位数回归分位数回归多输入单输出区间…

微服务Day4——Docker

一、什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署&#xff0c;环境不一定一致&#xff0c;会…

npm 安装报错:源文本中存在无法识别的标记

npm install -g vue/cli 源文本中存在无法识别的标记。 所在位置 行:1 字符: 16 npm install -g <<<< vue/cli CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException FullyQualifiedErrorId : UnrecognizedToken 解决方…

064、故障处理之OMM_TiDB

oom 内存溢出&#xff0c;内存泄漏&#xff0c;相当于TiDB不能用了 TiDB Server OOM对业务的影响 TiDB Server上的业务SQL会失败业务响应时间升高前端体验变差 诊断方法 客户端应用 ERROR 2013(HY000): Lost connection to MySQL Server during query日志 dmesg -T | gr…

ARM——点灯实验

循环点灯 RCC寄存器使能GPIOE、GPIOF组寄存器 修改GPIOx组寄存器下的值 通过GPIOx_MODER寄存器设置为输出模式通过GPIOx_OTYOER寄存器设置为推挽输出类型通过GPIOx_OSPEEDR寄存器设置为低速输出通过GPIOx_PUPDR寄存器设置为禁止上下拉电阻点灯 通过GPIOx_ODR寄存器设置为高电…

excel中的vlookup如何实现根据多个条件查找?

目录 简述问题公式思路通用公式三条件查找公式实例 简述 Excel 中根据一个条件查找非常方便&#xff0c;Excel 提供了内置函数 VLOOKUP。但是实际中往往有多种情形&#xff0c;需要根据多个条件进行查找操作&#xff0c;目前没有现成的内置函数。 本篇介绍 VLOOKPCHOOSE 组合…

Craps赌博游戏问题C语言

说明一个简单的赌博游戏&#xff0c;游戏规则如下&#xff1a;玩家掷两个骰子&#xff0c;点数为1到6&#xff0c;如果第一次点数和为7或11&#xff0c;则玩家胜&#xff0c;如果点数和为2、3或12&#xff0c;则玩家输&#xff0c;如果和 为其它点数&#xff0c;则记录第一次的…

flask路由添加参数

flask路由添加参数 在 Flask 中&#xff0c;可以通过两种方式在路由中添加参数&#xff1a;在路由字符串中直接指定参数&#xff0c;或者通过 request 对象从请求中获取参数。 在路由字符串中指定参数&#xff1a;可以将参数直接包含在路由字符串中。参数可以是字符串、整数、…

Apipost使用教程

Apipost是一款集API调试、生成文档、Mock、测试于一体的协同工具。单个工具可以同时满足接口测试、生成/分享文档、Mock、流程测试等功能&#xff0c;还有超实用的多人多角色间实时协作的功能。将前端、后端、测试三种角色串联起来&#xff0c;从而实现工作流程无缝衔接、提高研…

Asp.Net 使用Log4Net (基础版)

Asp.Net 使用Log4Net (基础版) 1. 创建项目 创建ASP.NET Web Forms项目 在Visual Studio中创建一个新的ASP.NET Web Forms项目。命名为"Log4NetDemo"。 2.安装Log4Net包 打开NuGet包管理器控制台&#xff0c;并运行以下命令来安装Log4Net&#xff1a; mathemati…

(三)RabbitMQ七种模式介绍与代码演示

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 七种模式介绍与代码演示 文章目录 七种模式介绍与代码演示四大交换机四种交换机介绍 工作模式简单模式&#xff08;Hello World&#xff09;工作队列模式&#xff08;Work queues&#xff09;订阅模式&#xff08;Publis…

FPGA设计时序分析一、时序路径

目录 一、前言 二、时序路径 2.1 时序路径构成 2.2 时序路径分类 2.3 数据捕获 2.4 Fast corner/Slow corner 2.5 Vivado时序报告 三、参考资料 一、前言 时序路径字面容易简单地理解为时钟路径&#xff0c;事实时钟存在的意义是为了数据的处理、传输&#xff0c;因此严…

基于Docker-compose创建LNMP环境并运行Wordpress网站平台

基于Docker-compose创建LNMP环境并运行Wordpress网站平台 1.Docker-Compose概述2.YAML文件格式及编写注意事项3.Docker-Compose配置常用字段4.Docker Compose常用命令5.使用Docker-compose创建LNMP环境&#xff0c;并运行Wordpress网站平台1. Docker Compose 环境安装下载安装查…

ChatGPT:人工智能交互的未来之光

一、ChatGPT&#xff1a;开启自然语言交流新纪元 ChatGPT 是基于 GPT&#xff08;生成式预训练&#xff09;技术的最新版本&#xff0c;它采用深度学习模型&#xff0c;通过在大规模文本数据上的预训练来理解自然语言&#xff0c;并生成具有连贯性和合理性的回复。ChatGPT 是一…

fasync driver demo

Linux系统中的fasync用于设备驱动程序与用户空间之间的异步通信。它允许设备驱动程序通知用户空间的进程&#xff0c;当设备状态发生变化时&#xff0c;通过发送SIGIO信号来告知进程。 具体来说&#xff0c;设备驱动程序可以调用fasync_helper()函数来注册一个或多个进程&…

静态 链接

1、空间与地址的分配 现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起&#xff0c;例如将所有输入目标文件的 .text 合并&#xff08;按顺序合并&#xff09;到输出文件的 .text 节中&#xff1b;然后&#xff0c;链接…

第111天:免杀对抗-JavaASM汇编CS调用内联CMSF源码特征修改Jar打包

知识点 #知识点&#xff1a; 1、ASM-CS-单汇编&内联C 2、JAVA-MSF-源码修改&打包#章节点&#xff1a; 编译代码面-ShellCode-混淆 编译代码面-编辑执行器-编写 编译代码面-分离加载器-编写 程序文件面-特征码定位-修改 程序文件面-加壳花指令-资源 代码加载面-Dll反射…

自动驾驶技术架构

自动驾驶技术架构 自动驾驶技术架构 自动驾驶关键技术 自动驾驶汽车技术架构较为复杂&#xff0c;涉及了多领域的交叉互容&#xff0c;例如汽车、交通、通信等&#xff0c;基于自动驾驶相关的软硬件、辅助开发工具、行业标准等各方面关键问题&#xff0c;自动驾驶汽车关键技术…

CB(CBScript)如何实现两个关键字相加?

下载地址:CBScript 为自己的软件增加脚本编写功能并自定义API 如示例代码: [TestMethod()]public void Script_Args_DataTable_Select(){string script "COLACOLB";DataTable table new DataTable();table.Columns.Add("COLA");table.Columns.Add("…

深度学习(二)

目录 一、神经网络 整体架构: 架构细节: 神经元个数的影响: 神经网络过拟合解决: 卷积网络 整体架构: 卷积层 边缘填充 特征尺寸计算 池化层 特征图变化 递归神经网络 一、神经网络 整体架构: 图中分别为输入层、隐层1、隐层2、输出层 通过输入层输入某数值&#xf…