摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 既然程序运行会产生大量的废弃物,也就是「垃圾」,那总不能一直堆着不管吧。现在就来粗浅地谈谈Java里面什么时候会触发GC以及有哪些GC。 通过之前的电商支付系统,可以知道系统运行创建的对象都是优先分配在JVM的年轻代中的,年轻代里面的对象越来越 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 前面说过,JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面,而老年代则将创建之后需要长期存在的对象放在里面。那么现在再来看一个比较具体的例子。 在电商系统中,支付系统大概处于这样的位置: 核心业 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 大部分在代码里创建的对象,存活周期都是极短的,只有少数对象是长期存活的,如静态类和静态变量。采用不同方式创建和使用对象,其生存周期也不同。因此,JVM将堆内存划分为年轻代、老年代两个区域。 1、年轻代:将创建和使用完之后马上就要回收的对象放在里 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 上次把JVM的类加载过程粗略地过了一遍,今天再来看看JVM运行代码时,系统里发生了什么。 就像家里的柴、米、油、盐、酱、醋、茶要分别放在不同的缸子里一样,JVM也会把运行时需要的数据放在不同的「存储空间」里。JVM的存储空间大概都有这么些「家当 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 这是多年之前做过的学习笔记,今天再翻出来,觉得仍然是记忆犹新。「独乐乐不如众乐乐」,就拿出来分享给「众乐乐」吧。 目前大多数Java工程师都面临一个共同的问题:对JVM的了解非常贫乏,尤其是对实际生产环境中的优化几乎就是完全没有任何经验。加上J 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 之前用Caffeine替代Redis的时候,发现先保存KV,再获取key,过期时间为3秒。但即使过了3秒,还是能获取到保存的数据。这是为什么呢?因为之前在整合SpringBoot时,使用的是注解方式,在配置文件中已经定死了Caffeine的过期 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 普通的缓存和Token的区别在于时效性和持久性。如果用Redis实现Token的话,可以: 1、设置redis kv键值对的过期时间(秒数/毫秒数); 2、redis内部实现计时,无需代码干预,且有持久化; 3、kv超过指定过期时间即被自动删除 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 说了很多Caffeine的基本特性,但是骡子是马,终归还是要看能不能拉磨。SpringBoot有两种使用Caffeine的方式: 1、直接引入Caffeine依赖,然后使用Caffeine方法实现缓存; 2、引入Caffeine和Spring 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 缓存的存储空间是远远小于磁盘的。所以对于有些过期的数据,就需要定期进行清理,腾出存储空间。Caffeine又是怎么做的呢? Caffeine和进程外缓存Redis一样,也有主动失效和被动失效。主动失效就是数据过期后由淘汰算法自动清除,被动失效就 阅读全文
摘要:
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 缓存除了过期策略,其实还有刷新和填充策略。刷新策略就是当数值变化时怎么处理,而所谓填充策略,就是将数据保存到缓存的方式。 Caffeine提供了三种刷新方法: 1、基于类Caffeine的refreshAfterWrite(time, dura 阅读全文