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. ARM 调用约定 calling convention

    int bar( int a, int b, int c, int d, int e, int f, int g ) { ]; array2[ ] = a + b; array2[ ] = b + c ...

  2. Druid 常见问题

    https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98

  3. Unity3d之ScrollView实现图片浏览切换功能----折磨的学习

    由于项目需要,需要用NGUi实现一个图片浏览切换的功能,于是参考官方NGUI例子的ScrollView做了一个例子,初始看上去基本实现了自己想要的功能. 但是测试后发现当隐藏其中一张图片后,后面图片不 ...

  4. 【docker】【mysql】docker安装mysql,阿里云docker镜像加速器,docker搜索查看远程仓库上的镜像,docker拉取镜像,查看本地所有镜像,查看容器的运行状况,查看容器的详细信息

    在docker上安装mysql有两种方式 1.通过Dockerfile构建 2.直接在docker hub上拉取镜像安装 =================本篇采用方法2=============== ...

  5. VC++ 6.0下OpengGL配置以及glut配置

    转自:http://blog.sina.com.cn/s/blog_5f0cf7bd0100c9oa.html OpenGL官方网站(英文) http://www.opengl.org 下面我将对Wi ...

  6. android RecyclerView (二) ItemDecoration 详解

    RecyclerView 已经推出了一年多了,日常开发中也已经彻底从 ListView 迁移到了 RecyclerView,但前两天有人在一个安卓群里面问了个关于最顶上的 item view 加蒙层的 ...

  7. JAVA常见算法题(三十一)---冒泡排序

    package com.jege.spring.boot.hello.world; /** * java算法之冒泡排序<br> * 将数组按照从大到小的顺序排列<br> * * ...

  8. 推荐两份学习 Kotlin 和机器学习的资料

    最近 Kotlin 和人工智能比较火,有不少同学留言问我怎么学习 Kotlin,怎么学习机器学习,今天就给大家推荐两份不错的学习资料. 1. Kotlin 学习资料其实,在我看来最好的学习资料就是 K ...

  9. Python学习(一)安装、环境配置及IDE推荐

    Python的安装.环境配置及IDE推荐 官网:https://www.python.org/ 版本:2.x 和 3.x 差别较大:python3是不向下兼容:版本区别可参考网官网介绍 至于选择 Py ...

  10. slf4j log4j logback log4j2关系详解和相关用法

    来源:slf4j log4j logback关系详解和相关用法https://www.cnblogs.com/Sinte-Beuve/p/5758971.html The Simple Logging ...