題目:
1.下面有關(guān)JVM內(nèi)存,說法錯(cuò)誤的是?
? 程序計(jì)數(shù)器是一個(gè)比較小的內(nèi)存區(qū)域辆亏,用于指示當(dāng)前線程所執(zhí)行的字節(jié)碼執(zhí)行到了第幾行胚鸯,是線程隔離的,
? 原則上講骨稿,所有的對象都在堆區(qū)上分配內(nèi)存,是線程之間共享的,
? 虛擬機(jī)棧描述的是Java方法執(zhí)行的內(nèi)存模型,用于存儲(chǔ)局部變量坦冠,操作數(shù)棧形耗,動(dòng)態(tài)鏈接,方法出口等信息辙浑,是線程隔離的
? 錯(cuò)誤:方法區(qū)用于存儲(chǔ)JVM加載的類信息激涤、常量、靜態(tài)變量判呕、以及編譯器編譯后的代碼等數(shù)據(jù)倦踢,是線程隔離的
大多數(shù) JVM 將內(nèi)存區(qū)域劃分為Method Area(Non-Heap)(方法區(qū)),Heap(堆),Program Counter Register(程序計(jì)數(shù)器),VM Stack(虛擬機(jī)棧,也有翻譯成JAVA 方法棧的),Native Method Stack(本地方法棧)侠草,其中Method Area和?Heap是線程共享的?辱挥,VM?Stack,Native Method Stack??和Program Counter Register?是非線程共享的边涕。為什么分為?線程共享和非線程共享的呢?請繼續(xù)往下看晤碘。
首先我們熟悉一下一個(gè)一般性的 Java 程序的工作過程。一個(gè) Java 源程序文件功蜓,會(huì)被編譯為字節(jié)碼文件(以 class 為擴(kuò)展名)园爷,每個(gè)java程序都需要運(yùn)行在自己的JVM上,然后告知 JVM 程序的運(yùn)行入口式撼,再被 JVM 通過字節(jié)碼解釋器加載運(yùn)行童社。那么程序開始運(yùn)行后,都是如何涉及到各內(nèi)存區(qū)域的呢端衰?