热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java强制清除缓存_Java中大缓存对象的强制解除分配

对于内存感知缓存,您可能需要使用ApacheCommonscollections尤其是他们org.apache.commons.collections.map.ReferenceM

对于内存感知缓存,您可能需要使用

Apache Commons collections

尤其是他们

org.apache.commons.collections.map.ReferenceMap

班级。Java特殊操作是

soft reference

. Java提供

WeakHashMap

对于弱引用,但弱引用不是您想要的缓存。Java不提供

SoftHashMap

但是

ReferenceMap

从ApacheCommons可以成为一个可行的替代品。

对软引用的记忆感知有些粗糙和不灵活。您可以使用一些Java选项来对它们进行配置,特别是

-XX:SoftRefLRUPolicyMSPerMB

值,表示软引用值在内存中保留的时间(以毫秒为单位)(当这些值不再可以直接访问时)。例如,有了它:

java -XX:SoftRefLRUPolicyMSPerMB=2500

然后,JVM将尝试将缓存值保持在比使用

威卡什地图

.

如果软引用没有提供您要查找的内容,那么您必须实现自己的缓存策略,并且确实需要手动刷新映射。这是你最初的问题。冲洗时,可以使用

clear()

方法,或者简单地创建一个新的

HashMap

. 差别应该很小,你甚至可能会有麻烦

测量

这种差异。

在“完全缓存”和“空缓存”之间交替使用也可能被认为有点粗糙,因此您可以维护多个映射。例如,您维护10个地图。当您查找缓存值时,您将查找所有映射,但当您有一个值时,只将其放在第一个映射中。当你想冲洗时,你旋转地图:第一张地图变成第二张,第二张变成第三张,依此类推,直到第十张被丢弃的地图。创建新的第一个地图。如下所示:

import java.util.*;

public class Cache {

private static final int MAX_SIZE = 500000;

private Map[] backend;

private int size = 0;

public Cache(int n)

{

backend = new Map[n];

for (int i = 0; i

backend[i] = new HashMap();

}

public int size()

{

return size;

}

public Object get(Object key)

{

for (Map m : backend) {

if (m.containsKey(key))

return m.get(key);

}

return null;

}

public Object put(Object key, Object value)

{

if (backend[0].containsKey(key))

return backend[0].put(key, value);

int n = backend.length;

for (int i = 1; i

Map m = backend[i];

if (m.containsKey(key)) {

Object old = m.remove(key);

backend[0].put(key, value);

return old;

}

}

backend[0].put(key, value);

size ++;

while (size > MAX_SIZE) {

size -= backend[n - 1].size();

System.arraycopy(backend, 0, backend, 1, n - 1);

backend[0] = new HashMap();

}

return null;

}

}

上面的代码完全没有经过测试,应该用泛型进行增强。然而,它说明了主要思想:所有地图都是在阅读时测试的。(

get()

,所有新值将转到第一个映射,保留总大小,当大小超过给定限制时,将旋转映射。注意,当为一个已知的键输入一个新值时,会有一些特殊的处理。此外,在这个版本中,在查找缓存值时没有做什么特别的事情,但是我们可以“恢复”访问的缓存值:

获取()

,如果在第一个映射中找到一个值,但该值不在第一个映射中,则可以将其移动到第一个映射中。因此,频繁访问的值将永远保持缓存状态。



推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • importjava.util.ArrayList;publicclassPageIndex{privateintpageSize;每页要显示的行privateintpageNum ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
author-avatar
摄影爱好者Summer_100
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有