Map遍历、反射、GC

map的遍历

用foreach遍历

        HashMap<Character,Integer> map = new HashMap<>();map.put('A',2);map.put('B',3);map.put('C',3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key = entry.getKey();int value = entry.getValue();System.out.println(key+" "+value);}

反射

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

应用场景

1、JDBC中,利用反射动态加载了数据驱动程序,使用Class,forName()通过反射加载数据库的驱动程序
2、Web服务器中利用反射机制调用了Servlet的服务方法
3、Eclispe等开发工具利用反射动态刨析对象的类型和结构
4、Spring框架,Spring通过XML配置模式装载bean的过程

获取反射的三种方式

public class Student{private int id;String name;protected boolean sex;public float score;
}
public class Get{//获取反射的三种方式public staic void main(String[] args) throws ClassNotFoundException{//方式一:通过建立对象Student stu = new Student();Class classobj1 = stu.getClass();System.out.println(classobj1.getName());//方式二:通过路径实现反射Class classobj2 = Class.forName("fanshe.Student");System.out.println(classobj2.getName());//方式三:通过类名实现反射Class classobj3 = Student.class;System.out.println(classobj3.getName());}
}

GC

在JVM中,有一个低优先级的垃圾回收线程,在正常情况下不会执行,只有在当前堆内存不足或者虚拟机空闲的情况下,才会触发执行,扫描那些没有任何引用的对象,并对他们进行回收。

垃圾回收的时机:

1、显式调用System.gc();
2、由JVM垃圾回收机制决定(a 内存不足,触发GC;b finalize()方法)

垃圾回收策略:

1、引用计数算法:

  • 添加一个引用计数器,调用+1,引用失效-1,为0回收
  • 不能解决对象之间互相引用的问题

2、可达性分析算法(GC Roots)

需要垃圾回收的内存

1、方法区(1.7)/元空间(1.8)
2、堆(GC堆):Java堆可以细分为

  • 新生代(Young Generation):新生代又可分为Eden区和Survivor区

新生代的垃圾回收称为:Minor GC或者Young GC;
新生代的垃圾回收指发生在新生代的垃圾回收,因为新生代对象具有朝生夕灭的特性,所以Minor GC非常频繁,一般回收动作也快

  • 老年代(Old Generation)

老年代垃圾回收称为:Major GC
出现Major GC,一般都会伴随着至少一次的Minor GC
Major GC一般比Minor GC慢十倍以上

垃圾回收算法

1、标记清除算法(Mark-Sweep):老年代算法
2、标记整理算法(Mark-Compact):老年代算法
3、复制算法(copying):新生代算法
4、分代收集(Generation Collection)

垃圾收集过程

在这里插入图片描述

垃圾收集造成的影响

1、STW:用户线程暂停

在垃圾收集器中,并发和并行的概念有所不同
并行:指的是多条垃圾收集线程同时执行,用户线程处于等待状态
并发:指用户线程和垃圾线程同时执行(不一定同时执行,也有可能是交替执行),用户线程继续执行,垃圾收集器在另一个CPU上

2、评判垃圾收集器的指标:吞吐量和用户体验
吞吐量:吞吐量=运行用户代码的时间/(运行用户代码的时间+垃圾收集的时间)
停顿时间/用户体验:GC造成的用户线程单次停顿时间和总的停顿时间
用户体验优先和吞吐量优先是成反比的关系

垃圾回收器

在这里插入图片描述
Serial (复制算法,STW):最早的单线程串行垃圾回收器。
ParNew (复制算法,STW):是 Serial 的多线程版本。
Parallel Scavenge (复制算法):Parallel 和 ParNew收集器类似是多线程的,但 Parallel Scavenge 是吞吐量优先的收集器,可以牺牲等待时间换取系统的吞吐量。
Serial Old (标记-整理法):Serial 垃圾回收器的老年版本,同样也是单线程的,可以作为 CMS 垃圾回收器的备选预案。
Parallel Old (标记整理法):Parallel Old 是 Parallel 老生代版本,Parallel 使用的是复制的内存回收算法,Parallel Old 使用的是标记-整理的内存回收算法。
CMS (标记-整理法):一种以牺牲吞吐量为代价来获得最短回收停顿时间为目标的收集器,非常适用 B/S 系统。
G1 (标记-整理法 + 复制算法):一种兼顾吞吐量和停顿时间的 GC 实现,是 JDK9 以后的默认 GC 选项。

CMS(老年代收集器,结合新生代收集器Serial和ParNew收集器一起使用)

四个步骤:

  • 初始标记: 初始标记标记一下GCRoots可以关联到的对象,STW,整个过程很快
  • 并发标记: 这个阶段紧随初始标记阶段,在“初始标记”的基础上继续向下追溯标记。注意这里是并发标记,表示用户线程可以和 GC 线程一起并发执行,这个阶段不会暂停用户的线程哦。
  • 重新标记: 修正并发标记阶段,因为用户线程也在并发执行,所以导致原本没有被GCRoots关联的对象又被关联起来了,需要重新标记,STW,比初始标记长,比并发标记时间短
  • 并发清除: 并发的清除标记的对象,应用线程和GC清除线程可以一起并发执行

缺陷:

  • 内存碎片
  • 更多的CPU资源
  • 需要更大的对空间

CMS使用“标记-清除”算法进行的垃圾回收
CMS从全局来看,CMS收集器的内存回收是和用户线程一起并发执行的。

G1(全局收集器)

四个阶段:

  • 初始标记: 和CMS不同,不用STW,和MinorGC一起发生(G1触发MinorGC时,同时将老年代的标记给做了)
  • 并发标记: G1和CMS做的事情一样,不过G1多做了一件事情,在并发标记阶段,如果发现哪个Tenured中对象的存活几率很小或者没有对象存活,那么G1在这个阶段就会把他回收掉,不用等后面的筛选回收阶段;同时,在这个阶段,G1还会计算每个region的对象存活率,方便后面筛选回收阶段使用
  • 最终标记: 和CMS重新标记一样
  • 筛选回收: G1没有CMS的并发清除,而是筛选回收,G1挑选出在并发标记阶段计算出的存活率低的region对象进行回收,这个阶段也是和MinorGC一起回收的

G1从整体来看是基于标记-整理 算法实现的回收器,但从局部(两个Region之间)上看又是基于 标记-复制 算法实现的

FULL GC

Full GC是针对整个新生代、老生代、元空间(metaspace,Java8以上版本取代perm gen)的全局范围的 GC。Full GC不等于Major GC,也不等于Minor GC + Major GC,发生Full GC需要看使用了什么垃圾收集器组合,才能解释是什么样的垃圾回收。

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

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

相关文章

HTML | 在IDEA中配置Tomcat时遇到的一些问题的解决办法

目录 IDEA中没有web文件夹目录 Tomcat在哪里配置服务器 IDEA中没有web文件夹目录 首先说在IDEA中没有web这个文件夹的解决办法 在菜单栏中帮助中点击查找操作搜索添加框架支持&#xff08;因为我的IDEA会出现无法点击这个操作&#xff0c;所以我对该操作添加了快捷键&#xf…

防火墙技术基础篇:解析防火墙的网络隔离机制

防火墙技术基础篇&#xff1a;解析防火墙的网络隔离机制 网络安全在现代社会中扮演着重要的角色&#xff0c;保护网络系统、用户和数据免受未经授权的访问、破坏和窃取。个人、企业和国家都需要加强网络安全意识&#xff0c;采取有效措施保护自身的网络安全。随着网络攻击手段…

如何提交网站到谷歌网站收录?

其实就那么几个步骤&#xff0c;要做谷歌那肯定是需要一个谷歌账号的&#xff0c;然后找到Google Search Console这个谷歌的官方平台&#xff0c;这是最权威的可以统计来自谷歌流量的平台了&#xff0c;毕竟是谷歌自家的&#xff0c;肯定也不可能作假&#xff0c;然后就是跟着平…

【详细讲解】二叉树的层序遍历

广度优先搜索 总结一下&#xff0c;思路就是&#xff1a; 加入元素&#xff0c;记录size&#xff0c;size就是当前这一层的元素个数。不断弹出元素&#xff0c;size - 1&#xff0c; 同时加入弹出元素的左右孩子&#xff0c;直到size0&#xff0c;说明当前层已经完全遍历完&am…

【设计模式深度剖析】【A】【创建型】【对比】| 工厂模式重点理解产品族的概念

回 顾&#xff1a;创建型设计模式 1.单例模式&#x1f448;️ 2.工厂方法模式&#x1f448;️ 3.抽象工厂模式&#x1f448;️ 4.建造者模式&#x1f448;️ 5.原型模式&#x1f448;️ &#x1f448;️上一篇:原型模式 | &#x1f449;️下一篇:代理模式 目录…

Vue3中为Ant Design Vue中table的checkbox加tooltip、popover

问题的产生 Vue版本&#xff1a;3.3.13 ant-design-vue 版本&#xff1a;3.x.x 在工作时遇到一个场景&#xff0c;需要在 ant-table 的 checkbox 被禁用的时候提示原因&#xff0c;但是在 ant-design-vue 文档中并没有发现有相关介绍。 首先我去看了issue中是否有提到相关问题…

Oracle Graph 入门 - RDF 知识图谱

Oracle Graph 入门 - RDF 知识图谱 0. 引言1. 查看 RDF Semantic Graph 安装情况2. 创建一个语义网络4. 创建一个模型5. 加载 RDF 文件6. 配置 W3C 标准的 SPARQL 端点 0. 引言 Oracle Graph 的中文资料太少了&#xff0c;只能自己参考英文资料整理一篇吧。 Oracle 数据库包括…

优质道路病害数据集汇总

道路病害指的是因使用、环境影响、材料老化等因素引起的道路表面及结构的各种损伤和退化现象。这些病害可能包括裂缝、坑洞、沉陷、脱层、波浪起伏等多种形态。道路病害不仅影响道路的平整性和美观&#xff0c;更重要的是会影响车辆行驶的安全性和舒适性&#xff0c;增加行车风…

day08-Java常用API

day08——Java常用API 一、今日内容介绍、API概述 各位同学&#xff0c;我们前面已经学习了面向对象编程&#xff0c;使用面向编程这个套路&#xff0c;我们需要自己写类&#xff0c;然后创建对象来解决问题。但是在以后的实际开发中&#xff0c;更多的时候&#xff0c;我们是…

MySql--SQL语言

目录 SQl---DDL 结构定义 创建、删除 数据库 代码 运行 设计表 数据类型 整数 浮点数 主键 约束 主键自增长 默认值 字段注释 创建、删除 表 代码 运行 代码 代码 运行 SQL---DML 数据操纵 插入数据 代码 运行 代码 运行 代码 运行 代码 …

使用xsd验证xml格式的正确性

1.1 基础知识介绍 XML简介&#xff1a;XML是可扩展标记语言&#xff08;eXtensible Markup Language&#xff09;的缩写&#xff0c;它是一种数据表示格式&#xff0c;可以描述非常复杂的数据结构&#xff0c;常用于传输和存储数据。xml文件、xml消息。XSD简介&#xff1a;是X…

【linux】详解vim编辑器

基本指令 【linux】详解linux基本指令-CSDN博客 【linux】详解linux基本指令-CSDN博客 vim的基本概念 vim有很多模式&#xff0c;小编只介绍三种就能让大家玩转vim了&#xff0c; 分别是&#xff1a; 正常/普通/命令模式 插入模式 末行/底行模式 命令模式 控制屏幕光标的…

nssctf(Web刷题)

[SWPUCTF 2021 新生赛]gift_F12 打开题目是一个时间页面&#xff0c;不过看了一会儿发现没有什么用 直接F12打开网页源代码 CtrlF搜索flag 找到了flag NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} [第五空间 2021]签到题 NSSCTF{welcometo5space} [SWPUCTF 2021 新生赛…

【东山派Vision K510开发板试用笔记】nncase的安装

概述 最近试用了百问网提供的东山派Vision开发板&#xff0c;DongshanPI-Vision开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板&#xff0c;主要用于学习使用嘉楠的K510芯片进行Linux项目开发和嵌入式AI应用开发等用途。DongshanPI-Vision开发板采用嘉楠公司…

RedHat9 | 配置转发DNS服务器

一、实验环境 1、介绍 转发服务器&#xff08;Forwarding Server&#xff09;接收查询请求&#xff0c;但不直接提供DNS解析&#xff0c;而是将所有查询请求发送到另外的DNS服务器&#xff0c;将查询的结果返回后保存到缓存中。如果没有指定转发服务器&#xff0c;DNS服务器会…

LSTM实例解析

大家好&#xff0c;这里是七七&#xff0c;今天带给大家的实例解析。以前也用过几次LSTM模型&#xff0c;但由于原理不是很清楚&#xff0c;因此不能清晰地表达出来&#xff0c;这次用LSTM的时候&#xff0c;去自习研究了原理以及代码&#xff0c;来分享给大家此次经历。 一、简…

GPT‑4o普通账户也可以免费用

网址 https://chatgpt.com/ 试了一下&#xff0c;免费的确实显示GPT‑4o的模型&#xff0c;问了一下可以联网&#xff0c;不知道能不能通过插件出图 有兴趣的可以试试

3.6 enum枚举类型

本节必须掌握的知识点&#xff1a; 示例十一 代码分析 汇编解析 3.6.1 示例十一 enum定义枚举类型&#xff0c;它本质是一种整数类型&#xff08;等同int&#xff09;。所谓枚举就是一一列举的意思。在实际应用中&#xff0c;一个星期有七天&#xff0c;一年有十二个月等。如…

FBB-Frontiers in Bioengineering and Biotechnology

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、投稿咨询 一、期刊简介 Frontiers in Bioengineering and Biotechnology是专注生物工程和生物技术领域的开放获取期刊。 研究范围涵盖生物材料、生物力学、生物工艺工程、生物安全和生物安保&#xff0c;生物传…

SpringCloud(1)-Eureka相关配置

1.新建Module-注册中心 作为注册中心 1.1配置 pom.xml <!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency&g…