奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

java中堆和棧的區(qū)別

時間:2025-01-13 21:11:02 java語言 我要投稿

關(guān)于java中堆和棧的區(qū)別

  當一個人開始學習Java或者其他編程語言的時候,會接觸到堆和棧,由于一開始沒有明確清晰的說明解釋,很多人會產(chǎn)生很多疑問,什么是堆,什么是棧,堆和棧有什么區(qū)別?更糟糕的是,Java中存在棧這樣一個后進先出(Last In First Out)的順序的數(shù)據(jù)結(jié)構(gòu),這就是java.util.Stack。這種情況下,不免讓很多人更加費解前面的問題。事實上,堆和棧都是內(nèi)存中的一部分,有著不同的作用,而且一個程序需要在這片區(qū)域上分配內(nèi)存。眾所周知,所有的Java程序都運行在JVM虛擬機內(nèi)部,我們這里介紹的自然是JVM(虛擬)內(nèi)存中的堆和棧。

  區(qū)別

  java中堆和棧的區(qū)別自然是面試中的常見問題,下面幾點就是其具體的區(qū)別

  各司其職

  最主要的區(qū)別就是棧內(nèi)存用來存儲局部變量和方法調(diào)用。

  而堆內(nèi)存用來存儲Java中的對象。無論是成員變量,局部變量,還是類變量,它們指向的對象都存儲在堆內(nèi)存中。

  獨有還是共享

  棧內(nèi)存歸屬于單個線程,每個線程都會有一個棧內(nèi)存,其存儲的變量只能在其所屬線程中可見,即棧內(nèi)存可以理解成線程的私有內(nèi)存。

  而堆內(nèi)存中的對象對所有線程可見。堆內(nèi)存中的對象可以被所有線程訪問。

  異常錯誤

  如果棧內(nèi)存沒有可用的空間存儲方法調(diào)用和局部變量,JVM會拋出java.lang.StackOverFlowError。

  而如果是堆內(nèi)存沒有可用的空間存儲生成的對象,JVM會拋出java.lang.OutOfMemoryError。

  空間大小

  棧的內(nèi)存要遠遠小于堆內(nèi)存,如果你使用遞歸的話,那么你的棧很快就會充滿。如果遞歸沒有及時跳出,很可能發(fā)生StackOverFlowError問題。

  你可以通過-Xss選項設(shè)置棧內(nèi)存的大小。-Xms選項可以設(shè)置堆的開始時的大小,-Xmx選項可以設(shè)置堆的最大值。

  這就是Java中堆和棧的區(qū)別。理解好這個問題的話,可以對你解決開發(fā)中的問題,分析堆內(nèi)存和棧內(nèi)存使用,甚至性能調(diào)優(yōu)都有幫助。

  查看默認值(Updated)

  查看堆的默認值,使用下面的代碼,其中InitialHeapSize為最開始的堆的大小,MaxHeapSize為堆的最大值。

  復(fù)制代碼 代碼如下:

  13:17 $ java -XX:+PrintFlagsFinal -version | grep HeapSize

  uintx ErgoHeapSizeLimit = 0 {product}

  uintx HeapSizePerGCThread = 87241520 {product}

  uintx InitialHeapSize := 134217728 {product}

  uintx LargePageHeapSizeThreshold = 134217728 {product}

  uintx MaxHeapSize := 2147483648 {product}

  java version "1.8.0_25"

  Java(TM) SE Runtime Environment (build 1.8.0_25-b17)

  Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

  查看棧的默認值,其中ThreadStackSize為棧內(nèi)存的大小。

  復(fù)制代碼 代碼如下:

  13:21 $ java -XX:+PrintFlagsFinal -version | grep ThreadStackSize

  intx CompilerThreadStackSize = 0 {pd product}

  intx ThreadStackSize = 1024 {pd product}

  intx VMThreadStackSize = 1024 {pd product}

  java version "1.8.0_25"

  Java(TM) SE Runtime Environment (build 1.8.0_25-b17)

  Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)

  譯文信息

  原汁原味的英文原文:http://javarevisited.blogspot.com.au/2013/01/difference-between-stack-and-heap-java.html.

  譯文在原文基礎(chǔ)上進行了修改,整理,刪減。如有興趣可以訪問原文。P.S.地址已被墻。

【java中堆和棧的區(qū)別】相關(guān)文章:

Java中的堆和棧的區(qū)別10-01

c語言指針運用中堆和棧的區(qū)別10-06

Java堆、棧和常量池的解釋09-16

C語言中堆和棧的區(qū)別有哪些08-12

分析Java內(nèi)存分配的棧和堆以及常量池06-24

java中l(wèi)ength和length()的區(qū)別08-24

java中String和StringBuffer的區(qū)別08-01

Java中hashmap和hashtable的區(qū)別06-20

詳解C/C++中堆和棧及靜態(tài)數(shù)據(jù)區(qū)11-02

主站蜘蛛池模板: 安顺市| 乌兰县| 开平市| 农安县| 炉霍县| 胶南市| 亳州市| 波密县| 抚顺市| 茶陵县| 丰宁| 新巴尔虎左旗| 津市市| 兰西县| 安顺市| 澄江县| 昌平区| 南京市| 连云港市| 泰安市| 长宁县| 平塘县| 阿图什市| 循化| 应城市| 凤山县| 荔浦县| 小金县| 建阳市| 太湖县| 闽清县| 井陉县| 荃湾区| 佛坪县| 云安县| 广饶县| 阜新| 安化县| 达拉特旗| 衡水市| 华池县|