精华内容
参与话题
问答
  • 标记整理算法
    1. 标记整理算法在这里插入图片描述
    展开全文
  • JVM算法(标记清除算法、复制算法、标记整理算法、分代收集算法、分区收集算法1.如何确定垃圾1.1 引用计数法1.2 可达性分析2.标记清除算法(Mark-Sweep)3.复制算法(copying)4.标记整理算法(Mark-Compact)5.分代...

    1.如何确定垃圾

    1.1 引用计数法

    在 Java 中,引用和对象是有关联的。如果要操作对象则必须用引用进行。因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数为 0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。不过,引用计数法不能解决对象之间相互循环引用的问题,故很多主流JVM不采用引用计数法。
    引用计数:给对象添加一个引用计数器,每当有一个地方引用它,计数器值就+1;相反的,当引用失效的时候,计数器值就-1;

    1.2 可达性分析

    为了解决引用计数法的循环引用问题,java使用了可达性分析的方法。通过一系列的"GC roots"对象作为起点搜索,如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的要注意的是,不可达对象不等价于可回收对象,不可达对象变为可回收对象至少要经过两次标记过程。两次标记后仍然是可回收对象,则将面临回收
    在这里插入图片描述

    2.标记清除算法(Mark-Sweep)

    最基础的垃圾回收算法,分为两个阶段,标注和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。如图
    在这里插入图片描述
    从图中我们就可以发现,该算法最大的问题就是内存碎片化严重,后续可能发生大对象不能找到可利用空间的问题。

    3.复制算法(copying)

    为了解决Mark-Sweep算法内存碎片化的缺陷而被提出的算法。按内存容量将内存划分为等大小的两块。每次只使用其中一块,当这一块内存满后将尚存活的对象复制到另一块上去,把已使用的内存清掉,如图:
    在这里插入图片描述这种算法虽然实现简单,内存效率高,不易产生碎片,但是最大的问题是可用内存被压缩到了原本的一半,且存活对象增多的话,Copying算法的效率会大大降低。

    4.标记整理算法(Mark-Compact)

    结合了以上两个算法,为了避免缺陷从而提出,标记阶段和Mark-Sweep算法相同,标记后不是清理对象,而是将存活对象移向内存的另一端,然后清除端边界外的对象。
    在这里插入图片描述

    5.分代收集算法

    分代收集算法是目前大部分JVM所采用的方法,其核心思想是根据对象存活的不同生命周期将内存划分为不同的区域,一般情况下将GC堆划分为老年代和新生代,老年代的特点是每次垃圾回收时只有少量对象需要被回收,新生代的特点是每次垃圾回收时都有大量垃圾被回收,因此可以根据不同区域选择不同算法。

    5.1 新生代与复制算法

    目前大部分JVM的GC对于新生代都采取Copying算法,因为新生代中每次垃圾回收都要回收大部分对象,即要复制的操作比较少,但通常并不是按照1:1来划分新生代,一般新生代划分为一块较大的Eden空间和两个比较小的Survivor空间(From Space,To Space),每次使用Eden空间和其中一块Survivor空间,当进行回收时,将两块空间中还存活的对象复制到另一块Survivor空间中。

    5.2 老年代与标记复制算法

    老年代每次只回收少量对象,因而采用Mark-Compact算法
    1.对象的内存分配主要在新生代的Eden Space 和Survivor Space的From Space,少数会直接分配到老年代。
    2.当新生代的Eden Space和From Space空间不足时就会发生一次GC,进行GC后,Eden Space和From Space 区的存活对象会被挪到To Space,然后将Eden Space和From Space进行清理。
    3.如果To Space 无法足够存储某个对象,则将这个对象存储到老年代。
    4.在进行GC后,使用的便是Eden Space 和To Space了,此时的From Space变为To Space ,To Space变为From Space。实际上使用的还是Eden Space 和From Space
    5.当对象在Survivor区躲过一次GC后,其年龄就会+1。默认情况下年龄达到15的对象会被移到老年代中

    6.分区收集算法

    分区算法则将整个堆空间划分为连续的不同的小区间,每个小区间独立使用,独立回收,这样做的好处是可以控制一次回收多少个小区间,根据目标停顿时间,每次合理的回收若干个小区间(而不是整个堆),从而减少一次GC所产生的停顿。

    展开全文
  • java虚拟机垃圾收集算法:标记清理算法、复制算法、标记整理算法、分带收集算法概念、使用场景总结

    有需要可以查看我的完整思维导图链接:https://blog.csdn.net/qq_22701869/article/details/107525851

     

    目录

     

    java虚拟机垃圾收集算法:标记清理算法、复制算法、标记整理算法、分带收集算法概念、使用场景总结

    HotSpot垃圾收集算法总结


    java虚拟机垃圾收集算法:标记清理算法、复制算法、标记整理算法、分带收集算法概念、使用场景总结

    HotSpot垃圾收集算法总结

    展开全文
  • 复制算法和标记整理算法什么是无监督学习?(What is Unsupervised Learning?) You may have heard about Market Segmentation where there is a database of customers and we group them into different market ...

    复制算法和标记整理算法

    什么是无监督学习?(What is Unsupervised Learning?)

    You may have heard about Market Segmentation where there is a database of customers and we group them into different market segments so as to serve them better, or maybe about Social Network Analysis to find out who are the coherent groups of friends in a social network. However can you imagine any labels in the data that is used in the training examples for any of the mentioned sector? If no, then how do we develop Machine Leaning Algorithms to make predictions on unlabeled data? The answer is Unsupervised Learning. The Unsupervised Learning Algorithms learn from unlabeled data by finding some structure in the given training set. The following figure will illustrate the concept:

    您可能听说过“细分市场”,那里有一个客户数据库,我们将他们分组为不同的细分市场以便更好地为他们提供服务,或者您可能听说过“社交网络分析”以找出谁是社交网络中连贯的朋友群体。 但是,您能否想象任何提到的部门的培训示例中使用的数据中的任何标签? 如果否,那么我们如何开发机器学习算法以对未标记的数据进行预测? 答案是无监督学习。 无监督学习算法通过在给定训练集中找到某种结构来从未标记的数据中学习。 下图将说明该概念:

    K均值算法的聚类和工作: (Clustering and working of K-Means Algorithm:)

    The above figure gives us an intuition about how an unsupervised learning algorithm can automatically group unlabeled data into coherent clusters. The K-Means algorithm is the most widely used clustering algorithm. So how does the K-Means Algorithm work?

    上图为我们提供了一种关于无监督学习算法如何将未标记数据自动分组为相干群集的直觉。 K-Means算法是使用最广泛的聚类算法。 那么K-Means算法如何工作?

    K-Means is an iterative algorithm. Let us say we have an unlabeled dataset as shown:

    K-Means是一种迭代算法。 假设我们有一个未标记的数据集,如下所示:

    Image for post
    Initial Unlabeled Dataset
    初始未标记数据集

    Our objective is to group the data into 2 clusters. So, first we are going to randomly initialize two points (since I want to group the data into 2 clusters), known as cluster centroids.

    我们的目标是将数据分为2个类。 因此,首先,我们将随机初始化两点(因为我想将数据分组为2个群集),称为群集质心。

    Image for post
    Cluster centroids randomly initialized
    簇质心随机初始化

    Now my algorithm goes through each of the examples and depending on whether they are closer to the Red or the Blue centroid, it assigns each of the data points to one of the cluster centroids. This step is called the “Cluster Assignment Step”.

    现在,我的算法将遍历每个示例,并根据它们是否更接近红色或蓝色质心,将每个数据点分配给一个聚类质心。 该步骤称为“群集分配步骤”。

    Image for post
    Cluster Assignment Step
    群集分配步骤

    The second part of the iteration is called the “Move Centroid Step”. The two cluster centroids are taken and moved to the average of their corresponding data points. Specifically, we are going to compute the mean of the points’ location for each of the two clusters already formed and move the centroids to their respective cluster means.

    迭代的第二部分称为“移动质心步”。 取两个聚类质心并将其移动到其相应数据点的平均值。 具体来说,我们将为已经形成的两个聚类中的每个聚类计算点位置的平均值,然后将质心移动到它们各自的聚类平均值。

    Image for post
    Cluster centroids moved to their respective means
    簇质心移到各自的位置

    As I have stated earlier, K-Means is an iterative algorithm. So now we go back to the Cluster Assignment Step, go through the training examples and assign each data points to the nearest cluster centroid.

    如前所述,K-Means是一种迭代算法。 现在,我们回到“聚类分配步骤”,遍历训练示例并将每个数据点分配给最近的聚类质心。

    Image for post
    Cluster Assignment for next iteration
    下一次迭代的集群分配

    The algorithm continues with yet another Move Centroid Step and computes the average of the data points for each of the 2 clusters and move the centroids to their new position.

    该算法继续执行另一个“移动质心步长”,并计算2个群集中每个群集的数据点的平均值,然后将质心移动到新位置。

    Image for post
    Move Centroid Step for next iteration
    移动质心步进行下一次迭代

    As we can see 2 clusters have been formed quite distinctly. The algorithm will continue to run for as many iterations that has been specified but our intuition says that there will not be any change further while either of the 2 steps are performed since K-Means has converged.

    如我们所见,已经非常明显地形成了两个集群。 该算法将继续运行已指定的尽可能多的迭代,但是我们的直觉表明,由于K-Means已收敛,因此执行这两个步骤中的任何一个步骤都不会进一步改变。

    广义解释: (Generalized Explanation:)

    To write more formally, the K-Means Algorithm takes two inputs. The first is a parameter (K) for the number of clusters we want to find, and the second is our unlabeled training set having ‘m’ examples.

    为了更正式地编写,K均值算法采用两个输入。 第一个是我们要查找的簇数的参数(K),第二个是我们的带有'm'个示例的未标记训练集。

    Image for post
    Input for K-Means Algorithm
    K均值算法的输入

    Each of my training examples has ‘n’ features, hence each of them is taken as an R(n) dimensional vector. Now that the inputs have been taken, we run the K-Means Algorithm.

    我的每个训练示例都具有“ n”个特征,因此,每个特征都被视为R(n)维向量。 现在已经输入了数据,我们运行K-Means算法。

    First we randomly initialize K cluster centroids u(1) through u(K). Then our iterative process of Cluster Assignment and Move Centroid begins.

    首先,我们随机初始化K个簇质心u(1)到u(K)。 然后,我们开始进行群集分配和移动质心的迭代过程。

    Image for post
    K-Means Algorithm representation
    K-均值算法表示

    The first inner loop (Cluster Assignment Step) computes a variable ‘c(i)’ to store the index of the cluster centroid closest to training example ‘x(i)’. So, ‘c(i)’ is a number between 1 and K which denotes that the ‘i’th training example is closest to which cluster centroid ‘k’ (1 through K). Now the question arises that how the operation is done.

    第一个内部循环(集群分配步骤)计算变量“ c(i)”,以存储最接近训练示例“ x(i)”的聚类质心的索引。 因此,“ c(i)”是1到K之间的数字,表示“ i”个训练示例最接近哪个聚类质心“ k”(1到K)。 现在出现的问题是该操作如何完成。

    The loop runs for each of the training examples from 1 through m. In order to compute c(i), the ‘i’th example x(i) is taken and its distance is measured from each of the cluster centroids u(k), and the value of ‘k’ for which we get the minimum distance between x(i) and u(k), is what gets set in c(i). Hence, c(i) is set to be that value of ‘k’ that minimizes the square of the norm between (x(i)-u(k)) thereby selecting the cluster centroid having the shortest distance from my training example ‘x(i)’.

    该循环针对从1到m的每个训练示例运行。 为了计算c(i),采用第i个示例x(i),并从每个聚类质心u(k)测量其距离,得到的k值最小。 x(i)和u(k)之间的距离是在c(i)中设置的。 因此,将c(i)设置为最小化(x(i)-u(k))之间范数平方的'k'值,从而选择距我的训练示例'x最短距离的聚类质心(一世)'。

    Image for post
    Cluster Assignment (computing c(i))
    群集分配(计算c(i))

    The other inner loop for Move Centroid Step computes the ‘u(k)’ for each cluster as the mean of the training example points assigned them. Suppose the examples x(1), x(7), x(9) and x(15) has been assigned to cluster centroid 1. This implies that c(1) = c(7) = c(9) = c(15) = 1. The Move Centroid step would thus compute u(1) as:

    移动质心步的另一个内部循环为每个群集计算“ u(k)”,作为分配给它们的训练示例点的平均值。 假设示例x(1),x(7),x(9)和x(15)已分配给群集质心1。这意味着c(1)= c(7)= c(9)= c( 15)=1。因此,“移动质心”步骤将计算u(1)为:

    Image for post
    Move Centroid (computing u(k) for k=1)
    移动质心(为k = 1计算u(k))

    As a result the cluster centroids will move to the mean of the points assigned to them. The process continues until each of the clusters centroids have moved to their desired positions and the iterative K-Means algorithm continues to perform the steps and will eventually converge.

    结果,聚类质心将移动到分配给它们的点的平均值。 该过程继续进行,直到每个聚类质心都已移至其所需位置,并且迭代K均值算法继续执行这些步骤并最终收敛。

    成本函数: (Cost-Function:)

    The K-Means algorithm has a cost function that it tries to optimize, just like supervised algorithms, which helps in debugging and avoiding local minima. We have used variables c(i) and u(k) for the Cluster Assignment and Move Centroid steps, respectively. We have to find a proper value of the cluster centroid of the cluster u(c(i)) to which a particular training example x(i) has been assigned.

    就像监督算法一样,K-Means算法具有尝试优化的成本函数,有助于调试和避免局部最小值。 我们已经分别将变量c(i)和u(k)用于“群集分配”和“移动质心”步骤。 我们必须找到已经分配了特定训练示例x(i)的簇u(c(i))的簇质心的适当值。

    Image for post

    Suppose x(i) has been assigned to cluster 7. So by the Cluster Assignment step, c(i) = 7. So the cluster centroid of the cluster to which x(i) has been assigned will be:

    假设x(i)已分配给群集7,那么在“群集分配”步骤中,c(i)=7。因此,已为其分配x(i)的群集的群集质心为:

    Image for post
    Cluster centroid of cluster no. 7
    簇编号的簇质心。 7

    The Cost-function that K-Means optimizes is a function J of c(1) through c(m) and u(1) through u(m). These parameters are varied to an ambient value such that the Cost Function is minimized.

    K-Means优化的成本函数是c(1)到c(m)和u(1)到u(m)的函数J。 将这些参数更改为环境值,以使成本函数最小化。

    Image for post
    Cost Function
    成本函数

    The Cost function is also known as the Distortion Cost function, and is implemented in the iterative process of Cluster Assignment step and Move Centroid step as:

    成本函数也称为失真成本函数,在“集群分配”步骤和“移动质心”步骤的迭代过程中实现为:

    Image for post
    Implementation of the cost function
    成本功能的实施

    So, the 2 sets of variables are taken and sort of partitioned. J is first minimized with respect to c, then with respect to u, and the process repeats itself the specified number of times. At the end of the iterative process K-Means converges and a structure in the data is eventually found.

    因此,采用了两组变量并对变量进行了排序。 首先相对于c最小化J,然后相对于u最小化,该过程将自身重复指定的次数。 在迭代过程的最后,K-Means收敛,最终在数据中找到一个结构。

    结论: (Conclusion:)

    The K-Means Algorithm scales really well to large datasets, generalized to clusters of various shapes and guarantees convergence after a specific number of iterations. However, it fails to yield accurate results if outliers are present or density of the spread of data is not even. Nevertheless, equipped with the quality of adapting easily to new examples, K-Means is still the most widely used Unsupervised Learning Algorithm.

    K-Means算法确实可以很好地扩展到大型数据集,并推广到各种形状的簇,并保证在特定数量的迭代后收敛。 但是,如果存在异常值或数据分布的密度不均匀,则无法获得准确的结果。 尽管如此,由于具有易于适应新示例的质量,K-Means仍然是使用最广泛的无监督学习算法。

    翻译自: https://medium.com/srm-mic/k-means-algorithm-dealing-with-unlabeled-data-747f37697d9

    复制算法和标记整理算法

    展开全文
  • 3、标记整理算法; 4、分代收集算法; 下面介绍一下这几种算法的思想: 1、标记清除算法 标记清除算法分为标记和清除阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。 它是最基础...
  • 垃圾回收机制策略三(标记整理算法)

    千次阅读 2018-11-12 17:11:27
    标记整理算法概念 标记整理算法也叫标记压缩算法。 由名字就可以看出先标记在整理,也就是第一个过程和标记清除算法的第一个过程一样。然后是整理,最后在清除。也可以叫做标记-整理-清除算法。标记整理算法在标记...
  • 复制算法和标记整理算法Every day is exactly the same. Even before the COVID lockdowns, in a sense. Each day, when I have a moment, I scroll through various feeds of information and save articles to ...
  • 简介:标记整理算法讲解以及分代收集算法讲解 标记整理算法解决了什么问题 复制收集算法在对象存活率较⾼时就要进⾏较多的复制操作,效率将会变低。更关键的是,如果不想浪费 50%的空间,就需要有额外的空间进⾏分配...
  • 标记整理算法解决来标记-清除算法的内存碎片化的问题,又解决了复制算法的两个Survivor区的问题,因为老年代的空间比较大,不可能采用复制算法,特别占用内存空间, 3、为什么要设置两个Survivor区 ...
  • Stop-the-world意味着 JVM由于要执行GC而停止了应用程序的执行,并且这种情形会在任何一种GC算法中发生。当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态直到GC任务完成。事实上,GC优化很多...
  • jvm:停止复制、标记清除、标记整理算法(垃圾回收)
  • 内存不足时,启动miniGC回收年轻代(标记整理算法)、FullGC时,回收年轻代、老年代(标记清楚算法)和元空间区
  • 标记整理标记:第一阶段:和标记清除算法一样,遍历所有GC-Roots 整理:移动所有存活对象,且按次序排列,将末端内存以后的对象全部清除。 标记整理
  • 这章节中我们主要是要去知道关于一些GC操作的算法。 在了解这些算法之前呢,需要大致的对堆中的分代简单了解一下。 在堆中,存在新生代跟老年代这么2块内存空间。一般而言:新生代所占用的内存...
  • 所以JVM的设计者在此基础上做了改进,标记压缩法(也称标记整理法)由此诞生。 算法原理 当成功标记出内存中的垃圾对象之后,标记压缩法会将所有的存活对象都移动到一个规整且连续的内存空间中,然后执行Full GC(老...
  • 这次我和各位分享GC最后两种算法,复制算法以及标记/整理算法。上一篇在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算法 ...
  • Serial Old 是 Serial 垃圾收集器年老代版本,它同样是个单线程的收集器,使用标记-整理算法, 这个收集器也主要是运行在Client默认的java虚拟机默认的年老代垃圾收集器。 在Server模式下,主要有两个用途: 1. 在...
  • 可能大家已经注意到了,前几节说的算法都是针对新生代的,那么本节我们来说说老年代的回收算法。  老年代与新生代不同,我们之前提到过,新生代中...一、标记整理算法  标记整理算法分为两步:  (1)、标记 ...
  • 上一节在复制算法中也了解到了,复制算法,它主要是针对新生代内存进行收集的一种算法,它有一个假定,每次回收,最后存活的概率是比较小的,一般是在百分之十左右,超过百分之十我们需要内存担保,就需要额外申请...
  • Java虚拟机(三):垃圾收集方式-分代,复制,标记整理算法 http://blog.csdn.net/pzxwhc/article/details/39184357 对于垃圾收集,解决3个问题: 一.哪部分内存需要回收 二.什么时候进行内存回收 ...
  • 假如你现在还在为自己的技术担忧,假如你现在想提升自己的工资,假如你想在职场上获得更多的话语权,假如你想顺利的度过35岁这个...标记/整理算法标记/清除算法非常相似,它也是分为两个阶段:标记和整理。下面L...
  • 转载于:https://blog.51cto.com/4837471/2324575
  • https://gentlezuo.github.io/2019/08/10/gc-%E6%A0%87%E8%AE%B0%E6%95%B4%E7%90%86%E7%AE%97%E6%B3%95%E7%9A%84%E4%B8%A4%E7%A7%8D%E5%AE%9E%E7%8E%B0/#more
  • 算法原理标记整理法首先需要标记出存活的对象,然后所谓的整理就是把这些存活的对象往一端推。然后就清除边界以外的区域即可。老年代的垃圾回收器(例如 Serial Old,Parallel Old,到那时不包括CMS,CMS使用的是...
  • 1.躲过15次GC之后进入老年代 系统刚启动时,创建的各种各样的对象,都是分配在年轻代里。 随着慢慢系统跑着跑着,年轻代满了,就会出发MinorGC ,可能1%的少量存活对像转移到空着的Survivor区中 ...
  • JVM垃圾回收算法(标记-清除、复制、标记-整理、分代收集)复制算法与标记/整理算法] 1.标记-清除算法 最基础的算法,分为两个阶段,“标记”和“清除” 原理: - 标记阶段:collector从mutator根对象开始进行...

空空如也

1 2 3 4 5 ... 20
收藏数 2,059
精华内容 823
关键字:

标记整理算法