Java虽然有垃圾回收,但是仍然存在内存泄露,比如静态变量.缓存或其他长生命周期的对象引用了其他对象,这些被引用的对象就会长期不能被GC释放,导致内存泄露. 弱引用(WeakReference)是解决这个问题的一种廉价方案,它不会阻止所引用的对象被GC,在需要的时候能够释放出内存.也因为这样,在每次访问弱引用中的对象时,必须检查对象是否为空(已被GC),算是一点点代价吧. 使用弱引用的几个小心得:   1,使用生命周期匹配的强引用避免弱引用.比如缓存需要一个Context引用,缓存是长生命周期的…
1.某个控件要放在Linearlayout布局的底部(底部导航条) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_w…
bug:应用出现了 不幸运的,应用已停止的错误提示 排除问题: 1.intent接收数据的字符串不匹配 2.java常见的NullPointerException(空指针错误),可能由三个原因引起,字符串变量未初始化:接口类型的对象没有用具体的类初始化:没有判断是否为空 所谓的指针,就是java中的对象的引用.比如String s;这个s就是指针.若是直接引用s就会出现空指针错误 再比如: List lt; 会报错 List lt = new ArrayList(); 则不会报错了 3.接收的类…
之前使用了Android Studio的插件直接为button绑定了监听器,并实现onClick方法(我的onClick方法无论点击哪一个都是要实现setcontentview这个方法设置layout),之后,在onClick方法执行(也就是设置了一个新的layout)之后,点击新layout中的按钮,会弹出一个Toast,我把这个按钮先在onCreate方法中通过findviewbyid获取,之后为此按钮绑定监听器,但是,就是这一步绑定监听器的方法导致了我在点击设置新的layout之前的onC…
bug 1: bug描述: 无法成功地将edittext中的内容传入数据库中 bug动图: 经过: 最近写了个项目,项目要使用到SQL数据库,由于没有相关知识,便是找到了各种资料开始了自学之旅,在demo测试可以,但是,移植到实际项目就是失败,弹出应用已经停止的错误提示,花了两个星期,对比资料,一次一次的尝试,一直在寻找bug. 终于,功夫不负有心人,终于是被我找到了,原来是edittext中有留空了,我的项目就是要得到edittext中所输入的内容,并将得到的内容转入指定的数据库中,由于测试,…
1. file.listFiles 空指针异常 最近在弄个小项目,类似一个文件管理器,需要获得手机存储里的目录之后显示,但是运行过程中出现错误,搜索了资料,得出了以下的解决办法 问题产生的原因: android6.0以上需要动态申请权限,确保自己有读取和写入SD卡的权限 以往版本的话,写入SD卡的权限其实是包含了读取SD卡的权限,但是android6.0有所改变,所以得声明读取和写入SD卡的权限,两个权限 存在有隐藏文件,在获取列表的时候出现空指针问题 解决方法: 针对第三个问题,我们只需要添加…
1. 导入依赖库出现错误 因为使用的sdk版本不同,使用下列代码强制使用最低版本,25.3.1就是我当前使用的版本号,根据自己的情况修改 configurations.all { resolutionStrategy.force 'com.android.support:support-annotations:25.3.1' resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested…
初学Android,最近在使用zxing开发一个条码扫描解析的安卓项目中,遇到以下几个问题.贴出来以供参考. 1.Http请求错误    Android4.0以上要求不能把网络请求的操作放在主线程里操作.使用多线程. 2.java.lang.IllegalStateException: Target host must not be null, or set in parameters.     原因: 连接地址不完整,必须加上"http://". 3.android java.net…
在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>一文也指出了使用全局的Map作为缓存容器…
在<Effective Java 2nd Edition>中,第6条“消除过期的对象引用”提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过“弱引用”相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>一文也指出了使用全局的Map作为缓存容器…
在Android开发中,基本上很少有用到软引用或弱引用,这两个东东若用的很好,对自己开发的代码质量的提高有很大的帮助.若用的不好,会坑了自己.所以,在还没有真正的去了解它们之前,还是慎用比较好. 下面将通过两个Demo来结识软引用和弱引用在开发中的运用. 一. WeakReference:防止内存泄漏,要保证内存被虚拟机回收. 下面以一个时间更新的Demo来说明弱引用的运用. 1. main.xml文件代码如下: <?xml version="1.0" encoding=&quo…
本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限,叙述中难免存在不准确或是不清晰的地方,希望大家可以指出,谢谢大家:) 1. What——什么是弱引用? Java中的弱引用具体指的是java.lang.ref.WeakReference<T>类,我们首先来看一下官方文档对它做的说明: 弱引用对象的存在不会阻止它所指向的对象变被垃圾回收器回收.弱引用最常见的用途是实现规范映射(canonicalizin…
C#中的弱引用(WeakReference)   我们平常用的都是对象的强引用,如果有强引用存在,GC是不会回收对象的.我们能不能同时保持对对象的引用,而又可以让GC需要的时候回收这个对象呢?.NET中提供了WeakReference来实现.弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存.对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用.弱引用使用起来很简单,看下面的代码:Object obj…
相信很多人对WeakHashMap并没有完全理解. WeakHashMap 持有的弱引用的 Key. 1. 弱引用的概念: 弱引用是用来描述非必需对象的,被弱引用关联的对象只能生存到下一次垃圾收集发生之前,当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象. 2. WeakHashMap中的弱引用 Key是如何被清除的? WeakHashMap中的清除Key的核心方法: private void expungeStaleEntries() { Entry<K,V> e;…
Android开发过程中在sh,py,mk文件中添加log信息的方法 在sh文件中: echo "this is a log info" + $info 在py文件中: print ("this is a log info ",info) 在mk文件中 $(warning warning:'this is a log info')…
Hanlder + 弱引用防内存漏泄示例: public class MainActivity extends AppCompatActivity { public final MyHandler handler = new MyHandler(this); public final ThreadA threadA = new ThreadA(this); public static class ThreadA extends Thread { private WeakReference<Mai…
.net core, docker 在vs2019开发过程中的问题以及解决办法 记录下来,帮助Ta人~ 1.vs调试,快Build完后提示Docker 端口:xxxx,xxxx,xxxx占用 解决办法:取消vs调试状态,打开Window任务管理器,找到进程com.docker.backend.exe 结束调,重新再启动,这时候应该不需要再重新build. 2.待续…
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/42396507),请尊重他人的辛勤劳动成果,谢谢! 我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android设备的参差不齐,可能运行在这台设备好好的,运行在那台设备就报OOM,这些适配问题也是比较蛋疼的,比如我们平常…
我们平常在开发Android应用程序的时候,稍有不慎就有可能产生OOM,虽然JAVA有垃圾回收机,但也不能杜绝内存泄露,内存溢出等问题,随着科技的进步,移动设备的内存也越来越大了,但由于Android设备的参差不齐,可能运行在这台设备好好的,运行在那台设备就报OOM,这些适配问题也是比较蛋疼的,比如我们平常运行着一个应用程序,运行的好好的,突然到某个Activity就给你爆出一个OOM的错误,你可能会以为是这个Activity导致的内存泄露,你会想到也有可能是内存有泄露吗?内存泄露就像一个定时炸…
了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读一读吧! 介绍 内存泄露是每个开发者最终都不得不面对的问题.即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况.内存泄露会导致一系列问题,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题. 什么是内存泄漏 本质上来讲,内存泄露是当一块内存不再被应用程序使用的时候,由于某种原因,这块内存没…
1 /* 2 * shared_ptr循环引用导致内存泄露 3 */ 4 5 struct A 6 { 7 shared_ptr<A> ptr; // 改为weak_ptr<A> ptr就可以解决问题 8 int val; 9 A(int inVal):val(inVal){} 10 ~A() 11 { 12 cout << "Destructor: value " << val << endl; 13 } 14 }; 15…
前言: 从事Android开发的同学都知道移动设备的内存使用是非常敏感的话题,今天我们来看下如何使用软引用与弱引用来优化内存使用.下面来理解几个概念. 1.StrongReference(强引用) 强引用是我们最最常见的一种,一般我们在代码中直接通过new出来的对象等,都是强引用,强引用只要存在没有被销毁,内存就不会被系统回收.我们以生成Bitmap为例如下: Bitmap imageBitmap = readBitmapFromResource(getResources(), R.mipmap…
引子 什么是内部类?什么是内存泄露?为什么Android的内部类容易引起内存泄露?如何解决? 什么是内部类? 什么是内部类?什么又是外部类.匿名类.局部类.顶层类.嵌套类?大家可以参考我这篇文章 ,再查查一些资料,先弄清楚什么是内部类和内部类的特性再向下看. 经常会遇见Android程序中这样使用handler: public class SomeActivity { // ...... private Handler mHandler = new Handler(){ @Override pu…
弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat kitty = new Cat(); 变量kitty就是一个强引用,它指向了堆中的一个Cat对象实例.我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收.换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的. 从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该…
弱引用是什么? 要搞清楚什么是弱引用,我们需要先知道强引用是什么.强引用并不是什么深奥的概念,其实我们平时所使用的.Net引用就是强引用.例如: Cat cat = new Cat(); 变量cat就是一个强引用,它指向了堆中的一个Cat对象实例.我们都知道,CLR的垃圾回收机制会标记所有被强引用到的对象,而那些剩下的未被标记的对象则会被垃圾回收.换句话说,如果一个对象一直被某个强引用所指向,那么它是不会被垃圾回收的. 从这一点来看,弱引用就完全不一样了——即使某个对象被弱引用所指向,该对象仍然…
目录 一.介绍 二.问题提出 2.1内存原理图 2.2几个问题 三.回答问题 3.1为什么会出现内存泄漏 3.2若Entry使用弱引用 3.3弱引用配合自动回收 四.总结 一.介绍 之前使用ThreadLocal的时候,就听过ThreadLocal怎么怎么的可能会出现内存泄漏,具体原因也没去深究,就是一种不清不楚的状态.最近在看JDK的源码,其中就包含ThreadLocal,在对ThreadLocal的使用场景介绍以及源码的分析后,对于ThreadLocal中可能存在的内存泄漏问题也搞清楚了,所…
要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的.在大多数时候,好的软件工程技术保证这是自动实现的,不用我们对对象生命周期问题花费过多心思.但是偶尔我们会创建一个引用,它在内存中包含对象的时间比我们预期的要长得多,这种情况称为无意识的对象保留(unintentional object retention). 全局 Map 造成的内存泄漏 无意识对象保留最常见的原因是使用 Map 将元数据与临时对象(trans…
本文前部分来自:http://www.cnblogs.com/mokey/archive/2011/11/24/2261605.html 分割线后为作者补充部分. 一:什么是弱引用 了解弱引用之前,先了解一下什么是强引用 例如 : Object obj=new Object();     就是一个强引用,内存分配一份空间给用以存储Object数据,这块内存有一个首地址,也就是obj所保存的数据,内存分配的空间中不仅仅保存着Object对象信息,还保存着自己(Object本身)被引用的次数. 当一…
在android的学习过程中,会有很多坑,我会把我遇到的,一一列下来,方便后来者查阅! 1:android-support-v4.jar and android-support-v7-appcompat.jar 的问题,在新建项目是因新手选择 targart sdk,compile sdk的时候,选择高版本的时候,会有找不到这两个包的问题, 解决方法:appcompat_v7 源码作为新建项目的lib,导入 2:经常性的R文件无法自动产生,导致,在代码中引用资源是,提示无法找到: 常见的原因是,…
弱引用使得表达对象生命周期关系变得容易了 虽然用 Java™ 语言编写的程序在理论上是不会出现“内存泄漏”的,但是有时对象在不再作为程序的逻辑状态的一部分之后仍然不被垃圾收集.本月,负责保障应用程序健康的工程师 Brian Goetz 探讨了无意识的对象保留的常见原因,并展示了如何用弱引用堵住泄漏. 要让垃圾收集(GC)回收程序不再使用的对象,对象的逻辑 生命周期(应用程序使用它的时间)和对该对象拥有的引用的实际 生命周期必须是相同的.在大多数时候,好的软件工程技术保证这是自动实现的,不用我们对…