国产精品无码一区二区三区太,亚洲一线产区二线产区区别,欧美A区,人妻jealousvue人妻

×

JVM虛擬機(jī)調(diào)優(yōu)簡(jiǎn)單分析

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-04-23 14:31:06

內(nèi)存溢出和內(nèi)存泄漏是什么,是怎么發(fā)生的的呢??jī)?nèi)存溢出和內(nèi)存泄漏它們的區(qū)別是什么?應(yīng)該怎么做防護(hù)措施呢?小編接介紹一下吧。

 20150619_8403fcf6dfb222b5192aXUt8c7bgg9Ko.jpg

        內(nèi)存溢出和內(nèi)存泄漏是什么,是怎么發(fā)生的的呢??jī)?nèi)存溢出和內(nèi)存泄漏它們的區(qū)別是什么?應(yīng)該怎么做防護(hù)措施呢?小編接介紹一下吧。

  內(nèi)存溢出和內(nèi)存泄漏有什么區(qū)別:

  內(nèi)存泄漏是由于使用不當(dāng),把一部分內(nèi)存“丟掉了”,導(dǎo)致這部分內(nèi)存不可用。

  當(dāng)在堆中創(chuàng)建了對(duì)象,后來(lái)沒(méi)有使用這個(gè)對(duì)象了,又沒(méi)有把整個(gè)對(duì)象的相關(guān)引用設(shè)為null。此時(shí)垃圾收集器會(huì)認(rèn)為這個(gè)對(duì)象是需要的,就不會(huì)清理這部分內(nèi)存。這就會(huì)導(dǎo)致這部分內(nèi)存不可用。

  所以?xún)?nèi)存泄漏會(huì)導(dǎo)致可用的內(nèi)存減少,進(jìn)而會(huì)導(dǎo)致內(nèi)存溢出。

  內(nèi)存泄露問(wèn)題排查方法:

  用visualVM工具分析堆快照 ,如果發(fā)生內(nèi)存泄漏:

  step1:找出泄漏的對(duì)象

  step2:找到泄漏對(duì)象的GC Root

  step3:根據(jù)泄漏對(duì)象和GC Root找到導(dǎo)致內(nèi)存泄漏的代碼

  step4:想法設(shè)法解除泄漏對(duì)象與GCRoot的連接

  如果不存在泄漏:

  看下是否能增大jvm堆的最大容量,優(yōu)化程序,減小對(duì)象的生命周期

  前期準(zhǔn)備:

  當(dāng)發(fā)生堆溢出的時(shí)候,可以讓程序在崩潰時(shí)產(chǎn)生一份堆內(nèi)存快照

  產(chǎn)生堆內(nèi)存快照的方法:

  給jvm加上參數(shù)XX:+HeapDumpOnOutofMemoryError,這樣就會(huì)在程序崩潰的時(shí)候,產(chǎn)生一份堆內(nèi)存快照

  分析堆內(nèi)存快照我建議用jdk自帶的可視化監(jiān)視工具visualVM,位置在jdk安裝目錄下的bin,如果是在Linux環(huán)境的話(huà),可以把快照傳到window。因?yàn)榉治龉ぞ邥?huì)占用很大的內(nèi)存,不建議在服務(wù)端進(jìn)行分析。

  解決方法:

  針對(duì)StackOverflowError:

  1.首先棧溢出會(huì)輸出異常信息,根據(jù)信息查看對(duì)應(yīng)的方法調(diào)用是否出現(xiàn)無(wú)限調(diào)用、或者棧幀過(guò)大等代碼邏輯上的問(wèn)題,通過(guò)修改代碼邏輯解決;

  2.如果確確實(shí)實(shí)需要更大的棧容量,可以檢查并調(diào)大棧容量:-Xss16m。

  內(nèi)存泄露的跡象:老年代每次垃圾回收的時(shí)候,總是不能全部回收,一次比一次占用的內(nèi)存多。

  針對(duì)OutOfMemoryError:

  首先檢查是否創(chuàng)建過(guò)多的線(xiàn)程,減少線(xiàn)程數(shù)

  有了堆信息查看方面的功能,我們一般可以順利解決以下問(wèn)題:

  --年老代年輕代大小劃分是否合理

  --內(nèi)存泄漏

  --垃圾回收算法設(shè)置是否合理

  內(nèi)存泄漏的現(xiàn)象:

  常常地,程序內(nèi)存泄漏的最初跡象發(fā)生在出錯(cuò)之后,在你的程序中得到一個(gè)OutOfMemoryError。

  這種典型的情況發(fā)生在產(chǎn)品環(huán)境中,而在那里,你希望內(nèi)存泄漏盡可能的少,調(diào)試的可能性也達(dá)到最小。

  一個(gè)OutOfMemoryError常常是內(nèi)存泄漏的一個(gè)標(biāo)志,有可能應(yīng)用程序的確用了太多的內(nèi)存;這個(gè)時(shí)候,你既不能增加JVM的堆的數(shù)量,也不能改變你的程序而使得他減少內(nèi)存使用。

  但是,在大多數(shù)情況下,一個(gè)OutOfMemoryError是內(nèi)存泄漏的標(biāo)志。一個(gè)解決辦法就是繼續(xù)監(jiān)聽(tīng)GC的活動(dòng),看看隨時(shí)間的流逝,內(nèi)存使用量是否會(huì)增加,如果有,程序中一定存在內(nèi)存泄漏。

<div

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢(xún)獲取折扣

Loading