V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  shily  ›  全部回复第 10 页 / 共 37 页
回复总数  721
1 ... 6  7  8  9  10  11  12  13  14  15 ... 37  
2019-11-19 17:31:04 +08:00
回复了 m30102 创建的主题 Android 关于 gc 和非静态内部类引起内存泄漏的疑问
1. 如#2 所说 『生命周期长的对象引用生命周期短的对象就会造成生命周期短的对象内存泄漏。』
如果 Thread 不需要 Activity,但因为 Runnalbe 是一个非静态内部类,会默认持有外部类的引用;非主观期望,就是泄露。
如果 Thread 需要 Activity,我就是启动一个空的 Activity,来执行,也不占用大量的资源,主观期望,就不是泄露了。

2. 循环依赖(持有环:TActivity->textView->$OnClickListener->TActivity ),GC 是能发现和处理循环依赖,依然可以进行回收;
如果你把 textView 对象传递给外部的对象,比如一个单例对象持有,就会导致整个环均无法被回收。

3. 没有点击的情况下,Thread 对象和 匿名的 Runnable 对象均未创建,当然没有泄露。
在此场景下,假设点击行为发生,持有链为 $Runnable -> $OnClickListener-> Activity。

需要注意:
类与对象的关系,针对第三种场景,就是类有依赖,但对象未创建。
我们讨论内存泄露时,考虑的是对象间的引用关系,对象间的引用关系是由类来表达的。


关于 #3
不是栈,是引用链,方法栈会导致引用关系,但不是一一对应。

方法完成后,Runnble 对象已经没有其他对象引用了,可以被回收,进而它所引用的 activity 等资源也可以被回收。

已经泄露的对象,可以通过切断持有关系来让 GC 回收。以 OnClickListener 为例,如果我在 onCreate 中把 textView 放到一个单例的对象中持有,那么这个 TActivity 就会有一条引用关系 Root-> Singleton->textView->$OnClickListener->activity,导致 TActivity 泄露。

如果是:
public final class Singleton {
private Singleton() {

}

public static final Singleton INSTANCE = new Singleton();

public View holder;
}

那么,下一次再次进入 TActivity 时,新的 textView 对象被赋予 holder 时,原持有的 textView 和 原 TActivity 可以被回收。
2019-11-01 22:35:36 +08:00
回复了 FakeLeung 创建的主题 程序员 大家对于中文变量名是如何看待的?
@linvaux 不是拉出去弹死?
2019-10-31 09:58:02 +08:00
回复了 iiduce 创建的主题 分享发现 发现(小米)手机一个有意思的功能
关机闹钟而已,人类真会加戏
2019-10-21 16:44:58 +08:00
回复了 jstony 创建的主题 Android android 上有没有能实现自动分流的方法?
关键在于两个卡不可以同时走流量。
2019-10-13 21:26:43 +08:00
回复了 PlainTech 创建的主题 程序员 一些好看的 IDEA 主题推荐✨
不试试 3.5 新出的 dark purple ?
2019-10-08 15:10:14 +08:00
回复了 tzm41 创建的主题 macOS macOS Catalina 正式版已发布
@lnkn 不需要重复下载,我是重启一下,拉取到 null 对应的信息,直接就可以更新了,没有二次下载。

本来也是提示又下载一次。
2019-10-07 12:56:50 +08:00
回复了 Leee 创建的主题 程序员 迫不及待想上班是什么感觉...
@dxfree +1 还是摸鱼的日子好。期待
2019-10-02 17:31:13 +08:00
回复了 licraft 创建的主题 问与答 有在老家买房的吗?
不回家住不如理财。个人拙见。
2019-09-30 14:23:48 +08:00
回复了 owenliang 创建的主题 Android 我就想问问现在安卓怎么 charles 抓 https 包,真愁人。
@madNeal
1. 如果应用不验证签名,解包,按照 3 楼修改配置,重新打包签名即可。
2. 不再信任用户证书而已,root 后丢到系统目录即可。
1 ... 6  7  8  9  10  11  12  13  14  15 ... 37  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2639 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 10:43 · PVG 18:43 · LAX 03:43 · JFK 06:43
Developed with CodeLauncher
♥ Do have faith in what you're doing.