从原来只知道-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