内存泄漏以及回收案例分析
1.频繁的创建监听事件会有什么问题?
问题蛮大的,这就是空间复杂度的问题了,每次new一个对象那么在内存中就会增加一个对象的实例也就是最小的(一个对象是由对象头16。实例数据。对齐填充)。
2.如果解决这个问题呢?
通过调试gc发现额外饮用被回收了,足足36byte,已经很不错了哈哈,那么程序内部如何去处理呢?Runtime.getRuntime().gc(); 神奇呀 刚才我们高并发的手指创建了100个实例,转眼就少了99个也就是 99*12 ,不敢想象呀,想知道回收能节省多少内存吗? 看RetainedSize就对了,Shallow就是每个实例的size了
3.如果引用了别的对象呢?
之前我们都是没有引用其他的对象的,那么如果我们引用了呢,会出现什么情况? 此时发现了一个新的情况,这个类增加了,哈哈对了,我们增加了变量activityji+4,
我们继续gc,在我们疯狂的GC以后,原来是可以降下的
4.那如果类开一个线程呢?
就一个空线程
线程浪费严重,杜绝,GC。。。OK,内存回收又节省了一大批内存。
5.如果这个类线程一直运行呢?
哎,GC也是要代价的,咔咔咔,线程开多了也是个负担呀
杀不死呀!!!,咔咔咔 ,咋办??? 回到之前如果线程停止了不久好了!是的没错,结束了一个线程就好了,但是注意这个是重点,在一个类中开启了一个无限循环的线程,如果没有管理注销这个线程而开启新的类,那么危险来临了这个类,无人认领了,驻扎在内存中不走了,(之前项目中遇到这个情况过,就是因为有线程无人认领,疯狂的在后台执行,也就是我说一句话,给我socketsend N 句 哈哈),
6.这里出现了一个疑惑 为什么最终都剩下两个引用类呢?不应该一个吗?还没有解决希望能有大神帮忙。