JVM運行時數據區(qū)劃分原理詳解
Java內存空間
內存是非常重要的系統(tǒng)資源,是硬盤和cpu的中間倉庫及橋梁,承載著操作系統(tǒng)和應用程序的實時運行。JVM內存布局規(guī)定了JAVA在運行過程中內存申請、分配、管理的策略,保證了JVM的高效穩(wěn)定運行。不同的jvm對于內存的劃分方式和管理機制存在著部分差異(對于Hotspot主要指方法區(qū))

(圖源阿里)JDK8的元數據區(qū)+JIT編譯產物 就是JDK8以前的方法區(qū)
JavaAPI中的Runtime
public class Runtime
extends Object
Every Java application has a single instance of class Runtime that allows the application to interface with theenvironment in which the application is running. The current runtime can be obtained from the getRuntime method.
每個Java應用程序都有一個Runtime類的實例,該實例允許該應用程序與運行該應用程序的環(huán)境進行交互。 當前運行時可以從getRuntime方法獲得。Java內存分區(qū)介紹
java虛擬機定了了若干種程序運行期間會使用到的運行時數據區(qū),其中有一些會隨著虛擬機啟動而創(chuàng)建,隨著虛擬機退出而銷毀。另外一些則是與縣城一一對應的,這些與線程對應的數據區(qū)域會隨著線程開始和結束而創(chuàng)建和銷毀。
如圖,灰色的區(qū)域為單獨線程私有的,紅色的為多個線程共享的,即
Java
中的線程與進程
1.每個線程:獨立包括程序計數器、棧、本地棧
2.線程間共享:堆、堆外內存(方法區(qū)、永久代或元空間、代碼緩存)

圖片說明:嚴格對照Java內存分區(qū)
PC即程序計數器
VMS即虛擬機棧
NMS即本地方法棧
一般來說,jvm優(yōu)化95%是優(yōu)化堆區(qū),5%優(yōu)化的是方法區(qū),至于棧區(qū)無非出入棧操作優(yōu)化較少Java線程
1.線程是一個程序里的運行單元,JVM允許一個程序有多個線程并行的執(zhí)行;
2.在HotSpot JVM,每個線程都與操作系統(tǒng)的本地線程直接映射。
當一個java線程準備好執(zhí)行以后,此時一個操作系統(tǒng)的本地線程也同時創(chuàng)建。java線程執(zhí)行終止后。本地線程也會回收。
3.操作系統(tǒng)負責所有線程的安排調度到任何一個可用的CPU上。一旦本地線程初始化成功,它就會調用java線程中的run()方法.
JVM系統(tǒng)線程分類
如果你使用jconsole或者任何一個調試工具,都能看到在后臺有許多線程在運行。這些后臺線程不包括調用main方法的main線程以及所有這個main線程自己創(chuàng)建的線程;
這些主要的后臺系統(tǒng)線程在HotSpot JVM里主要是以下幾個:
1.虛擬機線程:這種線程的操作時需要JVM達到安全點才會出現。這些操作必須在不同的線程中發(fā)生的原因是他們都需要JVM達到安全點,這樣堆才不會變化。這種線程的執(zhí)行包括“stop-the-world”的垃圾收集,線程棧收集,線程掛起以及偏向鎖撤銷
2.周期任務線程:這種線程是時間周期事件的提現(比如中斷),他們一般用于周期性操作的調度執(zhí)行。
3.GC線程:這種線程對于JVM里不同種類的垃圾收集行為提供了支持
4.編譯線程:這種線程在運行時會降字節(jié)碼編譯成本地代碼
5.信號調度線程:這種線程接收信號并發(fā)送給JVM,在它內部通過調用適當的方法進行處理。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Spring將MultipartFile轉存到本地磁盤的三種方式
在Java中處理文件向來是一種不是很方便的操作,然后隨著Spring框架的崛起,使用Spring框架中的MultipartFile來處理文件也是件很方便的事了,今天就給大家介紹Spring將MultipartFile轉存到本地磁盤的方式,需要的朋友可以參考下2024-10-10
IDEA 去除 mybatis.xml 文件黃色警告的圖文教程
這篇文章主要介紹了IDEA 去除 mybatis.xml 文件黃色警告的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

