java開發(fā) 請高手詳細的解答一下JAVA的堆,棧,方法區(qū),謝謝?
請高手詳細的解答一下JAVA的堆,棧,方法區(qū),謝謝?方法區(qū)(非堆):是各個線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機中所管
請高手詳細的解答一下JAVA的堆,棧,方法區(qū),謝謝?
方法區(qū)(非堆):是各個線程共享的內(nèi)存區(qū)域,它用于存儲已被虛擬機加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。java堆:是虛擬機中所管理的內(nèi)存中區(qū)域最大的一塊,是被所有線程共享的一塊內(nèi)存區(qū)域,在虛擬機啟動時創(chuàng)建。此內(nèi)存區(qū)域的唯一目的就是存放對象實例,幾乎所有的對象實例都在這里分配內(nèi)存。java堆是垃圾收集器管理的主要區(qū)域。java虛擬機棧:線程私有的,它的生命周期與線程相同。每個方法被執(zhí)行的時候都會同時創(chuàng)建一個棧幀,用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈接、方法出口等信息。每個方法被調(diào)用直至執(zhí)行完成的過程,就對應著一個棧幀在虛擬機中從入棧到出棧的過程。
如何準確理解Java中的堆與棧?
謝邀!
Java運行時數(shù)據(jù)區(qū)中的棧有Java虛擬機棧和本地方法棧,都是用于方法的執(zhí)行;堆用于存放對象實例和數(shù)組。
Java虛擬機棧
每個Java方法執(zhí)行的時候都會創(chuàng)建一個棧幀,棧幀用于存儲局部變量表、操作數(shù)棧、動態(tài)鏈表和方法出口等信息,每個Java方法從開始調(diào)用到執(zhí)行完成的過程,都對應著一個棧幀在Java虛擬機棧中入棧到出棧的過程。在Java虛擬機規(guī)范中規(guī)定,如果線程請求的深度大于虛擬機所允許的深度,將拋出StackOverflowError異常;如果虛擬機可以動態(tài)擴展,但是在擴展時申請不到足夠的內(nèi)存,將會拋出OutOfMemoryError異常。Java虛擬機棧的生存周期是跟隨線程的,是線程私有的。
本地方法棧
Java虛擬機棧是為執(zhí)行Java方法服務的,而本地方法棧是為執(zhí)行本地方法服務的,它的作用與Java虛擬機棧相似,同樣它也會拋出StackOverflowError異常和OutOfMemoryError異常。本地方法棧的生存周期也是跟隨線程的,也是線程私有的。
堆
堆是Java虛擬機中內(nèi)存空間最大的一塊,基本上所有的對象實例及數(shù)組都在這里分配內(nèi)存空間,它是所有線程共享的區(qū)域。在Java虛擬機規(guī)范中,堆可以處于物理上不連續(xù)的內(nèi)存空間,只要邏輯上連續(xù)就行。當堆中沒有足夠內(nèi)存分配時,并且此時也無法再擴展,將會拋出OutOfMemoryError異常。
網(wǎng)站全棧開發(fā),Java跟PHP選擇哪個好些?
網(wǎng)站開發(fā)的選擇很多。
java和php開發(fā)
首先,java和php都不能實現(xiàn)網(wǎng)站的全棧開發(fā)。
1、java給人一種重的感覺,優(yōu)勢是框架、組件、中間件豐富,除了web,還有云計算、大數(shù)據(jù)、人工智能的框架,可以做出巨型服務系統(tǒng),如大型互聯(lián)網(wǎng)公司產(chǎn)品,擴展性強,但系統(tǒng)架構、集成、優(yōu)化能力要求高。
2、php相較而言輕,但能力限制在了做web,有很成熟mvc框架可選,中小型網(wǎng)站項目可用,感覺這幾年php落寞了。
javascript開發(fā)
目前javascript自稱可實現(xiàn)全棧開發(fā),前端js html css,可選jquery、vue.js等前端框架;后端nodejs,也有框架。
普通程序員該如何進階為全棧工程師?
普通程序員進階為全棧工程師,要求是很多的。我從事開發(fā)近10年了,也算是全棧工程師了,作為過來人給你一些建議:
1、專業(yè)技能提升要求:
前端必須要掌握的知識
DIV CSS、JavaScript、jQuery、Ajax;數(shù)據(jù)庫務必要掌握的有
MySQLNoSQL要求掌握的有
Redis、MongoDB常用操作系統(tǒng)命令要十分熟悉
Linux架構知識要了解的有
讀寫分離、主從同步、異步操作、消息系統(tǒng)、負載均衡、性能調(diào)優(yōu)、ELK 等編程語言的掌握,至少要掌握以下一種
Java、C#、PHP、Python
2、非專業(yè)技能上的要求:
堅持
以上技術都掌握后,自己動手寫一款框架,結合運用