看到一篇关于handler和匿名类关于内存泄露的文章,觉得不错,充分发挥拿来主义,先放这儿看着! From:http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html Consider the following code: public class SampleActivity extends Activity { private final Handler mLeakyHandler =…
一.内存划分 将内存划分为六大部分,分别是PC寄存器.JAVA虚拟机栈.JAVA堆.方法区.运行时常量池以及本地方法栈. 1.PC寄存器(线程独有):全称是程序计数寄存器,它记载着每一个线程当前运行的JAVA方法的地址, 如果是当前执行的是本地方法,则程序计数器会是一个空地址.它的作用就是用来支持多线程,线程的阻塞.恢复. 挂起等一系列操作,直观的想象一下,要是没有记住每个线程当前运行的位置,又如何恢复呢.依据这一点, 每一个线程都有一个PC寄存器,也就是说PC寄存器是线程独有的. 2.JAVA…
在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. 1 2 3 4 5 6 7 8 9 public class SampleActivity extends Activity {   private final Handler mLeakyHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } } 但是,其实上面的代…
首先介绍下怎么发现的吧, 线上的项目日志是通过 logging 模块打到 syslog 里, 跑了一段时间后发现 syslog 的 UDP 连接超过了 8W, 没错是 8 W. 主要是 logging 模块用的不对 我们之前有这么一个需求, 就是针对每一个连接日志输出当前连接的信息, 所以每一个 连接就创建了一个日志实例, 并分配一个 Formatter, 创建日志实例为了区分其他连接 所以我就简单粗暴的用了当前对象的 id 来作为日志名称: import logging class Conne…
在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.其实这可能导致内存泄露,代码中哪里可能导致内存泄露,又是如何导致内存泄露的呢?那我们就慢慢分析一下.http://www.jinhusns.com/Products/Download/?type=xcj 在Android常用编程中,Handler在进行异步操作并处理返回结果时经常被使用.通常我们的代码会这样实现. public class SampleActivity extends Activity {   …
如果您在Activity中定义了一个内部Handler类,如下代码: public class MainActivity extends Activity {       private  Handler mHandler = new Handler() {         @Override         public void handleMessage(Message msg) {             //TODO handle message...         }       …
先看一组简单的代码 1 2 3 4 5 6 7 8 9 public class SampleActivity extends Activity { private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { // ... } } } 当我们这样写在一个Activity中时,Android Lint会提示我们这样一个 warning: In Android,…
原谅地址:http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html ,英文原文在翻译之后 Android 应用至少,在T-Mobile G1这个型号,就有16MB的堆内存.这个容量对于手机来说是很大了,但是对于有些开发者来说是少了些.为了全其他应用可以运行而不被系统杀掉,即使你没有打算使用完所有分配的容量,你也应该尽量少地使用这些容量. Android能保存越多的应用,用户在切换应用的时候就会越快.我在工作…
有时在Activity中使用Handler时会提示一个内存泄漏的警告,代码通常如下: public class MainActivity extends Activity { private TextView tvHelloWorld; private Button btnSetText; private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) {…
jstack?-- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题.另外,jstack工具还可以附属到正在运行的java程序中,看到 当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的.目前只有在Solaris和Linux的JDK版本里面才有. jco…