1. gzyueqian
      13352868059

      Java培訓(xùn):Java中的堆棧和堆內(nèi)存

      更新時(shí)間: 2022-09-30 10:15:47來(lái)源: 粵嵌教育瀏覽量:9230

        Java 數(shù)據(jù)類型在執(zhí)行期間存儲(chǔ)在兩種不同形式的內(nèi)存中:堆棧和堆。它們通常由運(yùn)行 Java 虛擬機(jī) (JVM) 的底層平臺(tái)維護(hù)。本編程教程從 Java 軟件開發(fā)的角度提供了對(duì)這兩種內(nèi)存類型的一些見解。如果想了解更多關(guān)于堆棧和堆內(nèi)存的內(nèi)容,可以參加java培訓(xùn),課程實(shí)時(shí)更新,緊跟企業(yè)和市場(chǎng)需求,讓你學(xué)到真正有用的技術(shù)。

        Java平臺(tái)是如何工作的?

        Java程序運(yùn)行在Java虛擬機(jī)(JVM)。這個(gè)平臺(tái)是管理器,它提供java應(yīng)用程序在運(yùn)行時(shí)需要的所有資源。這意味著開發(fā)人員編寫的程序或者我們創(chuàng)建的應(yīng)用程序沒有能力直接訪問系統(tǒng)資源(無(wú)論是硬件還是軟件),除非它運(yùn)行的平臺(tái)提供了這種能力。在Java中,順序是這樣的:

        

        JVM層使Java平臺(tái)變得獨(dú)立。其他編程語(yǔ)言,如C/C++,不使用這樣的層,因此,盡管它們是可移植的,但它們本身并不是平臺(tái)獨(dú)立的:

        

        這兩種情況都有很多優(yōu)點(diǎn)和缺點(diǎn)。由于開發(fā)Java語(yǔ)言和JVM平臺(tái)的人是同一批人,對(duì)程序員便利性的偏見是顯而易見的。這導(dǎo)致了巨大的進(jìn)化;Java最初是一門語(yǔ)言,今天它已經(jīng)成為一個(gè)自己的生態(tài)系統(tǒng)。同時(shí),像C/C++這樣的編程語(yǔ)言更傾向于通過(guò)能夠直接訪問系統(tǒng)資源來(lái)優(yōu)化核心單元的使用,從而產(chǎn)生超級(jí)快速和高效的程序。但是兩者在軟件開發(fā)領(lǐng)域都有其用途。在java培訓(xùn)中,你會(huì)學(xué)到很多更加全面系統(tǒng)的知識(shí)和技能,還能積累實(shí)戰(zhàn)項(xiàng)目經(jīng)驗(yàn),提高在面試中的競(jìng)爭(zhēng)力,成功拿下高薪offer。

        就一般語(yǔ)言而言,所有編程語(yǔ)言在編譯和執(zhí)行過(guò)程中都有許多相似之處。這些領(lǐng)域中最重要的一個(gè)是內(nèi)存管理。不管使用什么語(yǔ)言,內(nèi)存管理對(duì)程序的整體效率都有很大的影響,因?yàn)樗兄诠芾韮?nèi)存資源,從而提高應(yīng)用程序的性能。使用的內(nèi)存越多,程序就越慢。

        Java中的運(yùn)行時(shí)內(nèi)存是什么?

        應(yīng)用程序中的一個(gè)常見現(xiàn)象是,每個(gè)應(yīng)用程序都需要一些內(nèi)存來(lái)以最佳方式工作。這個(gè)內(nèi)存是由底層平臺(tái)提供的。在Java的情況下,JVM提供了它(當(dāng)然,這是操作系統(tǒng)授予的)。JVM內(nèi)存的五個(gè)典型部分包括:方法區(qū)、堆、棧、PC寄存器和本機(jī)內(nèi)存。

        現(xiàn)在讓我們把重點(diǎn)放在棧和堆部分。內(nèi)存不像一張白紙,程序員可以通過(guò)草草記下來(lái)存儲(chǔ)數(shù)據(jù)。相反,內(nèi)存需要在使用前進(jìn)行結(jié)構(gòu)化。堆棧和堆是使用內(nèi)存時(shí)遵循的數(shù)據(jù)結(jié)構(gòu)。在程序執(zhí)行期間,存儲(chǔ)的數(shù)據(jù)用于各種目的,這取決于程序的目的。想學(xué)習(xí)java的同學(xué),建議考慮參加java培訓(xùn),進(jìn)一步提升自己,積累開發(fā)技能和經(jīng)驗(yàn),給自己增值。

        JVM決定程序執(zhí)行期間使用的運(yùn)行時(shí)數(shù)據(jù)區(qū)。有些數(shù)據(jù)區(qū)是依賴于JVM的,這意味著它們是在JVM啟動(dòng)時(shí)創(chuàng)建的,并在JVM的整個(gè)生命周期中繼續(xù)存在。但是,每個(gè)線程都會(huì)創(chuàng)建和銷毀其他數(shù)據(jù)區(qū)域。JVM可以同時(shí)執(zhí)行多個(gè)執(zhí)行線程。這意味著每個(gè)線程都有自己的pc(程序計(jì)數(shù)器)寄存器,來(lái)維護(hù)當(dāng)前正在執(zhí)行的指令的位置,以及一個(gè)堆棧,用于保存靜態(tài)內(nèi)存分配。

        

        Java中的堆棧內(nèi)存是什么?

        堆棧是內(nèi)存中的一種結(jié)構(gòu),開發(fā)人員以一種允許檢索數(shù)據(jù)的方式存儲(chǔ)元素,僅僅從堆棧頂部開始–通常稱為先入后出(FILO或LIFO)。因?yàn)槊總€(gè)線程都維護(hù)一個(gè)私有的JVM堆棧,所以它被用來(lái)存儲(chǔ)與它們的靜態(tài)內(nèi)存分配相關(guān)的變量。我們?cè)诖a中聲明和使用的特定于方法的原始變量實(shí)際上存儲(chǔ)在堆棧區(qū)域中。此外,對(duì)實(shí)際存儲(chǔ)在堆內(nèi)存中的對(duì)象的引用也存儲(chǔ)在堆棧區(qū)域中。因此,任何本地分配的內(nèi)存都存儲(chǔ)在堆棧中。

        可以使用JVM參數(shù)-Xss改變堆棧內(nèi)存的默認(rèn)大小。有時(shí),如果分配了太多變量或者一個(gè)方法遞歸地調(diào)用自己,堆棧可能會(huì)溢出。所有Java程序員都知道的一個(gè)常見錯(cuò)誤是java.lang.StackOverFlowError。當(dāng)堆棧變滿時(shí),會(huì)彈出此錯(cuò)誤。Java中的每個(gè)方法調(diào)用都會(huì)在堆棧中創(chuàng)建一個(gè)新的塊。因此,設(shè)計(jì)不佳的遞歸方法調(diào)用很容易耗盡所有堆棧,導(dǎo)致溢出錯(cuò)誤。在java培訓(xùn)中,也有關(guān)于堆棧和堆內(nèi)存的學(xué)習(xí)課程,有理論知識(shí)+實(shí)踐項(xiàng)目課程,雙管齊下,學(xué)以致用,讓你深入淺出地學(xué)習(xí)java。

        Java中的堆內(nèi)存是什么?

        堆是一個(gè)內(nèi)存區(qū)域,它在 JVM 啟動(dòng)后立即創(chuàng)建并繼續(xù)存在,直到JVM被銷毀。與堆棧不同,堆棧是單個(gè)線程的屬性(因?yàn)槊總€(gè)線程都有自己的堆棧),堆實(shí)際上是由JVM本身管理的全局存儲(chǔ)。這個(gè)內(nèi)存在運(yùn)行時(shí)用于為對(duì)象分配內(nèi)存。因此,對(duì)象實(shí)例化可以是用戶定義的類、JDK或其他庫(kù)類。簡(jiǎn)而言之,使用新關(guān)鍵字創(chuàng)建的任何對(duì)象都存儲(chǔ)在堆內(nèi)存中。JVM運(yùn)行的所有線程都可以訪問堆內(nèi)存中的對(duì)象。訪問管理很復(fù)雜,并且使用非常復(fù)雜的算法。這就是JVM垃圾收集器發(fā)揮作用的地方。

        可以使用 -Xms 和 -Xmx JVM 參數(shù)更改堆的默認(rèn)大小。隨著對(duì)象數(shù)量的增加和減少,堆的大小也會(huì)增加和減少。如果達(dá)到其最大限制并嘗試進(jìn)一步分配,它將引發(fā)java.lang.OutOfMemoryError。想要快速學(xué)會(huì)Java 更多技能,建議報(bào)名參加java培訓(xùn),有明確清晰的學(xué)習(xí)路線,系統(tǒng)規(guī)范的課程,專業(yè)講師面授指導(dǎo)教學(xué),可以在短時(shí)內(nèi)獲得很大提升。

        Java堆字符串池

        非常有趣的是,雖然它是一個(gè)類,但使用java.lang.String,從該類實(shí)例化的任何對(duì)象的處理方式都不同。JVM創(chuàng)建者發(fā)現(xiàn)這是Java編程中使用最多的類。因此,應(yīng)特別注意保持其效率。此外,與原始類型相比,字符串操作總是很慢。因此,必須存在這樣的魔力,以便字符串對(duì)象的使用在代碼中的效率和便利性方面類似于或接近于原始類型。因此,為了保持JVM提供的效率,使用了堆中一個(gè)稱為字符串池的特殊內(nèi)存區(qū)域。創(chuàng)建的任何字符串對(duì)象都由 JVM 存儲(chǔ)在字符串池中。與堆中創(chuàng)建的其他對(duì)象相比,這提高了多方面的性能。

        關(guān)于Java堆棧和堆內(nèi)存的最終想法

        堆棧和堆是Java程序在代碼執(zhí)行期間使用的兩個(gè)區(qū)域。除了這兩個(gè),還有其他的內(nèi)存區(qū)域,比如方法區(qū)、寄存器、本地區(qū)等等。每一種在Java應(yīng)用程序中都有其特定的用途。但是,從程序員的角度來(lái)看,堆棧和堆是JVM的基本方面,人們必須理解。然而,對(duì)所有運(yùn)行時(shí)內(nèi)存規(guī)范的透徹理解總是有利的,并且將成為未來(lái)Java編程教程的主題。想要學(xué)習(xí)java技術(shù)的同學(xué),可以考慮參加Java培訓(xùn),培訓(xùn)課程不僅注重理論,更注重項(xiàng)目的實(shí)戰(zhàn)能力,能夠讓你快速適應(yīng)企業(yè)開發(fā)的進(jìn)度,成為企業(yè)所需要的java人才。

      免費(fèi)預(yù)約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 久久男人精品女人 | 亚洲欧洲国产精品片. | 新强乱中文字幕在线播放 | 性欧美黑人在线观看 | 亚洲午夜成年在线网站 | 亚洲乱亚洲中文字幕 |