LRU 是什么?如何实现? 什么是堆内存?参数如何设置?

文章目录

LRU 是什么?如何实现?

最近最少使用策略 LRU(Least Recently Used)是一种缓存淘汰算法,是一种缓存淘汰机制。

(1)使用双向链表实现的队列,队列的最大容量为缓存的大小。在使用过程中,把最近使用的页面移动到队列头,最近没有使用的页面将被放在队列尾的位置

(2)使用一个哈希表,把页号作为键,把缓存在队列中的节点的地址作为值,只需要把这个页对应的节点移动到队列的前面,如果需要的页面在内存中,此时需要把这个页面加载到内存中,简单的说,就是将一个新节点添加到队列前面,并在哈希表中跟新相应的节点地 址,如果队列是满的,那么就从队尾移除一个节点,并将新节点添加到队列的前面。

什么是堆内存?参数如何设置?

堆内存是指由程序代码自由分配的内存,与栈内存作区分。

在 Java 中,堆内存主要用于分配对象的存储空间,只要拿到对象引用,所有线程都可以访问堆内存。

(1)-Xmx, 指定最大堆内存。 如 -Xmx4g. 这只是限制了 Heap 部分的最大值为 4g。这个内存不包括栈内存,也不包括堆外使用的内存。

(2)-Xms, 指定堆内存空间的初始大小。 如 -Xms4g。 而且指定的内存大小,并不是操作系统实际分配的初始值,而是 GC 先规划好,用到才分配。 专用服务器上需要保持 --Xms 和 --Xmx 一致,否则应用刚启动可能就有好几个 FullGC。当两者配置不一致时,堆内存扩容可能会导致性能抖动。

(3)-Xmn, 等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4.

(4)-XX:MaxPermSize=size, 这是 JDK1.7 之前使用的。Java8 默认允许的 Meta 空间无限大,此参数无效。

(5)-XX:MaxMetaspaceSize=size, Java8 默认不限制 Meta 空间, 一般不允许设置该选项。

(6)-XX:MaxDirectMemorySize=size,系统可以使用的最大堆外内存,这个参数跟 -

Dsun.nio.MaxDirectMemorySize 效果相同。

(7)-Xss, 设置每个线程栈的字节数。 例如 -Xss1m 指定线程栈为 1MB,与-

XX:ThreadStackSize=1m 等价

相关推荐
填满你的记忆6 分钟前
【从零开始——Redis 进化日志|Day7】双写一致性难题:数据库与缓存如何不再“打架”?(附 Canal/读写锁实战)
java·数据库·redis·缓存·面试
灵感菇_7 分钟前
Android OkHttp框架全解析
android·java·okhttp·网络编程
Coder_Boy_11 分钟前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
莫问前路漫漫15 分钟前
Java Runtime Environment(JRE)全解析:Java 程序跨平台运行的核心基石
java·开发语言
进阶小白猿17 分钟前
Java技术八股学习Day22
java·开发语言·学习
蒟蒻的贤21 分钟前
操作系统复习
java·开发语言·数据库
sanggou32 分钟前
Spring Boot 中基于 WebClient 的 SSE 流式接口实战
java·人工智能
未若君雅裁33 分钟前
SpringBoot2.x与SpringBoot3.x自动配置注册的差异
java·spring boot
赵八斤39 分钟前
java 项目中配置多个数据源
java·开发语言·数据库
小冷coding43 分钟前
【Java】以 Java + Redis + MySQL 为技术栈,模拟电商商品详情的读写场景,Cache Aside+ 延迟双删 方案
java·redis·mysql