摘要:內(nèi)存模型首先介紹下程序具體執(zhí)行的過(guò)程源代碼文件后綴會(huì)被編譯器編譯為字節(jié)碼文件后綴由中的類(lèi)加載器加載各個(gè)類(lèi)的字節(jié)碼文件,加載完畢之后,交由執(zhí)行引擎執(zhí)行在整個(gè)程序執(zhí)行過(guò)程中,會(huì)用一段空間來(lái)存儲(chǔ)程序執(zhí)行期間需要用到的數(shù)據(jù)和相關(guān)信息,這段空間一般被
[TOC]
JVM內(nèi)存模型首先介紹下Java程序具體執(zhí)行的過(guò)程:
Java源代碼文件(.java后綴)會(huì)被Java編譯器編譯為字節(jié)碼文件(.class后綴);
由JVM中的類(lèi)加載器加載各個(gè)類(lèi)的字節(jié)碼文件,加載完畢之后,交由JVM執(zhí)行引擎執(zhí)行
在整個(gè)程序執(zhí)行過(guò)程中,JVM會(huì)用==一段空間==來(lái)存儲(chǔ)程序執(zhí)行期間需要用到的數(shù)據(jù)和相關(guān)信息,這段空間一般被稱(chēng)作為==Runtime Data Area(運(yùn)行時(shí)數(shù)據(jù)區(qū))==,也就是我們常說(shuō)的JVM內(nèi)存;
因此,在Java中我們常常說(shuō)到的內(nèi)存管理就是針對(duì)這段空間進(jìn)行管理(如何分配和回收內(nèi)存空間)
JVM的內(nèi)存劃分和各區(qū)域職責(zé)
程序計(jì)數(shù)器:程序計(jì)數(shù)器是指CPU中的寄存器,它保存的是==程序當(dāng)前執(zhí)行的指令的地址==(也可以說(shuō)保存下一條指令的所在存儲(chǔ)單元的地址),當(dāng)CPU需要執(zhí)行指令時(shí),需要從程序計(jì)數(shù)器中得到當(dāng)前需要執(zhí)行的指令所在存儲(chǔ)單元的地址,然后根據(jù)得到的地址獲取到指令,在得到指令之后,程序計(jì)數(shù)器便自動(dòng)加1或者根據(jù)轉(zhuǎn)移指針得到下一條指令的地址,如此循環(huán),直至執(zhí)行完所有的指令;
注:JVM中的程序計(jì)數(shù)器并不像匯編語(yǔ)言中的程序計(jì)數(shù)器一樣是物理概念上的CPU寄存器,但是邏輯作用上是等同的,在JVM中多線程是通過(guò)線程輪流切換來(lái)獲得CPU執(zhí)行時(shí)間的,在任一具體時(shí)刻,一個(gè)CPU的內(nèi)核只會(huì)執(zhí)行一條線程中的指令,為了能夠使得每個(gè)線程都在線程切換后能夠恢復(fù)在切換之前的程序執(zhí)行位置,每個(gè)線程都需要有自己獨(dú)立的程序計(jì)數(shù)器,并且不能互相被干擾,否則就會(huì)影響到程序的正常執(zhí)行次序。==因此,可以這么說(shuō),程序計(jì)數(shù)器是每個(gè)線程所私有的==
Java棧:Java棧是Java方法執(zhí)行的內(nèi)存模型,Java棧中存放的是一個(gè)個(gè)的棧幀,每個(gè)棧幀(包括:局部變量表、操作數(shù)棧、運(yùn)行時(shí)常量池(在下文中提到的方法區(qū)內(nèi))的引用、方法返回地址和一些額外的附加信息)對(duì)應(yīng)一個(gè)被調(diào)用的方法,當(dāng)線程執(zhí)行一個(gè)方法時(shí),就會(huì)隨之創(chuàng)建一個(gè)對(duì)應(yīng)的棧幀,并將建立的棧幀壓棧。當(dāng)方法執(zhí)行完畢之后,便會(huì)將棧幀出棧;
注:由于每個(gè)線程正在執(zhí)行的方法可能不同,因此每個(gè)線程都會(huì)有一個(gè)自己的Java棧,互不干擾
本地方法棧:Java棧是為執(zhí)行Java方法服務(wù)的,而本地方法棧則是為執(zhí)行本地方法(Native Method)服務(wù)的;
堆:Java中的堆是用來(lái)存儲(chǔ)對(duì)象本身的以及數(shù)組;
方法區(qū):它與堆一樣,是被線程共享的區(qū)域,存儲(chǔ)了每個(gè)類(lèi)的信息(包括類(lèi)的名稱(chēng)、方法信息、字段信息)、靜態(tài)變量、常量以及編譯器編譯后的代碼等。
注:在方法區(qū)中有一個(gè)非常重要的部分就是運(yùn)行時(shí)常量池,它是每一個(gè)類(lèi)或接口的常量池的運(yùn)行時(shí)表示形式,在類(lèi)和接口被加載到JVM后,對(duì)應(yīng)的運(yùn)行時(shí)常量池就被創(chuàng)建出來(lái)。當(dāng)然并非Class文件常量池中的內(nèi)容才能進(jìn)入運(yùn)行時(shí)常量池,在運(yùn)行期間也可將新的常量放入運(yùn)行時(shí)常量池中,比如String的intern方法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/72265.html
摘要:在之前,它是一個(gè)備受爭(zhēng)議的關(guān)鍵字,因?yàn)樵诔绦蛑惺褂盟占骼斫夂驮矸治龊?jiǎn)稱(chēng),是后提供的面向大內(nèi)存區(qū)數(shù)到數(shù)多核系統(tǒng)的收集器,能夠?qū)崿F(xiàn)軟停頓目標(biāo)收集并且具有高吞吐量具有更可預(yù)測(cè)的停頓時(shí)間。 35 個(gè) Java 代碼性能優(yōu)化總結(jié) 優(yōu)化代碼可以減小代碼的體積,提高代碼運(yùn)行的效率。 從 JVM 內(nèi)存模型談線程安全 小白哥帶你打通任督二脈 Java使用讀寫(xiě)鎖替代同步鎖 應(yīng)用情景 前一陣有個(gè)做...
摘要:的方法,的默認(rèn)實(shí)現(xiàn)會(huì)判斷是否是類(lèi)型注意自動(dòng)拆箱,自動(dòng)裝箱問(wèn)題。適應(yīng)自旋鎖鎖競(jìng)爭(zhēng)是下的,會(huì)經(jīng)過(guò)用戶態(tài)到內(nèi)核態(tài)的切換,是比較花時(shí)間的。在中引入了自適應(yīng)的自旋鎖,說(shuō)明自旋的時(shí)間不固定,要不要自旋變得越來(lái)越聰明。 前言 只有光頭才能變強(qiáng) 之前在刷博客的時(shí)候,發(fā)現(xiàn)一些寫(xiě)得比較好的博客都會(huì)默默收藏起來(lái)。最近在查閱補(bǔ)漏,有的知識(shí)點(diǎn)比較重要的,但是在之前的博客中還沒(méi)有寫(xiě)到,于是趁著閑整理一下。 文本的...
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄?,我的目?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...
摘要:在本文中我將會(huì)介紹應(yīng)用性能優(yōu)化的一般原則。性能優(yōu)化的流程圖摘取自和合著的性能,描述了應(yīng)用性能優(yōu)化的處理流程。例如,對(duì)每臺(tái)服務(wù)器,你面臨著為單個(gè)分配堆內(nèi)存和運(yùn)行個(gè)并為每個(gè)分配堆內(nèi)存的選擇。不過(guò)位能使用堆內(nèi)存最大理論值只有。 原文鏈接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-per...
摘要:基礎(chǔ)問(wèn)題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類(lèi)與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類(lèi)對(duì)象鎖和類(lèi)鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類(lèi)單例模式和 Java基礎(chǔ)問(wèn)題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 2075·2021-11-23 09:51
閱讀 2217·2021-09-29 09:34
閱讀 3710·2021-09-22 15:50
閱讀 3569·2021-09-22 15:23
閱讀 2600·2019-08-30 15:55
閱讀 713·2019-08-30 15:53
閱讀 3084·2019-08-29 17:09
閱讀 2640·2019-08-29 13:57