每個(gè)人都曾試圖在平淡的學(xué)習(xí)、工作和生活中寫一篇文章。寫作是培養(yǎng)人的觀察、聯(lián)想、想象、思維和記憶的重要手段。范文怎么寫才能發(fā)揮它最大的作用呢?這里我整理了一些優(yōu)秀的范文,希望對(duì)大家有所幫助,下面我們就來(lái)了解一下吧。
java堆內(nèi)存模型 java 堆內(nèi)存篇一
積極心態(tài)的十個(gè)故事
推薦度:
java程序員年終總結(jié)
推薦度:
年終總結(jié)寫法和要點(diǎn)
推薦度:
家訪記錄內(nèi)容要點(diǎn)
推薦度:
個(gè)人swot的分析
推薦度:
相關(guān)推薦
當(dāng)我開始學(xué)習(xí)java編程時(shí),我不知道什么是堆內(nèi)存或堆空間,我甚至不知道當(dāng)對(duì)象創(chuàng)建時(shí),它們被放在了哪里。當(dāng)我開始正式寫一些程序后,我會(huì)經(jīng)常遇到emoryerror的報(bào)錯(cuò),之后我才開始關(guān)注什么是堆內(nèi)存或者說堆空間(heap space)。對(duì)大多數(shù)程序員都經(jīng)歷過這樣的過程,因?yàn)閷W(xué)習(xí)一種語(yǔ)言是非常容易來(lái)的,但是學(xué)習(xí)基礎(chǔ)是非常難的,因?yàn)闆]有什么特定的流程讓你學(xué)習(xí)編程的每個(gè)基礎(chǔ),使你發(fā)覺編程的秘訣。
對(duì)于程序員來(lái)說,知道堆空間,設(shè)置堆空間,處理堆空間的outofmemoryerror錯(cuò)誤,分析heap dump是非常重要的。這個(gè)關(guān)于java堆的教程是給我剛開始學(xué)編程的兄弟看的。如果你知道這個(gè)基礎(chǔ)知識(shí)或者知道底層發(fā)生了什么,當(dāng)然可能幫助不是那么大。除非你知道了對(duì)象被創(chuàng)建在堆中,否則你不會(huì)意識(shí)到outofmemoryerror是發(fā)生在堆空間中的。我盡可能的將我所知道的所有關(guān)于堆的知識(shí)都寫下來(lái)了,也希望你們能夠盡可能多的貢獻(xiàn)和分享你的知識(shí),以便可以讓其他人也受益。
當(dāng)java程序開始運(yùn)行時(shí),jvm會(huì)從操作系統(tǒng)獲取一些內(nèi)存。jvm使用這些內(nèi)存,這些內(nèi)存的一部分就是堆內(nèi)存。堆內(nèi)存通常在存儲(chǔ)地址的底層,向上排列。當(dāng)一個(gè)對(duì)象通過new關(guān)鍵字或通過其他方式創(chuàng)建后,對(duì)象從堆中獲得內(nèi)存。當(dāng)對(duì)象不再使用了,被當(dāng)做垃圾回收掉后,這些內(nèi)存又重新回到堆內(nèi)存中。要學(xué)習(xí)垃圾回收,請(qǐng)閱讀“java中垃圾回收的工作原理”。
在大多數(shù)32位機(jī)、sun的jvm上,java的堆空間默認(rèn)的大小為128mb,但也有例外,例如在32未solaris操作系統(tǒng)(sparc平臺(tái)版本)上,默認(rèn)的最大堆空間和起始堆空間大小為 -xms=3670k 和 -xmx=64m.對(duì)于64位操作系統(tǒng),一般堆空間大小增加約30%.但你使用java 1.5的throughput垃圾回收器,默認(rèn)最大的堆大小為物理內(nèi)存的四分之一,而起始堆大小為物理內(nèi)存的十六分之一。要想知道默認(rèn)的堆大小的方法,可以用默認(rèn)的設(shè)置參數(shù)打開一個(gè)程序,使用jconsole(jdk 1.5之后都支持)來(lái)查看,在vm summary頁(yè)面可以看到最大的堆大小。
用這種方法你可以根據(jù)你的程序的需要來(lái)改變堆內(nèi)存大小,我強(qiáng)烈建議采用這種方法而不是默認(rèn)值。如果你的程序很大,有很多對(duì)象需要被創(chuàng)建的話,你可以用-xms and -xmx這兩個(gè)參數(shù)來(lái)改變堆內(nèi)存的大小。xms表示起始的堆內(nèi)存大小,xmx表示最大的堆內(nèi)存的大小。另外有一個(gè)參數(shù) -xmn,它表示new generation(后面會(huì)提到)的大小。有一件事你需要注意,你不能任意改變堆內(nèi)存的大小,你只能在啟動(dòng)jvm時(shí)設(shè)定它。
我們知道對(duì)象創(chuàng)建在堆內(nèi)存中,垃圾回收這樣一個(gè)進(jìn)程,它將已死對(duì)象清除出堆空間,并將這些內(nèi)存再還給堆。為了給垃圾回收器使用,堆主要分成三個(gè)區(qū)域,分別叫作new generation,old generation或叫tenured generation,以及perm generation是用來(lái)存放新建的對(duì)象的空間,在對(duì)象新建的時(shí)候被使用。如果長(zhǎng)時(shí)間還使用的話,它們會(huì)被垃圾回收器移動(dòng)到old generation(或叫tenured generation)。perm space是jvm存放meta數(shù)據(jù)的地方,例如類,方法,字符串池和類級(jí)別的詳細(xì)信息。你可以查看“java中垃圾回收的`工作原理”來(lái)獲得更多關(guān)于堆和垃圾回收的信息。
當(dāng)jvm啟動(dòng)時(shí),使用了-xms 參數(shù)設(shè)置的對(duì)內(nèi)存。當(dāng)程序繼續(xù)進(jìn)行,創(chuàng)建更多對(duì)象,jvm開始擴(kuò)大堆內(nèi)存以容納更多對(duì)象。jvm也會(huì)使用垃圾回收器來(lái)回收內(nèi)存。當(dāng)快達(dá)到-xmx設(shè)置的最大堆內(nèi)存時(shí),如果沒有更多的內(nèi)存可被分配給新對(duì)象的話,emoryerror,你的程序就會(huì)當(dāng)?shù)?。在拋?outofmemoryerror之前,jvm會(huì)嘗試著用垃圾回收器來(lái)釋放足夠的空間,但是發(fā)現(xiàn)仍舊沒有足夠的空間時(shí),就會(huì)拋出這個(gè)錯(cuò)誤。為了解決這個(gè)問題,你需要清楚你的程序?qū)ο蟮男畔?,例如,你?chuàng)建了哪些對(duì)象,哪些對(duì)象占用了多少空間等等。你可以使用profiler或者堆分析器來(lái)處理 outofmemoryerror錯(cuò)誤?!癳moryerror: java heap space”表示堆沒有足夠的空間了,不能繼續(xù)擴(kuò)大了?!癳moryerror: permgen space”表示permanent generation已經(jīng)裝滿了,你的程序不能再裝在類或者再分配一個(gè)字符串了。
heap dump是在某一時(shí)間對(duì)java堆內(nèi)存的快照。它對(duì)于分析堆內(nèi)存或處理內(nèi)存泄露和emoryerror錯(cuò)誤是非常有用的。在jdk中有一些工具可以幫你獲取heap dump,也有一些堆分析工具來(lái)幫你分析heap dump.你可以用“jmap”來(lái)獲取heap dump,它幫你創(chuàng)建heap dump文件,然后,你可以用“jhat”(堆分析工具)來(lái)分析這些heap dump.
1、java堆內(nèi)存是操作系統(tǒng)分配給jvm的內(nèi)存的一部分。
2、當(dāng)我們創(chuàng)建對(duì)象時(shí),它們存儲(chǔ)在java堆內(nèi)存中。
3、為了便于垃圾回收,java堆空間分成三個(gè)區(qū)域,分別叫作new generation, old generation或叫作tenured generation,還有perm space.
4、你可以通過用jvm的命令行選項(xiàng) -xms, -xmx, -xmn來(lái)調(diào)整java堆空間的大小。不要忘了在大小后面加上“m”或者“g”來(lái)表示單位。舉個(gè)例子,你可以用 -xmx256m來(lái)設(shè)置堆內(nèi)存最大的大小為256mb.
5、你可以用jconsole或者 ory(), emory(), mory()來(lái)查看java中堆內(nèi)存的大小。
6、你可以使用命令“jmap”來(lái)獲得heap dump,用“jhat”來(lái)分析heap dump.
7、java堆空間不同于??臻g,棧空間是用來(lái)儲(chǔ)存調(diào)用棧和局部變量的。
8、java垃圾回收器是用來(lái)將死掉的對(duì)象(不再使用的對(duì)象)所占用的內(nèi)存回收回來(lái),再釋放到j(luò)ava堆空間中。
9、emoryerror時(shí),不要緊張,有時(shí)候僅僅增加堆空間就可以了,但如果經(jīng)常出現(xiàn)的話,就要看看java程序中是不是存在內(nèi)存泄露了。
10、請(qǐng)使用profiler和heap dump分析工具來(lái)查看java堆空間,可以查看給每個(gè)對(duì)象分配了多少內(nèi)存。
s("content_relate");【基于java堆內(nèi)存的十個(gè)要點(diǎn)的總結(jié)分析】相關(guān)文章:
分析java內(nèi)存分配的棧和堆以及常量池
12-01
java內(nèi)存的詳細(xì)介紹
12-01
關(guān)于java內(nèi)存查看與分析詳解
12-03
java內(nèi)存區(qū)域的使用詳解
12-02
關(guān)于java中堆和棧的區(qū)別
11-27
java內(nèi)存溢出的解決方法
12-03
學(xué)好java語(yǔ)言的要點(diǎn)
09-26
如何解決java內(nèi)存泄漏的問題
12-02
java語(yǔ)言學(xué)習(xí)的要點(diǎn)
09-29