可以从不同的的角度去划分垃圾回收算法: 按照基本回收策略分 引用计数(Reference Counting): 比较古老的回收算法。原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 标记-清除(Mark- ...
分类:
编程语言 时间:
2017-03-14 12:02:40
阅读次数:
207
垃圾回收的瓶颈 传统分代垃圾回收方式,已经在一定程度上把垃圾回收给应用带来的负担降到了最小,把应用的吞吐量推到了一个极限。但是他无法解决的一个问题,就是Full GC所带来的应用暂停。在一些对实时性要求很高的应用场景下,GC暂停所带来的请求堆积和请求失败是无法接受的。这类应用可能要求请求的返回时间在 ...
分类:
编程语言 时间:
2017-03-14 11:57:32
阅读次数:
228
GC方法:在JVM启动时填入参数(比如:-XX:+UseConcMarkSweepGC ) 算法区分: 1.古老回收算法: Reference Counting ,对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象。此算法最致命的是无法处理循环引用的问题。 ...
分类:
其他好文 时间:
2017-02-25 11:54:26
阅读次数:
175
在《垃圾回收算法之引用计数算法》这篇博客里,我们说到了引用计数算法的缺陷:会造成循环引用的问题。本篇的引用跟踪算法则客服了这种缺陷。 在引用计数算法中,对于每个引用的对象,我们有一个额外的字段专门计数这个对象被引用的次数,当次数为0时,则视为垃圾。那在引用跟踪算法中,我们如何判断这个对象是垃圾呢?答 ...
分类:
编程语言 时间:
2017-02-19 10:25:09
阅读次数:
283
JVM结构、内存分配、垃圾回收算法、垃圾收集器。 一、JVM结构 根据《java虚拟机规范》规定,JVM的基本结构一般如下图所示: 从左图可知,JVM主要包括四个部分: 1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件 ...
分类:
其他好文 时间:
2017-02-14 11:58:14
阅读次数:
278
来源 一、为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1、为对应的资源分配内存 2、初始化内存 3、使用资源 4、清理资源 5、释放内存 应用程序对资源(内存使用)管理的方式,常见的一般有如下几种: 1、手动管理:C,C++ 2、计数管理:COM 3、自动管理:.NET,Java ...
分类:
其他好文 时间:
2017-01-12 22:50:57
阅读次数:
235
JVM内存模型总体架构图 程序计数器多线程时,当线程数超过CPU数量或CPU内核数量,线程之间就要根据时间片轮询抢夺CPU时间资源。因此每个线程有要有一个独立的程序计数器,记录下一条要运行的指令。线程私有的内存区域。如果执行的是JAVA方法,计数器记录正在执行的java字节码地址,如果执行的是nat ...
分类:
编程语言 时间:
2017-01-08 12:37:20
阅读次数:
222
GC中的垃圾:特指存在于内存中、不会再使用的对象。 内存泄漏和内存溢出的区别: 内存泄漏:内存空间忘记回收,垃圾对象永远无法被回收 内存溢出:垃圾对象(不满足回收条件)所耗内存持续上升,导致内存溢出。 1 常用的垃圾回收算法 引用计数法、标记压缩法、标记清除法、复制算法和分代、分区 1)引用计数法: ...
分类:
编程语言 时间:
2016-12-19 08:42:32
阅读次数:
235
1.两个最基本的java回收算法:复制算法和标记清理算法 复制算法:两个区域A和B,初始对象在A,继续存活的对象被转移到B。此为新生代最常用的算法 标记清理:一块区域,标记要回收的对象,然后回收,一定会出现碎片,那么引出 标记-整理算法:多了碎片整理,整理出更大的内存放更大的对象 两个概念:新生代和 ...
分类:
编程语言 时间:
2016-10-29 22:09:28
阅读次数:
248