学会这个2021不一样的感觉学Java性能之 垃圾收集算法

从原来只知道-Xms、-Xmx是设置内存的,到现在稍微理解了一些堆内存等Java虚拟机的一些知识。明白了技术这一个东西还是得要有输入才能实践,原理与实践要相辅相成,后续把JVM的监控好好总结一下。以前做了很多的关于JVM方面的监控,仅仅只是做了,但是不知道是什么意思,不知道怎么分析。

垃圾收集算法

一、标记(清除算法)

最基础的收集算法是"标记-清除"(Mark-Sweep)算法,算法分为"标记"和"清除"两个阶段。首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象。

不足点:
1)效率问题,标记和清除两个过程的效率都不高。
2)空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片太多会导致以后再程序运行过程中需要分配较大的对象时,无法找到足够的连续内存而不得不提前触发另一次的垃圾收集动作。

2、复制算法

将可用内存按容量划分为相等的两块,每次只使用其中的一块。当这一块的内存用完了,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。这样使得每次都是对整个半区进行内存回收,内存分配时也就不用考虑内存碎片等复杂情况,只要移动堆指针,按顺序分配即可,实现简单,运行高效。

不足:将内存缩小为了原来的一半,成本太高。

3、复制收集

复制收集算法在对象存活率较高时就要进行较多的复制操作,效率将会变低。更关键的是,不过不想浪费50%的空间,就需要有额外的空间进行担保分配,以应对被使用的内存中所有对象都100%存活的极端情况,所以在老年代一般不能直接选用这种算法。

根据老年代的特点,提出了“标记-整理”(Mark-Compact)算法,标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是所让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

4、分代回收

当前商业虚拟机的垃圾收集都采用“分代收集”(Generational Collection)算法,这种算法并没有什么新的思想,只是根据对象存活的周期将内存划分为几块。一般把Java堆划分为新生代和老年代,这样可以根据各个年代的特点采用最适当的收集算法。

1)在新生代中,每次收集时都发现有大量对象死去,只有少量存活,就可以选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。
2)老年代中因为对象存活率高、没有额外的空间进行担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。

!http://iask.sina.com.cn/b/1Idu7EJWZDTS.html
http://iask.sina.com.cn/b/1Igrk92Pujhi.html
http://iask.sina.com.cn/b/1IhfHT1uw2jq.html
http://iask.sina.com.cn/b/1IfkCJVKwA0I.html
http://iask.sina.com.cn/b/1IeFp5V148cA.html
http://iask.sina.com.cn/b/1IgSNTaVi176.html
http://iask.sina.com.cn/b/1IdgnZ7sIm0A.html
http://iask.sina.com.cn/b/1IgXnNgEO7wM.html
http://iask.sina.com.cn/b/1IcBa7x9etHu.html
http://iask.sina.com.cn/b/1Ih1XZY9Cvne.html
http://iask.sina.com.cn/b/1If6SMJTOZTS.html
http://iask.sina.com.cn/b/1IcY3ZzWysP2.html
http://iask.sina.com.cn/b/1IdMrIrWMcu8.html
http://iask.sina.com.cn/b/1IcFhHGaHHnS.html
http://iask.sina.com.cn/b/1IawsTNsJlms.html
http://iask.sina.com.cn/b/1IdtFhLnWHmY.html
http://iask.sina.com.cn/b/1Ia9z6fM6v1i.html
http://iask.sina.com.cn/b/1IbDaoATqYDW.html
http://iask.sina.com.cn/b/1IeAmKgUNA2U.html
http://iask.sina.com.cn/b/1Iae94IjYV2c.html
http://iask.sina.com.cn/b/1IfoKmOWEjs8.html
http://iask.sina.com.cn/b/1IdfVB3dLJdG.html
http://iask.sina.com.cn/b/1IcT1ETLGIAk.html
http://iask.sina.com.cn/b/1Ia0pjNawIq0.html
http://iask.sina.com.cn/b/1Ifb0l9Jx1Ew.html
http://iask.sina.com.cn/b/1Ia4ZfuexxRa.html
http://iask.sina.com.cn/b/1IcinWo5OdIw.html
http://iask.sina.com.cn/b/1Ibbe5RHNZRG.html
http://iask.sina.com.cn/b/1IbV1JfDvYyU.html
http://iask.sina.com.cn/b/1IdoD7pWL8dK.html
http://iask.sina.com.cn/b/1Ied0CcBAO3a.html
http://iask.sina.com.cn/b/1IaAAEh0lyZS.html
http://iask.sina.com.cn/b/1IdxMSzFyROI.html
http://iask.sina.com.cn/b/1IguZmJVpWji.html
http://iask.sina.com.cn/b/1IadGKzni1di.html
http://iask.sina.com.cn/b/1IaXurOlZGb2.html
http://iask.sina.com.cn/b/1IeEuiph1hr6.html
http://iask.sina.com.cn/b/1IaigKD8TzGs.html
http://iask.sina.com.cn/b/1IfsRUZudOcQ.html
http://iask.sina.com.cn/b/1IcAfq3NYFIw.html
http://iask.sina.com.cn/b/1IcdlI52TCKU.html
http://iask.sina.com.cn/b/1Ieh5kelNv9a.html
http://iask.sina.com.cn/b/1IhehOxeiawA.html
http://iask.sina.com.cn/b/1IbosXlvnN8M.html
http://iask.sina.com.cn/b/1IaFaBhB41oo.html
http://iask.sina.com.cn/b/1IamlxiXpJBG.html
http://iask.sina.com.cn/b/1IbaJ0LRkDSY.html
http://iask.sina.com.cn/b/1IcEkdjKz3Hu.html
http://iask.sina.com.cn/b/1Ido7F5ggiyo.html
http://iask.sina.com.cn/b/1IbfiOmOulNq.html
http://iask.sina.com.cn/b/1IecvicdJLLS.html
http://iask.sina.com.cn/b/1IbCcB6WDqc4.html
http://iask.sina.com.cn/b/1IbGMMCduJGY.html
http://iask.sina.com.cn/b/1IahLufCVvgE.html
http://iask.sina.com.cn/b/1IaEcYruWOUQ.html
http://iask.sina.com.cn/b/1Ihipj0yD1Bq.html
http://iask.sina.com.cn/b/1I9ZrzEITo2o.html
http://iask.sina.com.cn/b/1Ieqf7GD3wL2.html
http://iask.sina.com.cn/b/1Ifa2TbLiwFe.html
http://iask.sina.com.cn/b/1IfB4jfIRf8o.html
http://iask.sina.com.cn/b/1Iav2ZZyar9O.html
http://iask.sina.com.cn/b/1IazCToIkvZq.html
http://iask.sina.com.cn/b/1IdwPqVsg7Fi.html
http://iask.sina.com.cn/b/1Ib16vIa5tcE.html
http://iask.sina.com.cn/b/1Ih05xCDNcpm.html
http://iask.sina.com.cn/b/1Ig2y5z3GIUY.html
http://iask.sina.com.cn/b/1IcbYytPBorG.html
http://iask.sina.com.cn/b/1IdFzBF1k1EU.html
http://iask.sina.com.cn/b/1If9aUvGtXtO.html
http://iask.sina.com.cn/b/1IbwKJdI5EFS.html
http://iask.sina.com.cn/b/1IekkSjvaxE8.html
http://iask.sina.com.cn/b/1IcrBa11wFFq.html
http://iask.sina.com.cn/b/1IbMnq1aiS7y.html
http://iask.sina.com.cn/b/1IeJzQNJDVbm.html
http://iask.sina.com.cn/b/1IgWYCjzXTCk.html
http://iask.sina.com.cn/b/1Ih1yGDBSnBa.html
http://iask.sina.com.cn/b/1Igml6EQaAS8.html
http://iask.sina.com.cn/b/1IbptEXnhHqs.html
http://iask.sina.com.cn/b/1IcT4JIVgI0s.html
http://iask.sina.com.cn/b/1Ia0srBSZnI0.html
http://iask.sina.com.cn/b/1Ia52mSKMEMY.html
http://iask.sina.com.cn/b/1IbDdrBoShJ2.html
http://iask.sina.com.cn/b/1Id6OAYOt2R6.html
http://iask.sina.com.cn/b/1IfC4Y2oNvwE.html
http://iask.sina.com.cn/b/1IbfRnMmoaFC.html
http://iask.sina.com.cn/b/1IcJsqCOgJVW.html
http://iask.sina.com.cn/b/1IdxQbv8LgJe.html
http://iask.sina.com.cn/b/1IaFFVquJhRa.html
http://iask.sina.com.cn/b/1IeJ7lquzD52.html
http://iask.sina.com.cn/b/1Ifxv2zpNLnC.html
http://iask.sina.com.cn/b/1IartJZOsYZ6.html
http://iask.sina.com.cn/b/1IemdyVjAmwk.html
http://iask.sina.com.cn/b/1IbCL8yeQEJm.html
http://iask.sina.com.cn/b/1IbQ2GNgOHYo.html
http://iask.sina.com.cn/b/1IamrpwQtBuI.html
http://iask.sina.com.cn/b/1IeVu7J3XR8w.html
http://iask.sina.com.cn/b/1IebGsUIw8eo.html
http://iask.sina.com.cn/b/1IauGoJ7NcN6.html
http://iask.sina.com.cn/b/1IgkvqNqkBoo.html
http://iask.sina.com.cn/b/1Ie76wl4IoIk.html
http://iask.sina.com.cn/b/1Ifw7Ky37IPq.html
http://iask.sina.com.cn/b/1IbP7Vu5TfRO.html
http://iask.sina.com.cn/b/1IfrxNgKi432.html
http://iask.sina.com.cn/b/1IeHK86zknvK.html
http://iask.sina.com.cn/b/1IdXWELUucZS.html
http://iask.sina.com.cn/b/1Ib0KdDvDciU.html
http://iask.sina.com.cn/b/1IaWaoO2p27a.html
http://iask.sina.com.cn/b/1Id9z06TxHNG.html
http://iask.sina.com.cn/b/1Ia3cGxR1srW.html
http://iask.sina.com.cn/b/1Id0pgG2coqM.html
http://iask.sina.com.cn/b/1IfdNQ2IeGzG.html
http://iask.sina.com.cn/b/1I9YCOobQ90E.html
http://iask.sina.com.cn/b/1Icc1EZusFqc.html
http://iask.sina.com.cn/b/1IcVPgX0qTUw.html
http://iask.sina.com.cn/b/1IeV1NwX0QQ4.html
http://iask.sina.com.cn/b/1IcMcUmMj4le.html
http://iask.sina.com.cn/b/1IfJpaLkWfgM.html
http://iask.sina.com.cn/b/1IbTfpuaw2G8.html
http://iask.sina.com.cn/b/1IcD31rGuhas.html
http://iask.sina.com.cn/b/1IabUlIsFuOg.html
http://iask.sina.com.cn/b/1Id96MlcVsJK.html
http://iask.sina.com.cn/b/1IbK5kzCJ3Mo.html
http://iask.sina.com.cn/b/1Iey7SoO7VJG.html
http://iask.sina.com.cn/b/1IdJKfhQEswc.html
http://iask.sina.com.cn/b/1IfX950zu4QQ.html
http://iask.sina.com.cn/b/1IaMxSH499FO.html
http://iask.sina.com.cn/b/1IeoXSIs2GgA.html
http://iask.sina.com.cn/b/1Ihh88glNIGU.html
http://iask.sina.com.cn/b/1IgxksMwFRSY.html
http://iask.sina.com.cn/b/1IcQkyO1TPLm.html
http://iask.sina.com.cn/b/1IdA85EZTCAQ.html
http://iask.sina.com.cn/b/1IfIWV6R0Uhe.html
http://iask.sina.com.cn/b/1IeflOernFVO.html
http://iask.sina.com.cn/b/1IfDXqvdfoPa.html
http://iask.sina.com.cn/b/1IeYJGShdsAI.html
http://iask.sina.com.cn/b/1Igsl21VU2Hq.html
http://iask.sina.com.cn/b/1IeGpTzn2MEc.html
http://iask.sina.com.cn/b/1IdlYEyG80BC.html
http://iask.sina.com.cn/b/1Ibd9Kl0Sldi.html
http://iask.sina.com.cn/b/1IbWXlXN0vKI.html
http://iask.sina.com.cn/b/1IaQfTh0pV6c.html
http://iask.sina.com.cn/b/1Id3EOtcpQp6.html
http://iask.sina.com.cn/b/1Iab2mlbo5R2.html
http://iask.sina.com.cn/b/1IbEDnfyVS8Y.html
http://iask.sina.com.cn/b/1IeBQ1Ws8pEE.html
http://iask.sina.com.cn/b/1Iej3B0IBVz6.html
http://iask.sina.com.cn/b/1IgBuPmMi0dC.html
http://iask.sina.com.cn/b/1Iegas3gbMXG.html
http://iask.sina.com.cn/b/1IcR9i6jSfLu.html
http://iask.sina.com.cn/b/1Ide2XfSZEPG.html
http://iask.sina.com.cn/b/1IeMegBIqbJq.html
http://iask.sina.com.cn/b/1Ib9O5lOC5IM.html
http://iask.sina.com.cn/b/1Id0jhY1MQk4.html
http://iask.sina.com.cn/b/1IeyugwK7Jh2.html
http://iask.sina.com.cn/b/1Ig25vlrx00Q.html
http://iask.sina.com.cn/b/1IacgydRSXW4.html
http://iask.sina.com.cn/b/1IcH4BjZWkmo.html
http://iask.sina.com.cn/b/1IeUthJihR8w.html
http://iask.sina.com.cn/b/1IeZ3cRxrxkE.html
http://iask.sina.com.cn/b/1IctkFVgDaDq.html
http://iask.sina.com.cn/b/1Idd8bKVqRVW.html
http://iask.sina.com.cn/b/1IgakNGyj00k.html
http://iask.sina.com.cn/b/1IakvKzQTCbO.html
http://iask.sina.com.cn/b/1Ib4jmdIHGpu.html
http://iask.sina.com.cn/b/1IdNM1j6R0RK.html
http://iask.sina.com.cn/b/1Ie2foekOWZu.html
http://iask.sina.com.cn/b/h8Hd6hMZpdec.html

注意:你不能在买入股票前卖出股票。

示例 1:

输入: [7,1,5,3,6,4]

输出: 5

解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。
    注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。

示例 2:

输入: [7,6,4,3,1]

输出: 0

解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。

来源:LeetCode

剑指 offer 64:https://leetcode-cn.com/problems/gu-piao-de-zui-da-li-run-lcof/submissions/
难度:中

leetcode 121:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/
难度:简单

解题思路
根据题目的意思我们知道,我们只有一次交易的机会,也就是买一次再卖一次,但同时要保证收益最大化。那我们本能的直觉是在最低的价格买入,再在最高的价格卖出就好了,如下图所示:

image.png

但这有一个问题,就是我们要保证最高价格要在最低的价格之后,因为我们必须在购买了股票之后才能卖出,而不是相反的顺序,这就让问题变的复杂了。

但此刻我们想到了一个最直接也是最笨的一个方法,那就是用暴力穷举法,我们使用两层循环,依次在每个节点买入,然后再在之后的所有节点卖出,这样来计算节点间的差值(收益),如果此差值大于当前最高收益,就将此值设置为当前最高收益,这样循环完,我们就能获得最大收益了。如下图所示:

image.png

方法一:暴力法
有了上面的思路,接下来我们用代码实现一下:

class Solution {
    public int maxProfit(int[] prices) {
        int mp = 0; // 最高收益
        for (int i = 0; i < prices.length; i++) {
            for (int j = i + 1; j < prices.length; j++) {
                int item = prices[j] - prices[i];
                if (item > mp) mp = item;
            }
        }
        return mp;
    }
}
可以看出代码还是很简单的,但别高兴得太早,我们来看它在 leetcode 上的表现:
image.png

复杂度分析
时间复杂度:O(n^2),循环运行 n(n-1)/2 次。
空间复杂度:O(1),只使用了常数位的变量。
真是一顿操作猛如虎,最终击败百分之五!如果用这种代码去面试的话,估计只能回去等通知了。那有没有更好的方法呢?答案是肯定的,继续往下看。

方法二:遍历一次
对于这道题我们其实可以使用一次循环来实现,先来看下面的这张折线图:

image.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值