如何通过软引用和弱引用提升JVM内存使用效率?

引用类型:强引用(new),虚引用,软引用,弱引用
1.软引用(SoftReference)
如果一个对象只具有软引用,而当前虚拟机堆栈内存足够,那么垃圾回收器就不会回收它,反之就会回收这些软引用指向的对象。
2.弱引用(WeakReference)与软引用的区别
垃圾回收器一旦发现某块内存上只有弱引用,不管当前内存空间是否足够,那么都会回收这块内存。
2.通过软引用/弱引用提升内存性能
1)内存足够时,无需用软引用。
2)用缓存提升效率
先去缓存中查询,查询到返回;查询不到,去数据库中查询, 将获取内容存储在缓存,返回。
eg:软引用/弱引用做缓存
3)为什么不用强引用做缓存
强引用不能回收

原文地址:https://blog.51cto.com/13678728/2475476

时间: 2024-10-30 09:03:52

如何通过软引用和弱引用提升JVM内存使用效率?的相关文章

Android性能提升之强引用、软引用、弱引用、虚引用使用

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52637333 背景:收到公众投稿,<从面试题中看Java的Reference(引用)>,分析的很不错,总感觉少了实际的例子和应用场景.于是结合自己工作中场景,小总结一下.看下Agenda如下: 强引用 软引用 弱引用 什么时候使用软引用,什么时候使用弱引用? 虚引用 一.强引用 Java中的引用,类似于C++的指针.通过引用,可

强引用,软引用,弱引用与虚引用

强引用:(StrongReference) 强引用指普通的对象引用 例如: StringBuffer str = new StringBuffer("hello world"); 局部变量str会被放到栈里,而StringBuffer实例对象会被放在堆内,局部变量str指向堆内的StringBuffer对象,通过str可以操作该对象,那么str就是StringBuffer的强引用 StringBuffer str1 = str; 当发生了这条语句,则 此时这两个引用都是强引用 强引用具

Java四种引用包括强引用,软引用,弱引用,虚引用

Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.equels(new Object());而这样 obj对象对后面new Object的一个强引用,只有当obj这个引用被释放之后,对象才会被释放掉,这也是我们经常所用到的编码形式. 软引用: 非必须引用,内存溢出之前进行回收,可以通过以下代码实现Object obj = new Object();S

java对象的强引用,软引用,弱引用和虚引用

从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用. 1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题.一般都是new出来的. Object o=new

Java之强引用、 软引用、 弱引用、虚引用

1.强引用   平时我们编程的时候例如:Object object=new Object():那object就是一个强引用了.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题. 2.软引用(SoftReference)   如果一个对象只具有软引用,那就类似于可有可物的生活用品.如果内存空间足够,垃圾回收器就不会回收它,如果

Java 强引用、 软引用、 弱引用、虚引用

 1.对象的强.软.弱和虚引用 在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从JDK 1.2版本开始,把对象的引用分为4种级别,从而使程序能更加灵活地控制对象的生命周期.这4种级别由高到低依次为:强引用.软引用.弱引用和虚引用.下图为对象应用类层次. ⑴强引用(StrongReference)   强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内

Java 强引用,软引用,弱引用

1.强引用 public void handleMessage(Message msg) { case FAIL: GoplayException mException = new GoplayException(); setVideoUrlFailReason(mException); mListener.onFailed(mException); break; } protected void setVideoUrlFailReason(GoplayException mResult) {

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>

关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用

今天面试了一家公司的java开发方面的实习生,被问到一个问题:如何处理java中的内存泄露问题,保证java的虚拟机内存不会被爆掉,当时其实觉得面试官的问题有点泛,所以也没有很好领会他的意思,答案也不是很准确,后来回去查了下资料,大概明白面试官要问的东西是什么(尴尬,才反应过来),然后,也特地简单总结下java内存溢出的相关内容,以备之后复习. 一.什么情况下会java内存泄露? java不是有GC吗?为毛还会内存泄露?之前我也一直以为,java有垃圾回收器在,估计内存泄露的情况一般不会发生吧?