- Java语言也需要考虑内存管理
//Can u spot the "memory leak"? public class Stack { private Ojbect[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack(int initialCapacity) { 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]; } /** * Ensure space for at least one more element, roughly doubling the capacity * each time the array needs to grow. */ private void ensureCapacity() { if (elements.length == size) { Object[] oldElements = elements; elements = Arrays.copyOf(elements, 2 * size + 1); } } }
以上代码存在内存溢出的风险:如果一个栈是先增长,然后再收缩,栈中pop谈出来的对象不会被当作垃圾回收。因为栈内部维护着这些对象的过期引用(obsolete reference)。
- 一旦对象引用已经过期,只需清空这些引用即可
public Object pop() { if (size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; return result; }
- 消除过期引用最好的方法是让包含该引用的变量结束其生命周期
遗留任务:学习EJ.45时,在最紧凑的作用域范围内定义每一个变量,以上情景会自然而然地发生。
- 只要类是自己管理内存,就应该警惕内存泄露问题
- 内存泄露的另一个常见来源是缓存(EJ p23)
- 内存泄露的第三个常见来源是监听器和其他回调
相关推荐
Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001Eijiro V86 JE~EJ.zip.001
Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005Eijiro V86 JE~EJ.zip.005
Eijiro V86 JE~EJ.zip.002Eijiro V86 JE~EJ.zip.002Eijiro V86 JE~EJ.zip.002
Eijiro V86 JE~EJ.zip.004Eijiro V86 JE~EJ.zip.004
TheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zipTheThridJE~EJ.zip
Eijiro V86 JE~EJ.zipEijiro V86 JE~EJ.zip
Eijiro V86 JE~EJ.zip.006Eijiro V86 JE~EJ.zip.006Eijiro V86 JE~EJ.zip.006
Aspnet-ej2-aspmvc-ej1compatibility.zip,此演示旨在避免在asp.net mvcsyncfusion essential js 1和essential js 2 asp.net mvc兼容性中出现essential js 1和essential js 2兼容性问题。,asp.net是一个开源的web框架...
本地会话实时分析模式 Profiler能够根据用户定义的启动方式进行设置。用户即刻便能从设置好的JVM中看到实时数据。用户还可以无需自定义,直接从多个IDE插件中选择进行配置。 远程会话实时分析模式 ...
能在DOS下打开和关闭光驱的C程序
Digital Image Correlation (DIC) is an optical, non-contact method to measure full-field displacements and strains. The only requirement is that the test specimen has a random speckle pattern on its ...
在DOS下弹出CD-ROM的小程序,需要先加载MSCDEX.
欧姆龙模块型温控器EJ1pdf,欧姆龙模块型温控器EJ1:控制柜内安装型温控器,灵活的模块化设计,与上位机设备的整合性大大提高。小型模块结构使温度系统的构造最适合于应用。无须编程就可与可编程控制器进行连接,减少...
基于51单片机的自动浇灌系统,资源包括原理图,代码,仿真图,相关资料等。功能实现:采集土壤温湿度信息,达到阈值控制浇水或停止浇水,包括温度报警等功能。
ABB数字量IO扩展模块,国产EJ1820支持DeivecNet通讯,完美兼容,对ABB数字IO信号进行扩展说明书
EJ 380-1989 EJ 380-1989 EJ 380-1989
EJ511_Datasheet_rev0.97.pdf
倍福EJ模块简介
在HTML中引用环境变量 在Shell中添加临时环境变量 在.env添加开发环境变量 我可以使用装饰器吗? 使用AJAX请求获取数据 与API后端集成 节点 Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”...
欧姆龙 倾斜温度控制用模块式温控器EJ1G操作手册pdf,不要将终端单元直接连接到HFU。终端单元必须连接在基本单元的右侧。HFU 必须连接在基本单元的左侧。EJ1 无法与CJ 系列的PLC 链接使用。对于倾斜温度控制应使用EJ1...