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