java常识3

简介: 本内容介绍了JVM的组成及HashMap的工作原理。JVM包括类加载器、运行时数据区(堆、方法区、虚拟机栈等)、执行引擎和本地接口。HashMap基于数组+链表/红黑树实现,1.8中引入树化机制优化性能,扩容时采用位运算提升效率。同时对比了ConcurrentHashMap在不同版本中的实现差异。

jvm组成

1.类加载器:负责将java的.class文件转化为字节码文件,并加载到运行数据区的方法区

2.运行时数据区: jvm的内存

运行数据区的组成:

堆:存储实例化对象  伊甸园:s0,s1 8:1:1  老年代:新生代  新生代->老年代 条件:15次、大对象、动态担保机制

方法区:存储类信息,常量,静态变量,jdk8之后移动至元空间

虚拟机栈:线程独有,存储方法调用,局部常量,返回信息,由一个个的栈帧组成,(一次方法调用产生一个栈帧),只有一个活动栈帧

本地方法栈:处理本地方法的调用

程序计数器:记录当前线程执行的字节码位置

3.执行引擎:负责执行字节码文件

解释器,逐行解释执行字节码文件

及时解释器:配将频繁调用的的代码前端转化为本地机器码,提高效率

垃圾回收gc,回收堆中不使用的对象实例,释放内存

4.本地借口,

通过底层调用c或者c++的方法,实现与操作系统的交互

HashMap

数据结构:

1.7是数组+链表

1.8是数组+链表/红黑树

树化的时机:数组长度大于64且链表长度大于8

扩容机制:

扩容因子是0.75是根据泊松分布验证的合理值,

扩容因子:过大导致冲突上升,过小导致空间利用率过低

扩容为原来的两倍

数组长度要数组容量必须是2的幂次方原因:

HashMap 要求容量是 2 的幂次方,最终目的是用高效的位运算代替取模运算,同时保证元素在数组中分布更均匀,从而提升查询、插入、删除的效率。

执行流程:

put的执行流程:

首先把key进行两次hash计算得到hashcode,两次hash运算主要是为了减少hash碰撞,以及其分布的更均匀

再通过与数组长度的取模运算,得到要存储的数组下标

通过数组下表查找,如果对应位置为空则key-value的node节点存储进去,否则进行相同key的链表上的查找,如果key相同则替换value,不存在则存储在链表的末端,同时判断是否达到树化的时机,是否进行树化

CourrentHashMap的区别?

  • 1.7:分段锁,16个Segement对象
  • 1.8:CAS+synchronized
  • 低冲突用CAS
  • 高冲突使用synchronized
  • monitor
  • 线程id
  • 计数器

分布式锁

redission

zookeeper

文件夹的唯一性

etcd3

可重入锁

synchronized

reetrantLock

相关文章
|
24天前
|
存储 算法 Sentinel
熔断降级
本内容介绍了微服务中熔断降级的实现原理及Sentinel的底层机制。通过OpenFeign集成Sentinel,利用断路器统计异常和慢请求比例,触发熔断并降级,提升系统稳定性。还讲解了Sentinel使用的限流算法,如滑动窗口、令牌桶和漏桶算法,以应对不同场景下的流量控制需求。
|
24天前
|
存储 安全 NoSQL
基础的数据结构
线性结构包括动态数组、链表、栈和队列,适用于顺序存储与操作。非线性结构如优先级队列、哈希表、红黑树、跳表和B+树,适用于复杂数据组织与高效查找。不同结构适用于不同场景,如HashMap适合快速查找,B+树用于数据库索引。
|
24天前
|
NoSQL Java 数据库
杂项8
缓存三剑客(穿透、击穿、雪崩)解析及解决方案:穿透指请求数据在Redis和数据库均不存在,可通过校验、空值缓存、布隆过滤器应对;击穿针对热点数据失效,可用互斥锁或永不过期策略;雪崩因大量缓存同时失效,可采用随机过期、集群部署、降级机制缓解。
|
24天前
|
Docker 容器
初始ollama
Ollama 按需加载模型,不持续运行,闲置时自动卸载,节省内存。模型响应请求时驻留内存,保留时间由 OLLAMA_KEEP_ALIVE 控制。类似 Docker 部署方式,但无单模型启停命令,默认时间内自动停止。可间接通过停止服务或配置多端口实现管理。
|
24天前
|
存储 SQL 关系型数据库
mysql杂项
MySQL常用存储引擎包括InnoDB和MyISAM,InnoDB支持事务和行锁,适合高并发写入;MyISAM不支持事务,仅支持表锁,适合只读场景。InnoDB支持64TB存储,MyISAM支持256TB。索引结构主要包括B+树、Hash和跳表,用于优化查询性能,减少磁盘I/O。InnoDB使用聚簇索引,MyISAM使用非聚簇索引。联合索引需遵循最左前缀原则,否则可能导致索引失效。常见索引失效原因包括使用函数、隐式转换、模糊查询前缀使用“%”等。可通过EXPLAIN命令分析SQL执行情况。MySQL性能优化包括表结构设计、SQL优化、主从复制、读写分离及分库分表。
|
24天前
|
缓存 NoSQL 算法
redis杂项
Redis基于内存、IO多路复用,读写高效;虽主为单线程,但支持多线程读写及持久化。常用数据类型如string、hash、list、set、zset适用于多种场景。为提升性能,常搭配本地缓存(如Caffeine)形成二级缓存架构。为保证Redis与MySQL一致性,可采用加锁、MQ或延迟双删策略。Redis支持多种淘汰策略及持久化方式(RDB/AOF),兼顾性能与数据安全。
|
6月前
|
存储 NoSQL 物联网
MongoDB应用场景
MongoDB应用场景
|
24天前
|
负载均衡 Java Nacos
微服务架构中的服务注册与发现流程
本内容介绍了微服务架构中的服务注册与发现流程,包括服务注册中心(如Nacos)、服务提供者和调用者的角色分工。服务启动时自动注册信息至注册中心,调用者通过客户端负载均衡(如Spring Cloud Loadbalancer)选取服务实例进行远程调用。同时,内容还讲解了OpenFeign的工作原理,其作为HTTP客户端集成负载均衡,通过接口定义、代理生成、请求发送与结果解析,实现服务间的高效通信。
|
24天前
|
负载均衡 Java 应用服务中间件
杂项10
Spring Cloud Alibaba 与 Spring Cloud 均基于 Spring Boot 构建微服务,遵循相同规范且组件可协同使用。区别在于,Spring Cloud Alibaba 使用 Nacos 实现服务发现与配置管理,推荐 Sentinel 作为断路器,并支持 Dubbo 与 Feign 远程调用。Nginx 可通过配置 upstream 实现负载均衡,作为反向代理,其“反向”体现在外网通过 Nginx 访问内部服务器。