是否有可能在内存中实现缓存以避免完全堆消耗?
我的spring boot java应用程序使用内存缓存,过期策略设置为1小时(咖啡因库用于缓存目的)。在此之后,所有缓存实例都处于旧代,需要收集完整的GC。现在,当XMX设置为10GB时,我可以看到经过几个小时的测试,我的缓存包含大约100k个实例,但在heap中(正好是旧一代),我可以找到数百万个缓存对象的实例。是否有可能在内存中使用缓存并避免这种情况?
如果未设置过期时间,缓存中的对象始终存在。您可以做的是调整JVM以避免这种情况,即,如果您使用的是CMS,-XX:cmSinitiatingOccupencyFraction=75-XX:useCSinitingOccupencyYony
,设置这两个选项后,当旧一代超过75%时,JVM将被迫执行完全gc。
正如您所观察到的,缓存和世代收集器有着相反的目标。像G1和Shenandoah这样更现代的收藏家是基于地区的,这可以让他们更好地处理老一代的收藏品。在Shenandoah技术会谈中,您经常会听到他们的开发人员讨论将LRU缓存作为压力测试。如果您的GC经过了良好的调优,这可能不是问题。
您可以将缓存数据结构保留在堆上,但将其条目移出。这可以通过以访问开销为代价将值序列化为ByteBuffer
来实现。Apache助记符提供了另一种方法,它将对象字段存储在堆外,并透明地封送数据。这避免了序列化成本,但会影响对象模型。
有完全脱离堆的哈希表(如Oak)和缓存(如OHC)。这些缓存尽可能多地移动到GC之外,但与堆上缓存相比,开销要大得多。这与使用远程缓存(如memcached或redis)相当,因此可能更倾向于使用远程缓存。例如,Memcached使用slab分配来非常有效地处理内存流失。
大多数情况下,您会看到一个小型堆上缓存用于快速本地访问最常用的数据,该数据由一个大型远程缓存为其他所有数据提供支持。如果您确实需要多GB进程内缓存,那么可能需要堆外缓存,或者您可能必须调整GC以适应此工作负载。
您描述的问题是调用内存泄漏。
可以,但这取决于您使用的GC版本。例如,在G1中,不应出现此问题。所以,如果可能的话,我建议你切换到G1。
XpauseTarget这个标志是为了避免系统中的长时间暂停,所以您可以将清理堆拆分为部分。
您还可以自定义要求运行GC的最近版本。-XX:启动Heap占领百分比=45
问题内容: 我正在寻找一个简单的Java内存缓存,该内存具有良好的并发性(因此LinkedHashMap不够好),并且可以定期序列化到磁盘。 我需要但很难找到的一个功能是一种“窥视”对象的方法。我的意思是从缓存中检索对象,而不会导致缓存对对象的保留时间超过其应有的保留时间。 更新: 我忽略提到的另一个要求是,我需要能够就地修改缓存的对象(它们包含浮点数组)。 谁能提供任何建议? 问题答案: 自从最
主要内容:1. 介绍,2. 启用响应缓存,3. 涉及缓存的NGINX进程,4. 指定要缓存的请求,5. 限制或绕过缓存,6. 从缓存中清除内容,7. 字节缓存,8. 组合配置示例本节介绍如何启用和配置从代理服务器接收的响应的缓存。主要涉及以下内容 - 缓存介绍 启用响应缓存 涉及缓存的NGINX进程 指定要缓存的请求 限制或绕过缓存 从缓存中清除内容 配置缓存清除 发送清除命令 限制访问清除命令 从缓存中完全删除文件 缓存清除配置示例 字节缓存 组合配置示例 1. 介绍 当启用缓存时,NGINX
本文向大家介绍虚拟内存和缓存内存之间的区别,包括了虚拟内存和缓存内存之间的区别的使用技巧和注意事项,需要的朋友参考一下 在计算机环境中,内存是至关重要的部分,因为它是唯一负责系统性能和系统存储容量的部分。众所周知,内存负责任何应用程序的加载和执行,还用于存储其数据,以后可被其使用,因此在加载或安装应用程序之前了解系统的内存配置非常重要。 现在,在本主题中基本上将要讨论的是两种类型的存储器,即虚拟存
让NGINX缓存使用proxy_pass命令从Dropbox中提取的缩略图时遇到问题。在运行NGINX的同一台服务器上,我多次运行以下命令 每次使用X-Cache都会得到完全相同的响应:MISS HTTP/1.1 200 OK Server:nginx/1.1.19日期:Wed,2015年3月25日20:05:36 GMT内容类型:image/jpeg内容长度:1691连接:keep alive
通过这种方式,你可以把所有的页面都放到 DOM 中,不需要在通过Ajax或者动态创建来加载他们。 启用内联页面 默认情况下,内联页面功能是禁用的。如果你想启用,只需要给视图传入一个 domCache: true 参数即可: var mainView = myApp.addView('.view-main', { domCache: true //enable inline pages })
问题内容: 我正在尝试缓存静态内容,这些内容基本上位于虚拟服务器配置中的以下路径内。由于某些原因,文件没有被缓存。我在缓存目录中看到了几个文件夹和文件,但总是像20mb一样高或低。例如,如果要缓存图像,则将至少占用500mb的空间。 这是nginx.conf缓存部分: 这是默认的虚拟服务器。 问题答案: 确保您的后端不返回标头。如果Nginx看到它,它将禁用缓存。 如果是这种情况,最好的选择是修复