对象池回收对象_回收对象以提高性能
對(duì)象池回收對(duì)象
總覽在上一篇文章中,我說(shuō)過(guò)對(duì)象反序列化更快的原因是由于使用了回收對(duì)象。 由于兩個(gè)原因,這可能令人驚訝:1)相信如今創(chuàng)建對(duì)象是如此之快,無(wú)關(guān)緊要或與回收自己一樣快,2)默認(rèn)情況下,任何序列化庫(kù)都不使用回收。
本文探討了有無(wú)回收對(duì)象的反序列化。 創(chuàng)建對(duì)象不僅較慢,而且還會(huì)通過(guò)將數(shù)據(jù)從CPU緩存中推出來(lái)減慢程序的其余部分。
雖然這涉及反序列化,但解析文本或讀取二進(jìn)制文件也是如此,因?yàn)樗鶊?zhí)行的操作是相同的。
考試
在此測(cè)試中,我對(duì)1000個(gè)Price對(duì)象進(jìn)行反序列化,而且還對(duì)復(fù)制一塊數(shù)據(jù)花費(fèi)了多長(zhǎng)時(shí)間。 該副本表示反序列化后應(yīng)用程序可能必須執(zhí)行的工作。
測(cè)試定時(shí)進(jìn)行一百萬(wàn)次,并對(duì)結(jié)果進(jìn)行排序。 X軸顯示百分比計(jì)時(shí)。 例如,90%的值是90%的最差值(或10%的值更高)。
如您所見(jiàn),反序列化必須在創(chuàng)建對(duì)象時(shí)花費(fèi)更長(zhǎng)的時(shí)間,但是有時(shí)會(huì)花費(fèi)很多時(shí)間。 這也許并不令人驚訝,因?yàn)閯?chuàng)建對(duì)象意味著要做更多的工作,并且可能被GC延遲。 但是,令人驚訝的是復(fù)制數(shù)據(jù)塊的時(shí)間增加了。 這表明不僅反序列化速度變慢,而且需要數(shù)據(jù)緩存的任何工作也因此變慢。 (這幾乎是您在實(shí)際應(yīng)用程序中可能會(huì)執(zhí)行的任何操作)
性能測(cè)試很少向您顯示對(duì)應(yīng)用程序其余部分的影響。
更詳細(xì)
檢查較高的百分位數(shù)(最長(zhǎng)的時(shí)間),您可以看到,如果反序列化必須等待GC,則性能始終很差。
在最壞的情況下,副本的性能也會(huì)大大提高。
代碼
回收示例代碼
參考: Vanilla Java博客上的JCG合作伙伴 Peter Lawrey 回收對(duì)象以提高性能 。
相關(guān)文章 :- Java Secret:加載和卸載靜態(tài)字段
- C ++或Java,高頻交易哪個(gè)更快?
- 如何在Java中獲得類似于C的性能
- Java中的低GC:使用原語(yǔ)而不是包裝器
- Java教程和Android教程列表
翻譯自: https://www.javacodegeeks.com/2011/11/recycling-objects-to-improve.html
對(duì)象池回收對(duì)象
總結(jié)
以上是生活随笔為你收集整理的对象池回收对象_回收对象以提高性能的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。