atitit.资源释放机制--attilax总结

1. 、全手工, 1

2. 引用计数, 1

2.1. 成本也显而易见。 1

2.2. 循环引用的问题, 2

2.3. 引用计数方式事实上也有经典的卡顿情况 2

3. Mark and Sweep GC,也就是Java所採用的方式。 2

4. timer 超时机制attilax 建立 2

5. ARM自己主动资源管理 3

6. 注解增强 3

7. 经常使用语言的处理方式 3

8. 问题::为什么不做资源的自己主动管理 3

1. 、全手工,

把责任交给程序猿,C最盛行的年代就是这么做的。可是这样做的问题也非常明显,由此产生的程序Bug不计其数。

2. 引用计数,

这样的做法的中心思想是通过“引用关系”确定对象的生存期,

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2.1. 成本也显而易见。

首先你至少得给每一个对象准备一个引用计数器。对于大量的小对象,这可 能是一个无法接受的成本;

2.2. 循环引用的问题。

为此你得引入weak pointer或者block pointer,前者是弱引用关系。同意悬空引用存在,后者是显式的对象池生存期管理。在能确定的时候一揽子销毁一堆相互引用的对象,跳过循环引用的检 測。

实时释放死对象,但却无法处理存在循环引用的对象图的释放。这个问题一定程度上能够通过引入弱引用的概念来解决

清纯的这个方式·  引用计数法不能解决循环引用问题

2.3. 引用计数方式事实上也有经典的卡顿情况

。样例之中的一个就是一个对象个数非常多、引用链非常长的对象图假如仅仅是被一个引用而留活,那么那个引用一死就会引发大量对象扎堆释放(但却不是“批量释放”,开销不同)。这一样会引起卡顿。

3. Mark and Sweep GC,也就是Java所採用的方式。

这样的方式的优点是你不须要给每一个对象准备一个引用计数器,并且能够集中销毁大量的小对象,提高内存利用率。但代价就是 销毁对象确定性丧失。并且你总是须要大量额外的内存(至少1到2倍)来容纳尚未来得及销毁的对象,这样才干保证垃圾收集器不会频繁启动影响程序的运行效 率。

眼下看来。资源分配和回收的问题没有什么完美的解决方式,假设程序是执行在资源严格受限的场合。手工管理可能是唯一可行的选择。假设是对于响应性要求非常严格的场合。引用计数可能更为合适。假设是典型的server端程序。GC是综合成本最低的。

4. timer 超时机制attilax 建立

建立这个资源的时候儿不个timer建立,超时释放...

5. ARM自己主动资源管理

Java 7 build 105 版本号開始,Java 7 的编译器和执行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自己主动资源管理。

6. 注解增强

public static void customBufferStreamCopy(String[] args) throws Exception{

@Cleanup InputStream in = new FileInputStream(args[0]);

@Cleanup OutputStream out = new FileOutputStream(args[1]);

byte[] buf = new byte[8192];

int i;

while ((i = in.read(buf)) != -1) {

out.write(buf, 0, i);

}

}

一个代码生成器感觉也不错

7. 经常使用语言的处理方式

,但通用的能处理带循环引用对象图的引用计数都是有别的管理方式备份的(一般是某种tracing GC,比如mark-sweep。也有名为“trial-deletion”的循环检測方法,但这个通常比tracing性能更差所以用得较少),比如 CPython使用以引用计数为主、mark-sweep为辅的方式,Adobe Flash的ActionScript VM 2(AVM2)也是以延迟引用计数(DRC)为主、增量/保守式mark-sweep为辅

8. 问题::为什么不做资源的自己主动管理

跟个内内存雅十,能做auto mana了啊..

引用

(1 封私信 _ 1 条消息) Java 等语言的 GC 为什么不实时释放内存? - 知乎.htm

atitit.资源释放机制--attilax总结的更多相关文章

  1. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  2. Atitit webservice发现机制 WS-Discovery标准的规范attilax总结

    Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1.   ...

  3. Atitit.rust语言特性 attilax 总结

    Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...

  4. Atitit 外包管理规范attilax总结

    Atitit 外包管理规范attilax总结 1. 常见的外包问题2 1.1. 使用了过时的语言与技术2 1.2. 不易扩展的架构,架构落后2 1.3. 使用了小众语言,框架类库,组件等技术,导致维护 ...

  5. Atitit xml命名空间机制

    Atitit xml命名空间机制 命名冲突1 使用前缀来避免命名冲突2 使用命名空间(Namespaces)2 XML Namespace (xmlns) 属性2 默认的命名空间(Default Na ...

  6. Atitit事件代理机制原理 基于css class的事件代理

    Atitit事件代理机制原理 基于css class的事件代理 1.1. 在javasript中delegate这个词经常出现,看字面的意思,代理.委托1 1.2. 事件代理1 1.3. 代理标准化规 ...

  7. Atitit 作用域的理解attilax总结

    Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间, 1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突.1 1.3 ...

  8. Atitit.异步的实现模式attilax大总结

    Atitit.异步的实现模式attilax大总结 1.1. 函数回调(包括的future模式)1 1.2. 事件机制( 包括定时器 listeners 1 1.3. 中断机制1 1.4. 订阅机制 发 ...

  9. atitit.事件驱动的总结attilax

    atitit.事件驱动的总结attilax Keyboard 基于的的ed 与  mouse 基础的ed Kb  base on focus ....   Mouse base on mouse mo ...

随机推荐

  1. Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

    我的解决方案 一开始,我是依照某本教材,配置了User Libraries(名为struts-2.2.3, 可供多个项目多次使用), 然后直接把struts-2.2.3引入过来(这个包不会真正的放在项 ...

  2. gdb 与函数过程

    http://www.lenky.info/archives/2013/02/2202

  3. appium+python自动化52-多点触控MultiAction

    前言 MultiAction是针对多点触控操作的,是TouchAction的一个补充模块 TouchAction用法参考前面的一篇:appium+python自动化33-TouchAction 多点触 ...

  4. vi命令用法

    从shell中启动可视化编辑器vi filename指示shell启动vi编辑器,并将参数filename传给它.如果当前目前中存在该文件,则vi编辑器将它解释为要打开的文件:如果没有该文件,则vi编 ...

  5. PAT 1033. To Fill or Not to Fill (贪心)

    PAT-A的最后一题,最终做出来了... 是贪心,通过局部最优获得全局最优. 1. 将加油站按距离升序排序 2. 记录当前所在的加油站index,存有的汽油,花费.向后遍历全部 该站可抵达的加油站 3 ...

  6. 斯坦福大学卷积神经网络教程UFLDL Tutorial - Convolutional Neural Network

    Convolutional Neural Network Overview A Convolutional Neural Network (CNN) is comprised of one or mo ...

  7. spring mvc 基于注解 配置默认 handlermapping

    spring mvc 是类似于 Struts 的框架.他们都有一个最主要的功能就是URL路由.URL路由能将请求与响应请求处理逻辑的类(在Struts中即是action,在spring mvc 中即是 ...

  8. 使用Vue.js制作仿Metronic高级表格(一)静态设计

    Metronic高级表格是Metonic框架中自行实现的表格,其底层是Datatables.本教程将主要使用Vue实现交互部分,使用Bootstrap做样式库.jQuery做部分用户交互(弹窗). 使 ...

  9. 硬件加速 Hardware Accelerated 绘制

    官方文档中对硬件加速的描述 原文地址:http://developer.android.com/guide/topics/graphics/hardware-accel.html Beginning ...

  10. JavaScript:避免代码的重复执行

    我喜欢到一些大型网站上去翻阅它们的原代码,期望能找到一些可以应用到自己的代码中的模式,或发现一些之前从未听说过的工具和技巧.可是,在我查看这些大型网站的源代码时,经常会发现一个问题,那就是重复的代码执 ...