文章标题 柔情只为你懂 2022-06-10 10:23 210阅读 0赞 java自带垃圾回收,因此内存泄漏是很隐蔽的,主要原因是对一个对象的引用被无意识的保留下来,垃圾回收机制不仅不会处理这个对象,也不会处理被这个对象所引用的所有其他对象。————今天重看effective java时,对《创建和销毁对象》这章有了更进一步的理解,现梳理一下=, = 1.过期引用,书中的例子 public class Stack { private Object[] elements; private int size=0; private static final int DEFAULT_INITIAL_CAPACITY =16; public Stack(){ elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e){ ensureCapacity(); elements[size++] = e; } public Object pop(){ if(size==0) throw new EmptyStackException(); return elements[--size]; } private void ensureCapacity(){ if(elements.length ==size) elements = Arrays.copyOf(elements, 2*size +1); } } “当这个栈先push再pop时,从栈中弹出的对象不会被当作垃圾回收” PS:栈是限制插入和删除只能在一个位置上进行的表(即表的末端,称作栈顶,先进先出); 假设现在对一个Object e 进行push,element\[4\]=e,再进行pop弹出之前栈顶元素element\[4\],此时代码中直接return element\[3\] 即将下一个数组元素弹到栈顶,可以将栈理解为一根弹簧,上面最开始压着4块搬砖,后来又在最上面加了一块,再后来又搬走了新加的那块。那么问题来了,弹出的那块搬砖没人告诉我可以放下,于是我得一直用手拿着。个人脑洞大开的粗暴解释= =。 所以在return element\[3\]之前得先把element\[4\]=null;清空引用,告诉搬砖的我手可以放下这块砖了,于是GC才开始工作。 这种情况在我看来是可能性比较大的,编码过程中要注意一下。 2.将对象引用放到缓存中 在实际项目中,比如现在要判断从数据库查出的数据中是否含有Null值(返回DO对象)这个时候我会把对象放入一个hashmap中,迭代,遇到某值为Null的情况,返回该Null对应的对象。 这个应该符合把对象引用放到缓存中的情况,而且是很容易忘记清理引用。 书中给出的解决方案是使用WeakHashMap代表缓存,–使用弱引用,当缓存中的项过期后会自动删除。 “只有当所要的缓存项的生命周期是由该键的外部引用而不是由值决定时,weakhashmap才有用”--这句话没能理解 还有一种方法是由一个后台线程来进行清除工作,或者在给缓存添加新条目时顺便进行清理,LinkedHashMap通过removeEldestEntry方法很容易实现该方案。 对于更加复杂的缓存,必须直接使用java.lang.ref,这个包我还从来没用过,应该去看一下它的API的。 3.监听器和回调 这种情况是从来没听说过,更别说项目中写过了,这个场景我都有点想不出来: 如果你实现了一个API,客户端在这个API中注册回调,却木有显示地取消注册。确保回调立即被当作垃圾回收的最佳方法是只保存它的弱引用:保存为WeakHashMap中的键。 —-以上,对这部分第三点还缺乏认识,如有大神看到,还望不吝赐教。
相关 文章标题 新买笔记本到底应不应该一直接上电源充电呢? 1.对于我们大家来说,新买的电脑都是比较好奇,关心,平常下个软件,看个浏览器等等都非常小心的,这也是人之常情吗!新买的电脑最好别 港控/mmm°/ 2022年07月11日 15:35/ 0 赞/ 152 阅读
相关 文章标题 CSDN MarkDown语法写博客 二级标题 介绍内容 分隔线:空行,再加上三个横杠— 三级标题 无序列表项一 (横杠 加空格) 无序列表项一 不念不忘少年蓝@/ 2022年06月15日 09:23/ 0 赞/ 188 阅读
相关 文章标题 java自带垃圾回收,因此内存泄漏是很隐蔽的,主要原因是对一个对象的引用被无意识的保留下来,垃圾回收机制不仅不会处理这个对象,也不会处理被这个对象所引用的所有其他对象。———— 柔情只为你懂/ 2022年06月10日 10:23/ 0 赞/ 211 阅读
相关 文章标题 To follow the path: look to the master, follow the master, walk with the 末蓝、/ 2022年06月09日 07:13/ 0 赞/ 203 阅读
相关 文章标题 售票厅 【问题描述】 售票厅出售关于音乐会的票,取代原来的卖一张票的形式,而是一组座号连续的票。售票室已经收到很多预订。每个预订包含指定最小座号的一组连续的票。 售 ╰半夏微凉°/ 2022年06月09日 03:49/ 0 赞/ 224 阅读
相关 文章标题 脚本传参 当我们运行脚本的时候,./shell.sh 10 20 其实10和20 已经传递进去了,我们可以在脚本中用$0, $1,$2获得参数,以此往下类推获得传入的更 柔光的暖阳◎/ 2022年06月09日 03:08/ 0 赞/ 163 阅读
相关 文章标题 用AJAX简单实现注册页面的用户名检测 js代码: <script> // 原生的方式使用AJAX // function getXMLHttpRequest( 旧城等待,/ 2022年06月09日 02:49/ 0 赞/ 241 阅读
相关 文章标题 状态模式 状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的问题是:当控制一个对象状态转换的条件表达式过于复杂时的情 末蓝、/ 2022年06月05日 07:59/ 0 赞/ 242 阅读
相关 文章标题 apache端口被异常占用导致无法启动的解决方法 最近遇到LNMPA一键安装包的Apache无法启动的问题,Apache提示以下信息: (98)Address alre 红太狼/ 2022年06月03日 01:54/ 0 赞/ 233 阅读
相关 文章标题 coding:utf-8 author = “xshengjing” from Tkinter import \ class App: def init(se Myth丶恋晨/ 2021年09月13日 22:56/ 0 赞/ 336 阅读
还没有评论,来说两句吧...