atitit.资源释放机制--attilax总结
atitit.资源释放机制--attilax总结
3. Mark and Sweep GC,也就是Java所採用的方式。 2
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总结的更多相关文章
- Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结
Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...
- Atitit webservice发现机制 WS-Discovery标准的规范attilax总结
Atitit webservice发现机制 WS-Discovery标准的规范attilax总结 1.1. WS-Discovery标准1 1.2. 一.WS-Discovery1 1.2.1. ...
- Atitit.rust语言特性 attilax 总结
Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...
- Atitit 外包管理规范attilax总结
Atitit 外包管理规范attilax总结 1. 常见的外包问题2 1.1. 使用了过时的语言与技术2 1.2. 不易扩展的架构,架构落后2 1.3. 使用了小众语言,框架类库,组件等技术,导致维护 ...
- Atitit xml命名空间机制
Atitit xml命名空间机制 命名冲突1 使用前缀来避免命名冲突2 使用命名空间(Namespaces)2 XML Namespace (xmlns) 属性2 默认的命名空间(Default Na ...
- Atitit事件代理机制原理 基于css class的事件代理
Atitit事件代理机制原理 基于css class的事件代理 1.1. 在javasript中delegate这个词经常出现,看字面的意思,代理.委托1 1.2. 事件代理1 1.3. 代理标准化规 ...
- Atitit 作用域的理解attilax总结
Atitit 作用域的理解attilax总结 1.1. 作用域是指对某一变量和方法具有访问权限的代码空间, 1 1.2. 作用域的使用提高了程序逻辑的局部性,增强程序的可靠性,减少名字冲突.1 1.3 ...
- Atitit.异步的实现模式attilax大总结
Atitit.异步的实现模式attilax大总结 1.1. 函数回调(包括的future模式)1 1.2. 事件机制( 包括定时器 listeners 1 1.3. 中断机制1 1.4. 订阅机制 发 ...
- atitit.事件驱动的总结attilax
atitit.事件驱动的总结attilax Keyboard 基于的的ed 与 mouse 基础的ed Kb base on focus .... Mouse base on mouse mo ...
随机推荐
- 断点续传队列和本地持久化(iOS源码)
// // ASIFormDataRequest.m // Part of ASIHTTPRequest -> http://allseeing-i.com/ASIHTTPRequest // ...
- HDU 1171 Big Event in HDU (多重背包变形)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- iTunes Connect App Video
系统要求: 系统升级为 OS X Yosemote 版本 10.10 (正式版已经发布更新) 录制工具: QuickTime Player 版本 10.4 (833) 操作流程: 1. 设备数据线连接 ...
- uva 784 Maze Exploration(简单dfs)
这道题看上去非常麻烦,什么迷宫啊.门之类的,事实上挺简单的,就是让把与 * 连通的都置为 # 包含 * , 直接dfs就能够了,只是我wa了好多次...最后居然是多读了一个换行.忘了加getchar( ...
- llvm中如何利用分支概率和基本块频率估计
1. 背景 llvm自2.9版以后,已经集成了对分支概率和基本块频率的静态分析. 分支概率(branch probability)是指在程序的控制流图中,从控制流从一个基本块A到其任意后继基本块Si的 ...
- 探索 Python、机器学习和 NLTK 库 开发一个应用程序,使用 Python、NLTK 和机器学习对 RSS 提要进行分类
挑战:使用机器学习对 RSS 提要进行分类 最近,我接到一项任务,要求为客户创建一个 RSS 提要分类子系统.目标是读取几十个甚至几百个 RSS 提要,将它们的许多文章自动分类到几十个预定义的主题领域 ...
- 织梦(DEDE)CMS V5.3 覆盖任意变量导致远程包含漏洞
漏洞版本: 织梦(DEDE)CMS V5.3 漏洞描述: 织梦内容管理系统,最强大的中文开源CMS网站管理项目,使用PHP+MySQL架构. 在文件include/common.inc.php中: f ...
- c#实现随鼠标移动窗体
private void MainForm_Load(object sender, EventArgs e) { //绑定事件 MouseMove += Form_MouseMove; MouseDo ...
- mysql的数据恢复
转载自:http://ourmysql.com/archives/1293 数据库数据被误删除是经常看到的事情,数据的恢复也就自然成为了DBA很重要的一门基本功夫,比较笨拙的办法是拉出历史的备份到另外 ...
- EasyUI-EasyUI框架入门学习
前言 新项目的开发前端技术打算采用EasyUI框架(基于EasyUI较为丰富的UI组件库),项目组长将前端EasyUI这块的任务分配给了我.在进行开发之前,需要我这菜鸟对EasyUI框架进行一些基础的 ...