`

常用CG算法

    博客分类:
  • Java
阅读更多
1)标记非活动对象
--何为非活动对象,通俗的讲,就是无引用的对象。

追踪root对象算法: 深度追踪root对象,将heap中所有被引用到的root做标志,所有未被标志的对象视为非活动对象,所占用的空间视为非活动内存。

2)清理非活动对象

Copy算法:          
方法:将内存分为两个区域(from space和to space)。所有的对象分配内存都分配到from space。在清理非活动对象阶段,把所有标志为活动的对象,copy到to space,之后清楚from space空间。然后互换from sapce和to space的身份。既原先的from space变成to sapce,原先的to space变成from space。每次清理,重复上述过程。

优点:copy算法不理会非活动对象,copy数量仅仅取决为活动对象的数量。并且在copy的同时,整理了heap空间,即,to space的空间使用始终是连续的,内存使用效率得到提高。

缺点:划分from space和to space,内存的使用率是1/2。
  Compaction算法:
方法:在清理非活动对象阶段,删除非活动对象占用内存,并且把活动对象向heap的底部移动,直到所有的活动对象被移到heap的一侧。
优点:无须划分from sapce和to space,提高内存的使用率。并且compaction后的内存空间也是连续分配的。
缺点:该算法相对比较复杂。
sun jdk gc介绍:
在减少gc之前,先来看看来自IBM的一组统计数据:
98%的java对象,在创建之后不久就变成了非活动对象;只有2%的对象,会在长时间一直处于活动状态。

如果能对这两种对象区分对象,那么会提交GC的效率。在sun jdk gc中(具体的说,是在jdk1.4之后的版本),提出了不同生命周期的GC策略。

young generation:
生命周期很短的对象,归为young generation。由于生命周期很短,这部分对象在gc的时候,很大部分的对象已经成为非活动对象。因此针对young  generation的对象,采用copy算法,只需要将少量的存活下来的对象copy到to space。存活的对象数量越少,那么copy算法的效率越高。
young generation的gc称为minor gc。经过数次minor gc,依旧存活的对象,将被移出young generation,移到tenured generation(下面将会介绍)


young generation分为:
eden:每当对象创建的时候,总是被分配在这个区域
survivor1:copy算法中的from space
survivor2:copy算法中的to sapce (备注:其中survivor1和survivor2的身份在每次minor gc后被互换)
minor gc的时候,会把eden+survivor1(2)的对象copy到survivor2(1)去。
tenured generation:
生命周期较常的对象,归入到tenured generation。一般是经过多次minor gc,还 依旧存活的对象,将移入到tenured generation。(当然,在minor gc中如果存活的对象的超过survivor的容量,放不下的对象会直接移入到tenured generation)
tenured generation的gc称为major gc,就是通常说的full gc。

采用compactiion算法。由于tenured generaion区域比较大,而且通常对象生命周期都比较常,compaction需要一定时间。所以这部分的gc时间比较长。
minor gc可能引发full gc。当eden+from space的空间大于tenured generation区的剩余空间时,会引发full gc。这是悲观算法,要确保eden+from space的对象如果都存活,必须有足够的tenured generation空间存放这些对象。
Permanet Generation:
该区域比较稳定,主要用于存放classloader信息,比如类信息和method信息。
对于spring hibernate这些需要动态类型支持的框架,这个区域需要足够的空间。

这部分内容相对比较理论,可以结合jstat,jmap等命令(当然也可以使用jconsole,jprofile,gciewer等工具),观察jdk gc的情况。

来自:http://www.blogjava.net/stone2083/archive/2008/03/15/186507.html
分享到:
评论

相关推荐

    改进信赖域牛顿算法_信赖域牛顿CG算法_信赖域_截断共轭梯度_

    本文将详细讨论“改进信赖域牛顿算法”以及其中的关键组成部分——信赖域牛顿CG算法和截断共轭梯度法。 信赖域方法是通过在每次迭代中在一个局部区域内寻找最优点来逐步逼近全局最小值的策略。这个局部区域被称为...

    (OpenCV CG匹配算法)Realistic CG Stereo Image Dataset with Ground Tru

    同时,我们还对我们的数据集应用了一些常见的立体匹配技术,以证明这些高度逼真的CG立体图像与真实世界立体图像一样具有挑战性。此外,该数据集对于相机跟踪算法也将非常有用,因为我们将提供每一帧的确切相机位置和...

    计算机图形学常用算法实现

    以下是五个常用算法的详细解释: 1. **普雷斯汉姆直线算法(Presenham's Line Algorithm)** 普雷斯汉姆直线算法是一种高效的Bresenham算法变种,用于在像素化屏幕上绘制直线。它基于错误累积的概念,通过判断当前...

    CG阴影算法

    本文将深入探讨阴影算法的基本原理、常见类型以及在实际应用中的实现。 1. **阴影算法基础** - **几何遮挡**:阴影的产生基于几何遮挡原理,即当光源被物体阻挡时,光线无法到达阴影区域,因此这些区域看起来较暗...

    鲁棒优化- C&CG算法求解两阶段鲁棒优化

    常见的鲁棒优化问题包括基本的鲁棒优化、多阶段鲁棒优化、分布式鲁棒优化等。鲁棒优化旨在处理优化问题中参数不确定的挑战,致力于优化最坏情况(worst case)下的解,或者最坏参数分布下的解(对应分布式鲁棒优化),.....

    cg_matlab_优化算法_

    本文将深入探讨两种常用的优化算法——网格参数搜索(Grid Search)和粒子群优化(Particle Swarm Optimization, PSO),并结合MATLAB环境进行分析。 首先,网格参数搜索是一种在多维空间中系统地遍历所有可能参数...

    mpi编程的常见的算法实现

    本主题主要关注MPI编程中的常见算法实现,这对于想要深入学习MPI和并行计算的学生或专业人士至关重要。 一、MPI基本概念 MPI编程的核心在于进程间的通信,它通过消息传递机制实现数据交换。MPI程序通常由多个进程...

    CG基本图形生成算法PPT教学课件.PPTx

    本篇内容主要讲解了两种常见的直线生成算法:数值微分法(DDA法)和中点Bresenham算法。 5.1 直线的扫描转换 在计算机屏幕上绘制直线时,有以下几个关键要求: 1. 直线必须是直的,即不能出现弯曲或扭曲。 2. 确保...

    CG基本图形生成算法PPT学习教案.PPTx

    本文将深入探讨两种常见的直线生成算法:数值微分法(DDA)和中点Bresenham算法。 **1. 数值微分法(DDA法)** DDA(Digital Differential Analyzer)算法是一种简单的直线生成方法,适用于直线两端点已知的情况。...

    比较各种直线算法和圆弧算法

    在计算机图形学领域,直线和圆弧的绘制算法是至关重要的组成部分,它们广泛应用于2D和3D渲染、游戏开发、工程制图等场景。...在CG(Computer Graphics)领域,算法的深入研究和实践是提高技术能力的关键步骤。

    sklearn 的一些常见算法的使用

    `sklearn.linear_model`模块中的`LogisticRegression`类实现了逻辑回归算法,支持多种优化方法(如liblinear、newton-cg、sag、lbfgs)和正则化策略,有助于避免过拟合。 线性回归(Linear Regression)则是用于...

    【Matlab】常用优化算法程序框架.zip

    在Python中,常用的优化库有`scipy.optimize`,它提供了多种优化算法,如`minimize()`函数支持多种优化方法,包括L-BFGS-B(拟牛顿法)、Nelder-Mead(单纯形法)、CG(梯度法)、BFGS(拟牛顿法)等。 如果你正在...

    matlab_BFGS_CG_阻尼Newton_最速下降_不精确搜索_newton_cg_newton_newton-cg_Ne

    本压缩包涉及的"matlab_BFGS_CG_阻尼Newton_最速下降_不精确搜索_newton_cg_newton_newton-cg_Ne"是关于无约束和约束优化问题的实例,主要涵盖了以下几个重要的优化算法和概念: 1. **BFGS(Broyden-Fletcher-...

    共轭梯度BP算法在Matlab 7.0中的实现.zip

    在机器学习和神经网络领域,CG算法常用于优化权重参数,比如在反向传播(Backpropagation, BP)算法中。这个压缩包"共轭梯度BP算法在Matlab 7.0中的实现.zip"包含了一个PDF文档,详细解释了如何在Matlab 7.0环境下...

    大规模优化算法---LBFGS算法1

    【大规模优化算法——LBFGS算法1】 在优化问题中,特别是IT领域的机器学习和数值计算,找到一种高效且适用于大规模数据的优化算法至关重要。...在机器学习和数据分析中,L-BFGS因其高效和适用性而成为常用的优化工具。

    Cg 标准函数库.rar

    - 数学函数如`pow`、`sin`、`cos`,提供基本的数学运算,帮助构建复杂的着色算法。 - 向量和矩阵操作函数如`normalize`、`cross`、`matrixMultiply`,用于几何变换和向量操作。 3. **使用Cg标准函数库** - ...

    CG提取工具

    这个程序可能支持多种文件格式,例如常见的FBX、OBJ、BLEND、3DS等,用于处理不同软件创建的CG资源。它可能包含解包、解压、解析二进制文件结构等复杂操作,以确保数据能被正确导出。 "crass-0.4.14.0"则可能是一个...

    数值分析算法集

    其中,GMRES(Generalized Minimal Residual)迭代算法通过最小化残差的范数来逼近方程组的解,而共轭梯度法(CG)则适用于对称正定矩阵,并且能够快速收敛到精确解。 Chebyshev加速算法是一种迭代加速技术,通过...

    算法分析与设计复习资料

    递归算法是实现分治法的常见工具,但在某些情况下,可以通过栈模拟、递推转换或优化为尾递归来避免递归调用,提高效率。 **动态规划** 动态规划与分治法相似,但处理的是子问题之间有依赖关系的情况。它的基本步骤...

    CG.zip_中点分割法_中点分割算法_图形判别法_点在 区域内_点在区域内

    这种算法虽然简单,但在早期图形系统中非常常见。 www.pudn.com.txt可能是一个包含相关资料链接或说明的文本文件,而CG可能是包含源代码的文件夹。通过对这些源码的分析,我们可以学习到如何在实际编程环境中实现...

Global site tag (gtag.js) - Google Analytics