摘要:內存模型首先介紹下程序具體執行的過程源代碼文件后綴會被編譯器編譯為字節碼文件后綴由中的類加載器加載各個類的字節碼文件,加載完畢之后,交由執行引擎執行在整個程序執行過程中,會用一段空間來存儲程序執行期間需要用到的數據和相關信息,這段空間一般被
[TOC]
JVM內存模型首先介紹下Java程序具體執行的過程:
Java源代碼文件(.java后綴)會被Java編譯器編譯為字節碼文件(.class后綴);
由JVM中的類加載器加載各個類的字節碼文件,加載完畢之后,交由JVM執行引擎執行
在整個程序執行過程中,JVM會用==一段空間==來存儲程序執行期間需要用到的數據和相關信息,這段空間一般被稱作為==Runtime Data Area(運行時數據區)==,也就是我們常說的JVM內存;
因此,在Java中我們常常說到的內存管理就是針對這段空間進行管理(如何分配和回收內存空間)
JVM的內存劃分和各區域職責
程序計數器:程序計數器是指CPU中的寄存器,它保存的是==程序當前執行的指令的地址==(也可以說保存下一條指令的所在存儲單元的地址),當CPU需要執行指令時,需要從程序計數器中得到當前需要執行的指令所在存儲單元的地址,然后根據得到的地址獲取到指令,在得到指令之后,程序計數器便自動加1或者根據轉移指針得到下一條指令的地址,如此循環,直至執行完所有的指令;
注:JVM中的程序計數器并不像匯編語言中的程序計數器一樣是物理概念上的CPU寄存器,但是邏輯作用上是等同的,在JVM中多線程是通過線程輪流切換來獲得CPU執行時間的,在任一具體時刻,一個CPU的內核只會執行一條線程中的指令,為了能夠使得每個線程都在線程切換后能夠恢復在切換之前的程序執行位置,每個線程都需要有自己獨立的程序計數器,并且不能互相被干擾,否則就會影響到程序的正常執行次序。==因此,可以這么說,程序計數器是每個線程所私有的==
Java棧:Java棧是Java方法執行的內存模型,Java棧中存放的是一個個的棧幀,每個棧幀(包括:局部變量表、操作數棧、運行時常量池(在下文中提到的方法區內)的引用、方法返回地址和一些額外的附加信息)對應一個被調用的方法,當線程執行一個方法時,就會隨之創建一個對應的棧幀,并將建立的棧幀壓棧。當方法執行完畢之后,便會將棧幀出棧;
注:由于每個線程正在執行的方法可能不同,因此每個線程都會有一個自己的Java棧,互不干擾
本地方法棧:Java棧是為執行Java方法服務的,而本地方法棧則是為執行本地方法(Native Method)服務的;
堆:Java中的堆是用來存儲對象本身的以及數組;
方法區:它與堆一樣,是被線程共享的區域,存儲了每個類的信息(包括類的名稱、方法信息、字段信息)、靜態變量、常量以及編譯器編譯后的代碼等。
注:在方法區中有一個非常重要的部分就是運行時常量池,它是每一個類或接口的常量池的運行時表示形式,在類和接口被加載到JVM后,對應的運行時常量池就被創建出來。當然并非Class文件常量池中的內容才能進入運行時常量池,在運行期間也可將新的常量放入運行時常量池中,比如String的intern方法。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72265.html
摘要:的方法,的默認實現會判斷是否是類型注意自動拆箱,自動裝箱問題。適應自旋鎖鎖競爭是下的,會經過用戶態到內核態的切換,是比較花時間的。在中引入了自適應的自旋鎖,說明自旋的時間不固定,要不要自旋變得越來越聰明。 前言 只有光頭才能變強 之前在刷博客的時候,發現一些寫得比較好的博客都會默默收藏起來。最近在查閱補漏,有的知識點比較重要的,但是在之前的博客中還沒有寫到,于是趁著閑整理一下。 文本的...
摘要:我的是忙碌的一年,從年初備戰實習春招,年三十都在死磕源碼,三月份經歷了阿里五次面試,四月順利收到實習。因為我心理很清楚,我的目標是阿里。所以在收到阿里之后的那晚,我重新規劃了接下來的學習計劃,將我的短期目標更新成拿下阿里轉正。 我的2017是忙碌的一年,從年初備戰實習春招,年三十都在死磕JDK源碼,三月份經歷了阿里五次面試,四月順利收到實習offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:在本文中我將會介紹應用性能優化的一般原則。性能優化的流程圖摘取自和合著的性能,描述了應用性能優化的處理流程。例如,對每臺服務器,你面臨著為單個分配堆內存和運行個并為每個分配堆內存的選擇。不過位能使用堆內存最大理論值只有。 原文鏈接:http://www.cubrid.org/blog/dev-platform/the-principles-of-java-application-per...
摘要:基礎問題的的性能及原理之區別詳解備忘筆記深入理解流水線抽象關鍵字修飾符知識點總結必看篇中的關鍵字解析回調機制解讀抽象類與三大特征時間和時間戳的相互轉換為什么要使用內部類對象鎖和類鎖的區別,,優缺點及比較提高篇八詳解內部類單例模式和 Java基礎問題 String的+的性能及原理 java之yield(),sleep(),wait()區別詳解-備忘筆記 深入理解Java Stream流水...
閱讀 2065·2021-11-23 09:51
閱讀 2209·2021-09-29 09:34
閱讀 3701·2021-09-22 15:50
閱讀 3560·2021-09-22 15:23
閱讀 2577·2019-08-30 15:55
閱讀 705·2019-08-30 15:53
閱讀 3073·2019-08-29 17:09
閱讀 2630·2019-08-29 13:57