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. 狗日的rem

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  2. NHibernate Configuring

    NHibernate引用程序中有几个关键组件,如下图所示: 初始化时,NHibernate应用程序将生成一个配置对象.本节中,我们通过设置App.config文件来生成该配置对象.该对象负责加载映射信 ...

  3. 破解windows下MySQL服务启动不了的情况下不能对其进行全然卸载的解决方式

    下面的文章主要介绍的是在MySQL服务启动不了的情况下,不能对其进行全然卸载的实际解决的方法的描写叙述,下面就是对解决MySQL服务启动不了的情况下详细方案的描写叙述,希望在你今后的学习中会对你有所帮 ...

  4. Java垃圾回收精粹 — Part1

    Java垃圾回收精粹分4个部分,本篇是第1部分.在第1部分里介绍了权衡点.对象生命周期以及全局暂停事件. 串行.并行.并发.CMS.G1.年轻代(Young Gen).新生代(New Gen).旧生代 ...

  5. 全负荷的 Node.js[转载]

    一个Node.JS 的进程只会运行在单个的物理核心上,就是因为这一点,在开发可扩展的服务器的时候就需要格外的注意. 因为有一系列稳定的API,加上原生扩展的开发来管理进程,所以有很多不同的方法来设计一 ...

  6. Redis主从集群以及Sentinel的配置

    安装完redis后,修改几个redis从节点的配置文件redis.conf,主要是加入主节点位置 slaveof 另外需要修改的地方包括,这样允许其他的从节点连入 bind 0.0.0.0 prote ...

  7. JOIN与EXISTS(子查询)的效率研究

    使用MySQL提供的Sample数据库Sakila 现将profiling打开,用来一会查看sql执行时间 set profiling=1; exists 子查询与 join联接效率的对比,功能:查看 ...

  8. sqlmap的篡改绕过WAF

    space2comment.py Replaces space character (‘ ‘) with comments ‘/**/’ Example: * Input: SELECT id FRO ...

  9. .net平台推送ios消息

    1,ios应用程序中允许向客户推送消息 2,需要有苹果的证书以及密码(怎么获取,网上搜一下,需要交费的) 3,iphone手机一部,安装了该ios应用程序 4,.net 项目中引用PushSharp. ...

  10. php stdClass 的使用

    原文:http://www.php.cn/php-weizijiaocheng-371767.html ------------------------------------------------ ...