垃圾收集算法的实现涉及大量的程序细节,而且各个平台的虚拟机操作内存的方法又各不相同,介绍几种垃圾收集算法的思想及其发展过程....
分类:
编程语言 时间:
2015-03-18 16:05:16
阅读次数:
133
垃圾回收的过程主要包括两部分:找出已死去的对象、移除已死去的对象。
确定哪些对象存活有两种方式:引用计数算法、可达性分析算法。
方案一:引用计数算法
给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;计数器的值为0时即表明对象已经死去(可被回收)。
优点:实现简单,判定效率高。
缺点:难解决对象之间互相引用的问题。
如:对象objA和...
分类:
编程语言 时间:
2015-03-14 23:15:26
阅读次数:
167
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在...
分类:
编程语言 时间:
2015-01-26 16:54:11
阅读次数:
220
JVM调优工具Jconsole,jProfile,VisualVMJconsole :jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用。对垃圾回收算法有很详细的跟踪。详细说明参考这里JProfiler:商业软件,需要付费。功能强大。详细说明参考这里VisualVM:JDK自带,功能强大,与...
分类:
编程语言 时间:
2015-01-26 16:39:44
阅读次数:
303
做了这么长时间的开发、一直弄不清楚堆和栈的区别、其实也不算弄不清吧、只是每次都区分不了、1.操作系统的堆和栈 堆-(操作系统):先进后出的序列、由程序员分配内存并释放、若程序员不释放、则程序结束时候由系统OS回收、 堆使用的是二级缓存、生命周期由虚拟机的垃圾回收算法来决定(并不是...
分类:
其他好文 时间:
2015-01-26 10:15:11
阅读次数:
202
c#相较于c,c++而言,在内存管理上为程序员提供了极大的方便,解放了程序员与内存地址打交道,提高了程序员的工作效率。比如c中分配的malloc堆空间没有释放导致的内存泄露,数组越界导致的踩内存错误,使用了已释放的内存空间错误等等。这些在C#中统统的都不存在,主要是由于clr提供的安全检查机制...
分类:
编程语言 时间:
2014-12-27 13:50:29
阅读次数:
231
垃圾回收算法中收集器 接着上面的说,了解了JVM收集垃圾的过程,然后我们看一看收集器。 串行收集器:用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。...
分类:
其他好文 时间:
2014-11-09 22:12:00
阅读次数:
350
垃圾回收算法中的一些问题 再上一遍中,说道JVM并不是采用一种垃圾回收的方法,因为不同的内存块采取的方法是不样的,那么:为什么要分块?为什么不采用同一种方法回收垃圾,这样不是更加的统一吗? 分块的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的...
分类:
其他好文 时间:
2014-11-08 22:02:23
阅读次数:
339
在说垃圾回收算法之前,先谈谈JVM怎样确定哪些对象是“垃圾”。1.引用计数器算法:引用计数器算法是给每个对象设置一个计数器,当有地方引用这个对象的时候,计数器+1,当引用失效的时候,计数器-1,当计数器为0的时候,JVM就认为对象不再被使用,是“垃圾”了。引用计数器实现简单,效率高;但是不能解决循环...
分类:
编程语言 时间:
2014-10-22 10:54:31
阅读次数:
227