成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十個問題弄清JVM&GC

云計算 虛擬化
每個java開發同學不管是日常工作中還是面試里,都會遇到JDK、JVM和GC的問題。本文會從以下10個問題為切入點,帶著大家一起全面了解一下JVM的方方面面。

 [[335561]]

每個java開發同學不管是日常工作中還是面試里,都會遇到JDK、JVM和GC的問題。本文會從以下10個問題為切入點,帶著大家一起全面了解一下JVM的方方面面。

  1. JVM、JRE和JDK的區別和聯系
  2. JVM是什么?以及它的主要作用
  3. JVM的核心功能有哪些
  4. 類加載機制和過程
  5. 運行時數據區的邏輯結構
  6. JVM的內存模型
  7. 如何確定對象是垃圾
  8. 垃圾收集的算法有哪些
  9. 各種問世的垃圾收集器
  10. JVM調優的參數配置

1、JVM、JRE和JDK的區別和聯系

這個基本是步入java世界的入門級知識認知,首先我們來看一下來自java官網的一張圖:

 

十個問題弄清JVM&GC

 

從這張圖里我們基本就可以看出“JRE”是運行Java語言編寫的程序所不可缺少的運行環境。有了JRE我們寫的java程序才可以運行起來被用戶所使用。

而“JDK”俗稱java開發工具包,它包括了Java運行環境JRE(Java Runtime Envirnment)以及一堆Java工具(javac/java/jdb等)和Java基礎的類庫(即Java API 包括rt.jar)。

但不管是JRE還是JDK都是以JVM為基石的。可以說JVM是java程序可以在某臺機器上得以運行的最底層的保障。

2、那么什么是JVM?它的主要作用又是什么?

JVM是Java Virtual Machine(Java虛擬機)的縮寫,它的用途簡單的說就是它能讓我們寫的java程序在不同的操作系統的不同CPU上運行。我們寫的java程序會利用開發工具(如Intellij idea)把它編譯成.class文件,但這個class文件是不能直接被操作系統識別運行的,需要利用jvm按jvm規范將編譯好的.class文件轉變成機器語言,再交由操作系統提交給cpu去執行。

 

十個問題弄清JVM&GC

 

用一句話評價JVM的主要作用就是:JVM屏蔽了與具體操作系統平臺相關的信息,使得Java程序只需生成在Java虛擬機上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行。

3、這么牛的JVM的核心功能有哪些?

JVM中核心的功能總體有三塊:

  1. 類加載器:在JVM啟動時或者在類運行時將需要的class文件加載到JVM中
  2. 執行引擎:負責執行class文件,包括分配運行時數據區(如程序計數器、本地方法棧和虛擬棧)和 最終將class中的字節碼指令轉為機器指令通過操作系統交給CPU執行
  3. 垃圾回收器:對JVM的堆內存進行管理,及時回收調無用的資源釋放內存空間

4、JVM類的加載機制和過程?

首先,我們談談開發工具編譯生成的class文件是如何被JVM加載的。所謂的類加載機制其實就是:虛擬機(JVM)把class文件加載到內存中,然后對它進行正確性的校驗,檢查通過再進行解析和初始化,最終把class文件變成一個內存中可以直接使用的java.lang.Class對象。

從一個class文件的裝載到銷毀,它的生命周期基本可以分為以下五個階段:裝載、鏈接(驗證、準備和解析)、初始化、使用和卸載。

 

十個問題弄清JVM&GC

 

  1. 裝載:裝載(Load)階段總共有三項工作(1)通過類的全限定名獲取其定義的二進制字節流,需要借助類裝載器(ClassLoader)完成;(2)在運行時數據區的“方法區”中分配一塊區域保存這個類的信息,包括類的基本信息、常量和靜態變量等等;(3)在“Java堆”內存上生成一個該類的java.lang.Class對象,用于對外暴露使用該類的入口。
  2. 鏈接:鏈接(link)階段同樣有三項工作(1)驗證(Verify),驗證文件格式、元數據、字節碼和符號引用,以保證被加載類的準確性;(2)準備(Prepare),為靜態變量分配內存并初始化為默認值。(3)解析(Resolve),解析階段是虛擬機將常量池內的符號引用替換為直接引用的過程。解析動作主要針對類或接口、字段、類方法、接口方法、方法類型、方法句柄和調用限定符7類符號引用進行。
  3. 初始化:初始化(Initialize)階段所做的工作就是對類的靜態成員變量和靜態方法進行初始化賦值或調用。

比如上面的靜態變量age初始化之后的值變為了10。

在裝載階段的第(2),(3)步可以發現有運行時數據區,堆,方法區等名詞,那么究竟什么是“運行時數據區”,它有哪些結構構成?

5、什么是JVM運行時數據區?及其邏輯結構

“運行時數據區”是JVM在執行Java程序的過程中出于內存管理方面的目的,在設計上把內存分為若干個不同的區域。這些區域有著各自的用途,有的區域生命周期跟虛擬機一樣,隨著虛擬機進程的啟動而存在,伴隨這虛擬機的進程結束而消亡。而有些區域則依賴用戶線程的啟動和結束而建立和銷毀。具體如下圖:

 

十個問題弄清JVM&GC

 

方法區(Method Area):

(1)用于存儲已被虛擬機加載的類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據;

(2)方法區是各個線程共享的內存區域,在虛擬機啟動時創建,因為同一個class類信息只需要加載一份就夠了;

(3)java虛擬機規范中把方法區描述為堆內存的一個邏輯部分,但它有另外一個別名叫“非堆”,用于與java堆區分開來。在JDK8之前方法區叫做Perm space,在JDK8及以后叫做Metaspace(即元數據區)。

堆(Heap):Java堆是被所有線程共享,虛擬機啟動時創建,此內存區域唯一的目的就是存放對象實例,在Java虛擬機規范中的描述是:所有的對象實例以及數組都要在堆上分配,但是隨著JIT編譯器的發展和逃逸分析技術逐漸成熟,棧上分配,標量替換優化技術將會導致一些微妙的變化發生,所有的對象都分配在堆上也就變得不那么絕對了。

虛擬機棧(Java Virtual Machine Stacks):虛擬機棧是線程私有的或者說是獨有的,隨著線程的創建而創建。一個線程的運行狀態(正在調用哪個方法),就是由這個線程對應的虛擬機棧來保存的。

每一個被線程執行的方法,為虛擬機棧中的一個棧幀,調用一個方法,就會向棧中壓入一個棧幀;一個方法調用完成,就會把該棧幀從棧中彈出。如下圖解:

 

十個問題弄清JVM&GC

 

程序計數器(The Pc Register):我們都知道一個JVM進程中有多個線程在執行,而線程中的內容是否能夠擁有執行權,是根據CPU調度來的。假如線程A正在執行到某個地方,突然失去了CPU的執行權,切換到線程B了,然后當線程A再獲得CPU執行權的時候,怎么能繼續執行呢?這就是需要在線程中維護一個變量,記錄線程執行到的位置,這就是程序計數器。

本地方法棧(Native Method Stacks):本地方法棧與虛擬機棧所發揮的作用非常相似,他們之間的區別不過是虛擬機棧為虛擬機執行Java方法(字節碼)服務,而本地方法棧則為虛擬機中使用到的native方法服務。即如果當前線程執行的方法是Native類型的,這些方法就會在本地方法棧中執行。

總結一下,就JVM的設計規范,從使用用途角度JVM的內存大體的分為:線程私有內存區 和 線程共享內存區。

 

十個問題弄清JVM&GC

 

線程私有內存區在類加載器編譯某個class文件時就確定了執行時需要的“程序計數器”和“虛擬棧幀”等所需的空間,并且會伴隨著當前執行線程的產生而產生,執行線程的消亡而消亡,因此“線程私有內存區”并不需要考慮內存管理和垃圾回收的問題。

線程共享內存區在虛擬機啟動時創建,被所有線程共享,是Java虛擬機所管理內存中最應該關注的和最大的一塊。

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2013-01-14 15:30:22

云安全

2013-01-15 10:14:19

云安全私有云公有云

2022-11-25 14:55:43

JavaScriptweb應用程序

2023-10-04 00:03:00

SQL數據庫

2021-06-03 18:30:27

Linux epoll IO

2023-12-15 10:42:05

2021-04-12 09:36:14

JVM生產問題JVM FULL GC

2015-07-23 13:31:37

2009-03-03 16:50:52

需求分析軟件需求需求管理

2024-09-24 07:57:55

SQL錯誤??EXPLAIN?

2022-08-12 18:40:00

分布式

2024-07-18 15:08:27

2010-09-02 09:21:45

CSS兼容

2019-07-05 07:49:19

TCPIP網絡協議

2015-09-20 16:23:27

2018-06-11 11:03:09

2012-11-28 10:21:38

網管

2023-12-06 18:06:37

Git開發

2024-12-03 14:33:42

Python遞歸編程

2024-08-13 00:23:48

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠色狠狠色综合系列 | 一级毛片在线看 | 亚洲精品2区 | 婷婷中文在线 | 日日操操 | 国产成人一区二区三区久久久 | 成人久久久 | 一区二区三区免费在线观看 | 中文字幕亚洲区一区二 | 成人在线视频网站 | 久久免费高清视频 | 国产日韩精品在线 | 男人天堂999 | 亚洲精品欧美一区二区三区 | 欧美久久久久久 | 四虎影院欧美 | 国产日韩欧美 | 久久久成人网 | 久久精品69 | 九九亚洲 | 91在线中文字幕 | 久热伊人 | 麻豆久久精品 | 日韩电影免费在线观看中文字幕 | 国产乱码精品1区2区3区 | 亚洲视频欧美视频 | 中文字幕日韩欧美一区二区三区 | 国产在线激情视频 | 亚洲激情在线视频 | 中文字幕在线视频精品 | 亚洲精品一区在线 | 国产一区二区三区久久久久久久久 | 九九热精品在线 | 久草色播 | 婷婷91 | 91免费在线看 | 国产精品区二区三区日本 | 欧美日韩视频 | 久操av在线 | 欧美成人免费在线 | 久草视频在线看 |