jdk18 堆外缓存和堆内缓存性能比较 如何实现1亿黑名单号码存放内存 不影响gc
- 堆外缓存和堆内缓存性能比较:
堆内缓存是指将数据存放在JVM Heap(堆)中,一般使用Java Collection(如List、Map、Set等)来实现。堆内缓存的优点是操作简单、易于管理,但是有几个缺点:
- 堆内存有限,缓存数据较大时容易发生OOM(Out Of Memory)异常。
- 堆内存垃圾回收(GC)会影响应用程序的性能,GC时所有线程都会被挂起,可能会导致请求超时等问题。
- 堆内缓存无法共享,当多个JVM实例运行同一个应用时,每个实例都会有一份缓存数据。
堆外缓存是指将数据存放在JVM Heap之外的内存中,一般使用第三方缓存框架(如Ehcache、Redis等)来实现。堆外缓存的优点是:
- 可以使用更大的内存容量,不会受到JVM Heap大小的限制。
- 缓存数据可以共享,多个JVM实例运行同一个应用时,它们可以共享同一份缓存数据,提高应用程序的性能。
- 缓存数据不会影响JVM Heap的垃圾回收,GC只会针对堆内存进行,不会影响缓存数据的性能。
- 如何实现1亿黑名单号码存放内存不影响GC:
在实现1亿黑名单号码存放内存时,可以使用以下方法来降低对GC的影响:
- 使用堆外缓存:将黑名单号码存放在堆外缓存中,可以降低对JVM Heap的占用,减少GC的频率和影响。
- 分批加载:将1亿个黑名单号码分批加载到内存中,每次加载一部分,处理完后再进行下一批的加载,这样可以减少一次性加载过多数据对内存和GC的影响。
- 对黑名单号码进行压缩:对黑名单号码进行压缩可以减小它们占用的内存空间,从而减少GC的频率和影响。
- 使用内存映射文件:使用内存映射文件可以将黑名单号码存放在磁盘中,但在内存中映射一份,这样可以避免一次性读取大量数据对内存和GC的影响。
原文地址: https://www.cveoy.top/t/topic/Wg6 著作权归作者所有。请勿转载和采集!