精华内容
下载资源
问答
  • 上一篇:006-JVM-清除阶段算法之一:标记-清除算法 Mark-Sweep https://blog.csdn.net/fsjwin/article/details/111339604 1. 背景 为了解决标记 - 清除算法在垃圾收集效率方而的缺陷M.L.Minsky于1963 年发表了著名的...

    上一篇:006-JVM-清除阶段算法之一:标记-清除算法 Mark-Sweep https://blog.csdn.net/fsjwin/article/details/111339604

    1. 背景

    为了解决标记 - 清除算法在垃圾收集效率方而的缺陷M.L.Minsky于1963 年发表了著名的论文, “ 使用双存储区的Lisp语言垃圾收集器CA LISP Garbage CoIIector Algorithm Using SeriaI Secondary Storage 。M.L.Minsky 在该论文中描述的算法被人们称为复制(copying) 算法, 它也被M.L.Minsky 本人成功地引入到了Lisp语言的一个实现版本中。

    2. 核心思想

    将活着的内存空间分为两块, 每次只使用其中一块, 在垃圾回收时将正在使用的内存中的存活对象复制到未被使用的内存块中, 之后清除正在使用的内存块中的所有对象, 交换两个内存的角色, 最后完成垃圾回收。

    3. 优缺点

    在这里插入图片描述

    • 可以使用指针碰撞的算法,进行新对象的存放。
    • 优点:
      没有标记和清除过程, 实现简单, 运行高效
      复制过去以后保证空间的连续性, 不会出现“ 碎片” 问题。
    • 缺点:
      此算法的缺点也是很明显的, 就是需要两倍的内存空间。
      对于G1 这种分拆成为大量region 的GC , 复制而不是移动, 意味着GC 需要维护region之间对象引用关系, 不管是内存占用或者时间开销也不小。
    • 特别的:
      如果系统中的存活对象很多, 复制算法需要复制的存活对象数量就会很大。所以说存活的对象非常低才行,(应用:比如s0 s1区,朝生夕死)。

    4. 使用场景

    在新生代, 对常规应用的垃圾回收, 一次通常可以回收70% - 90%内存空间。回收性价比很高。所以现在的商业虚拟机都是用这种收集算法回收新生代。

    5. 复习-对象的访问定位Hotspot采用直接指针方式

    在这里插入图片描述

    6.总结

    比 Mark-Sweep有进步,但是二者均有市场。各有各的用处!

    下一篇:008-JVM-清除阶段算法之三:标记-压缩算法Mark-Compact https://blog.csdn.net/fsjwin/article/details/111342195

    展开全文
  • 一、二阶段提交算法的描述: 二阶段提交算法的成立基于以下假设: 该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进行网络通信。所有节点都采用预写式...

    一、二阶段提交算法的描述:

    二阶段提交算法的成立基于以下假设:

    1. 该分布式系统中,存在一个节点作为协调者(Coordinator),其他节点作为参与者(Cohorts)。且节点之间可以进行网络通信。
    2. 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上,即使节点损坏不会导致日志数据的消失。
    3. 所有节点不会永久性损坏,即使损坏后仍然可以恢复。

    以下对二阶段提交算法分阶段进行说明。

    第一阶段(提交请求阶段)

    1. 协调者节点向所有参与者节点询问是否可以执行提交操作,并开始等待各参与者节点的响应。
    2. 参与者节点执行询问发起为止的所有事务操作,并将Undo信息Redo信息写入日志。
    3. 各参与者节点响应协调者节点发起的询问。如果参与者节点的事务操作实际执行成功,则它返回一个"同意"消息;如果参与者节点的事务操作实际执行失败,则它返回一个"中止"消息。

    有时候,第一阶段也被称作投票阶段,即各参与者投票是否要继续接下来的提交操作。

    第二阶段(提交执行阶段)

    成功

    当协调者节点从所有参与者节点获得的相应消息都为"同意"时:

    1. 协调者节点向所有参与者节点发出"正式提交"的请求。
    2. 参与者节点正式完成操作,并释放在整个事务期间内占用的资源。
    3. 参与者节点向协调者节点发送"完成"消息。
    4. 协调者节点受到所有参与者节点反馈的"完成"消息后,完成事务。

    失败

    如果任一参与者节点在第一阶段返回的响应消息为"中止",或者 协调者节点在第一阶段的询问超时之前无法获取所有参与者节点的响应消息时:

    1. 协调者节点向所有参与者节点发出"回滚操作"的请求。
    2. 参与者节点利用之前写入的Undo信息执行回滚,并释放在整个事务期间内占用的资源。
    3. 参与者节点向协调者节点发送"回滚完成"消息。
    4. 协调者节点受到所有参与者节点反馈的"回滚完成"消息后,取消事务。

    有时候,第二阶段也被称作完成阶段,因为无论结果怎样,协调者都必须在此阶段结束当前事务

    以上的内容均来自于维基百科,可以参见:http://zh.wikipedia.org/wiki/%E4%BA%8C%E9%98%B6%E6%AE%B5%E6%8F%90%E4%BA%A4


    理解:

    1、二阶段提交的整个过程是比较容易理解的

    2、二阶段协议的理解必须建立在之前的假设之上,即日志写在可靠磁盘上,也就是说,基于日志的事务提交是可靠的。

    3、二阶段算法的最大缺陷是资源的阻塞,尤其是某个参与者在第一阶段执行过程中发生故障的时候,资源会长久性的阻塞。


    基于对二阶段问题的解决,三阶段提交在两阶段提交的第一阶段与第二阶段之间插入了一个准备阶段,并且引入了超时机制,为什么要加一个准备阶段:

    1、在投票阶段可以不用阻塞资源

    2、通常来讲,投票通过以后,准备阶段失败的概率会比较低,并且即使失败,也不影响数据的一致性。


    注意:无论是第二阶段提交还是第三阶段提交,其实都没有考虑事务提交阶段的失败情况,主要原因:1、基于之前的假设,日志是可靠的。2、对于网络的故障,即使丢失了提交命令,也可以根据相关的日志进行恢复,一般的分布式系统都会存在故障恢复的机制。


    最后,二阶段提交和三阶段提交都只是分布式一致性算法的基础算法,不是一种完全可靠的算法(有理论证明:在分布式网络环境下,不存在完全可靠的算法来保证数据的一致性,这部分理论下次分享),但是,通常的实现都会对这些算法做一些容错处理,以保证在发生故障的时候能够恢复数据的一致性。


    展开全文
  • 二阶段单纯形算法的MATLAB实现

    千次阅读 2020-04-02 15:16:15
    线性规划问题初始基可行解的求法——二阶段单纯形算法的MATLAB实现

    目录

    1. 单纯形算法的MATLAB实现
    2. 大M单纯形算法的MATLAB实现
    3. 二阶段单纯形算法的MATLAB实现
    4. 对偶单纯形算法的MATLAB实现

    一、理论

    懒得写了,自己看书
    与大M单纯形算法干的事是一样的,只是方法不同而已,解决了大M算法中,M取值可能出现的一些问题,取值过小会导致人工变量清不干净,过大会导致运算量增大,以及可能出现病态,影响求解精度,具体参看大M单纯形算法的MATLAB实现

    二、代码

    function [x,y,ResultFlag]=TwoStageSimplexAlgorithm(A,B,C,varargin)
    % 2020-4-2 臻orz
    %inputs:
    %   A:系数矩阵 m*n
    %   B:右端向量 m*1
    %   C:价格系数向量 n*1
    %alternative inputs:
    %   target:优化目标 0 ~ min; 1 ~ max;
    %   sign:约束条件符号向量 m*1 其中
    %       -1 ~ '<=';0 ~ '=';1 ~ '>'; 默认为0,即为等式
    %outputs:
    %   x:最优解 n*1
    %   y:最优值 num
    %   ResultFlag:是否找到最优解
    
    %check inputs
    ip = inputParser;
    ip.addRequired('A',@(x)validateattributes(x,{'double'},...
        {'finite','nonnan'},'BigMSimplexAlgorithm','A',1));
    ip.addRequired('B',@(x)validateattributes(x,{'double'},...
        {'size',[size(A,1),1]},'BigMSimplexAlgorithm','B',2));
    ip.addRequired('C',@(x)validateattributes(x,{'double'},...
        {'size',[size(A,2),1]},'BigMSimplexAlgorithm','C',3));
    ip.addParameter('target',0,@(x)validateattributes(x,...
        {'double'},{'scalar'},'BigMSimplexAlgorithm','target'));
    ip.addParameter('sign',zeros(size(A,1),1),@(x)validateattributes(x,...
        {'double'},{'size',[size(A,1),1]},'BigMSimplexAlgorithm','sign'));
    ip.parse(A,B,C,varargin{:});
    
    %initialize
    target = ip.Results.target;
    sign = ip.Results.sign;
    [m,n] = size(A);
    P = [];
    x = zeros(n,1);
    y = 0;
    ResultFlag = 0;
    j = 0;
    
    %standardization
    if target
        C = -C;%目标函数的转化
    end
    A(B<0,:) = -A(B<0,:);
    sign(B<0,:) = -sign(B<0,:);
    B = abs(B);%约束条件的转化
    for i = sign'
        j = j+1;
        switch i
            case -1%引入松弛变量
                a = zeros(m,1);a(j) = 1;
                A = [A a];
                C = [C;0];
            case 1%引入剩余变量
                a = zeros(m,1);a(j) = -1;
                A = [A a];
                C = [C;0];
        end
    end
    n1 = size(A,2);%记录转化标准型的未知量的个数
    C1 = C;
    C = zeros(n1,1);
    
    %找寻单位矩阵
    for i = 1:m
        a = 0;
        for j = find(A(i,:)==1)
            if sum(A(:,j)==0) == m-1
                P = [P j];
                a = 1;
            end
        end
        if ~a%若该行无基解,引入人工变量
            j = zeros(m,1);j(i) = 1;
            A = [A j];
            P = [P size(A,2)];
            C = [C;1];
        end
    end
    
    P = P(1:m);
    CB = C(P);%基变量对应的价值系数
    sigma = C'-CB'*inv(A(:,P))*A;
    sigma(P) = 0;
    SimplexAlgorithmIteration();%第一阶段迭代
    if y
        ResultFlag = 0;%如果返回目标值不为0,则不存在最优解
        return;
    end
    C = C1;
    A = A(:,1:size(C,1));
    CB = C(P);
    sigma = C'-CB'*inv(A(:,P))*A;
    sigma(P) = 0;
    SimplexAlgorithmIteration();%第二阶段迭代
    
        function []=SimplexAlgorithmIteration()
            while 1       
                if ~sum(sigma<0)
                    if sum(P>n1)%如果基变量含有人工变量
                        return;
                    end
                    x = zeros(n1,1);
                    x(P) = B;
                    x = x(1:n);%舍去引入的松弛变量与剩余变量
                    if target
                        y = -CB'*B;
                    else
                        y = CB'*B;
                    end
                    ResultFlag = 1;
                    return;
                end
                pivot_y = find(sigma==min(sigma));
                pivot_y = pivot_y(1);
                if sum(A(:,pivot_y)<0) == m
                    return;
                end
                theta_index = find(A(:,pivot_y)>0);
                theta = B(theta_index)./A(theta_index,pivot_y);
                pivot_x = theta_index(theta==min(theta));%确定主元
                pivot_x = pivot_x(1);
                P(pivot_x) = pivot_y;%更新P
                CB(pivot_x) = C(pivot_y);%更新CB
                %更新系数矩阵
                B(pivot_x) = B(pivot_x)/A(pivot_x,pivot_y);
                A(pivot_x,:) = A(pivot_x,:)./A(pivot_x,pivot_y);
                a = 1:m;
                a(pivot_x) = [];
                for i = a
                    B(i) = B(i)-A(i,pivot_y)*B(pivot_x);
                    A(i,:) = A(i,:)-A(i,pivot_y)*A(pivot_x,:);    
                end
                sigma = sigma-sigma(pivot_y)*A(pivot_x,:);%更新sigma
            end
        end
    end
    

    基本与大M算法调用方式一样

     [x,y,result]=TwoStageSimplexAlgorithm(A,B,C,'target',0,'sign',D);
    

    其中A,B,C分别为系数矩阵,右端向量,价格系数向量,注意B,C为列向量即可,后面的两个为可选输入
    ‘target’:为优化的目标为求最小值还是最大值,分别对应0和1,可以不设置,默认为0,即求最小值
    ‘sign’:为约束条件的符号,小于、等于、大于分别对应-1,0,1,也是一列向量,可以不设置,默认为0,即全为相等

    展开全文
  • 数据库二阶段归并排序算法

    千次阅读 2010-07-20 15:16:00
    <br />二阶段归并排序算法就是在排序的数据量很大,以至于内存中无法容纳的情况下,将排序的小表写入磁盘中,再依次从磁盘中读出并归并到大表中。当然,大表也需要逐步写入磁盘。 <br />二阶段归并排序...

    归并排序算法就是基于两个或以上已经排序的表,逐一比较每个表中排序字段的大小,归并为一个已经排好序的大表。其中,基础的小表通过内存中的快速排序等方法得到。

    二阶段归并排序算法就是在排序的数据量很大,以至于内存中无法容纳的情况下,将排序的小表写入磁盘中,再依次从磁盘中读出并归并到大表中。当然,大表也需要逐步写入磁盘。

    二阶段归并排序算法是数据库查询的一个基础技术。

    展开全文
  • 上一篇:007-JVM-清除阶段算法:复制算法Copying https://blog.csdn.net/fsjwin/article/details/111341315 前面两种标记收集算法和复制算法各有劣势,所以就有了此算法:标记-压缩算法Mark-Compact 1. 背景 ...
  • BIRCH算法本身上属于一种聚类算法,不过他克服了一些K-Means算法的缺点,比如说这个k的确定,因为这个算法事先本身就没有设定有多少个聚类。他是通过CF-Tree,(ClusterFeature-Tree)聚类特征树实现的。BIRCH的一个...
  • 上一篇:005-JVM-清除阶段:单纯的讨论垃圾回收算法 https://blog.csdn.net/fsjwin/article/details/111326292 先给出他的特点:位置不连续 产生碎片 1.产生背景 是一种非常基础和常见的垃圾收集算法,该算法被J....
  • 目标检测算法大致可分为两阶段(two stage)目标检测算法和一阶段(one stage)目标检测算法,在没有过多的tricks的情况下,两阶段的目标检测算法的检测精度是要比一阶段的目标检测算法精度高的。 原因分析: 其实...
  • Chameleon两阶段聚类算法

    万次阅读 2015-03-23 20:43:37
    参考文献:... 博客园(华夏35度) 作者:Orisun 数据挖掘算法-Chameleon算法.百度文库 我的算法库:https://github.com/linyiqun/lyq-algorithms-lib(里面可能有你正想要的算法算法介绍 本篇文
  • 算法学习的新阶段

    千次阅读 2016-04-10 06:48:55
    算法学习的新阶段最近忙得一塌糊涂,所以根本没时间总结整理学习成果了。之前刚开学不太忙时写了几篇都没写完,因为发现面前开启了一道道大门,想系统整理的东西太多了。于是时隔快两个月,先发一篇以作记录,系统...
  • 清除阶段(Sweep) 一个对象出现第一次没有被引用的情况,就会被加入到F-Queue队列等待执行finalize()方法判断是否有机会复活或者直接被当作垃圾回收。以便有足够的可用内存空间为新对象分配空间。 目前JVM有三种...
  • 五大常用算法:动态规划算法

    万次阅读 2018-03-14 12:52:53
    、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,...
  • 我们知道,垃圾是需要被回收的,但是怎么知道哪些是垃圾呢? 垃圾标记阶段:在堆里存放着几乎所有的Java 对象实例, 在GC 执行垃圾回收之前, 首先需要区分出内存中...判断对象存活一般有两种方式: 引用计数算法
  • 目标检测之单阶段和两阶段检测算法的对比

    千次阅读 多人点赞 2020-09-19 20:39:21
    阶段精度高但速度慢,单精度速度快但精度稍逊。 双阶段目标检测器采用了两段结构采样来处理类别不均衡的问题,rpn使正负样本更加均衡 使用了两阶段级联的方式来拟合bbox,先粗回归,再精调。 One stage detector ...
  • 只有对死亡对象的标记才会被GC释放空间,因此这个过程可以称为垃圾标记阶段。 简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。 判断对象的存活一般有两种方式:引用计数算法 和 ...
  • 上一篇: 004-JVM-Java中使用的标记阶段算法:可达性分析算法中GC Roots有哪些 https://blog.csdn.net/fsjwin/article/details/111322956 前面我们知道了垃圾,并且有办法找到垃圾,找到之后怎么办呢?干掉kill掉吧...
  • 实验 分类算法实验

    万次阅读 2017-12-24 16:32:06
    一.实验目的1.巩固4种基本的分类算法...、实验的硬件、软件平台硬件:计算机 软件:操作系统:WINDOWS 2000 应用软件:C,Java或者Matlab,Weka三、实验内容及步骤利用现有的分类器算法对文本数据集进行分类 实验
  • 上一篇:003-JVM-标记阶段算法:怎么确定垃圾 https://blog.csdn.net/fsjwin/article/details/111322134 gc roots有哪些呢?这个是面试题,也要背下来,如果不想进大厂的话,可以不背。 1. 常规gc roots JVM ...
  • ssh的登录过程-版本号协商阶段、密钥和算法协商阶段、认证阶段、会话请求阶段、会话交互阶段 主要讲 密钥和算法协商阶段: 客户请求连接-服务器将对应公钥、生成会话ID发给客户端、客户端生成会话密钥,并...
  • 阶段鲁棒优化及列和约束生成算法

    千次阅读 多人点赞 2020-10-18 21:06:47
    阶段鲁棒优化及列和约束生成算法1. 前言2. 两阶段RO3. Benders对偶割平面法 1. 前言 有同学私信我两阶段鲁棒优化的问题,自己之前主要研究单阶段的鲁棒优化,对于两阶段优化不太懂。查了点资料,通过翻译和自己的...
  • 进阶阶段(一)——Q-Learning算法

    千次阅读 2020-10-22 16:31:19
    进阶阶段(一)——Q-Learning算法 前言 一、pandas是什么? 、使用步骤 1.引入库 2.读入数据 总结 一、Q-Learning的更新Q值的公式 在基础阶段我们已经学习了基于模型的动态规划算法,了解了值迭代的...
  • 在前文了解到如何判断Java对象已经死亡,下面来了解Java虚拟机垃圾回收的几种常见算法:标记-清除算法、复制算法、标记-整理算法、分代收集算法、火车算法,介绍它们的算法思路,有什么优点和缺点,以及主要应用场景...
  • 图像值化算法总结

    万次阅读 2011-04-20 10:29:00
    回首前尘,尽是可耻的的往事... 2010年的很长时间都在做图像值化算法方面的工作,看了一些论文,总结了一些算法,总的来说,在这方面的算法特别多,大致可以分成两类,全局阈值值化和局部阈值值化。下面链接了比
  • 【学习笔记】目标检测算法(两阶段)

    千次阅读 2020-11-20 09:31:58
    阶段目标检测算法: R-CNN: 1.对图像进行Selective Search生成1K~2K个候选区域 2.将每个候选区域输入网络提取特征 3.将特征送入每一类的SVM分类器中,判读是否属于该类 4.使用回归器精细修正候选框的位置 具体的...
  • 在数据库应用中,常常采用“两阶段多路归并排序算法”来解决对海量数据的排序问题(这里的海量数据是指... 其中阶段1比较清楚,首先是将原本位于级存储(磁盘)中的数据,分批载入主存进行排序,再写入到级存储的新
  • ACM 算法 阶段性练习 (比较全面)

    千次阅读 2016-08-03 19:02:11
    对原文做了部分删改。...做到50行以内的程序不用调试、100行以内的分钟内调试成功. acm主要是考算法的,主要时间是花在思考算法上,不是花在写程序与debug上。  计划: 第一阶段: 练经典常用算法,同时
  • 文章目录算法定义算法的特性输入与输出有穷性确定性可行性算法设计的要求广义正确性狭义正确性(递增)可读性健壮性时间效率高和存储量低算法效率的度量方法事后统计法事前分析估算方法算法时间复杂度常见的时间...
  • 基于多阶段决策的动态规划算法

    千次阅读 2014-12-11 17:44:47
    在我们的现实生活中,存在着这样的活动过程:一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。它可以分为几个相互联系的阶段,在每个阶段,我们都需要为其作出决策,从而使总体上得到最优的结果。每次...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 413,931
精华内容 165,572
关键字:

二阶段算法