国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

走進JVM,淺水也能捉魚!

開發 后端 開發工具
Jvm當運行某個方法的時候,先把這個方法壓入java棧中,里面包含局部變量等信息,那么對象放入哪里呢?壓入棧的是對象的引用,即變量,所有的對象都存儲在堆中。

這不是一篇描述jvm是什么的文章,也不介紹jvm跨平臺的特性,也不是講述jvm安全特性的文章,更不是講解jvm指令操作,數據運算的文章,本文重點講述類型的生命周期。

類型的生命周期涉及到:類的裝載、jvm體系結構、垃圾回收機制。

為什么要講jvm體系結構?因為類的裝載和垃圾回收機制都和jvm體系結構息息相關。

那么什么是jvm體系結構呢?

走進JVM,淺水也能捉魚

當jvm運行起來的時候,它會向系統申請一片內存區(不同的jvm實現可能不同,有些可以使用虛擬內存),將這塊內存分出一部分存儲許多東西,例如:程序創建的對象,傳遞給方法的參數,返回值,局部變量等等,我們將這塊內存稱之為運行時數據區,運行時數據區可以劃分成方法區、堆、java棧、pc 寄存器、本地方法棧。看到上面這幅圖,和這些解說你可能大概的明白jvm體系是個啥樣子,但是你或許還不了解運行時數據區里面方法區等用來干嘛的。

方法區:當虛擬機裝載一個class文件的時候,它會從這個class文件包含的二進制數據中解析類型信息,然后將這些類型信息放到方法區中。因為方法區是被所有線程共享的,所以必須考慮數據的線程安全。假如兩個線程都在試圖找lava的類,在lava類還沒有被加載的情況下,只應該有一個線程去加載,而另一個線程等待。

PC寄存器:每個新線程產生都將得到自己的pc寄存器以及一個java棧幀。

:存放程序運行時產生的所有對象。堆是一個線程共享的內存區,所以我們寫多線程程序的時候需要考慮并發。

Java棧:java棧由許多棧幀組成的,如圖,當一個線程調用java方法時,虛擬機壓入一個新的棧幀到java棧中,當方法返回的時候,這個棧幀被從java棧彈出并被拋棄。

走進JVM,淺水也能捉魚

那么現在你應該可以想象到一些jvm是怎么工作的了,是不是應該接著講具體工作原理了呢?。但是不急,先了解下類的裝載機制。

了解類的裝載機制之前先了解jvm里面的類裝載器:BootstrapLoader、ExtClassLoader、 AppClassLoader;ExtClassLoader(負責裝載jre下面的rt.jar,charsets.jar)和 AppClassLoader(負責轉載classpath下面的類包)是ClassLoader(抽象類)的子類;

BootstrapLoader(負責裝載jre核心類庫)是根裝載器,是c/c++寫的,在java里面看不到它。

這三個類裝載器存在父子關系,根裝載器是ExtClassLoader父裝載器,ExtClassLoader是AppClassLoader父裝載器;

Jvm中類的裝載也是安全機制沙箱模型的***道門檻。Java裝載類使用雙親委派模式即全盤負責委托機制。好現在讓我們了解裝載大概流程。

當裝載一個類的時候,若是由用戶指定一個類裝載器裝載的話,那么那個類裝載器會先委派給父類裝載器,一直委派到根裝載器,如果裝載的是一個 java.lang.String,由于它是核心類庫的而且已經被裝載過了,那么就會直接返回一個class對象,那么如果是一個根裝載器找不到的類呢?接著就會交給子類(下一級父類)裝載器,如果還是沒有找到類文件,接著就會由之前用戶指定的那個類裝載器裝載。(這里沒有說明裝載超類的過程,請勿疏忽)。

如果是有人惡意的寫了一個基礎類java.lang.String,那么會影響虛擬機嗎?不會因為這個類最終會交由根裝載器裝載,而根裝載器只會去 jre核心類庫加載,最終返回的class類型并不是用戶寫的String,而且系統自帶的String,也就是說用戶寫String永遠不會被加載。

了解了類裝載器是怎么工作了之后,我們也需要了解下class文件格式;

  1. TheClassFileStructure  
  2. ClassFile{  
  3. u4magic;//魔數  
  4. u2minor_version;//class次版本號  
  5. u2major_version;//class主版本號  
  6. u2constant_pool_count;//常量池計數  
  7. cp_infoconstant_pool[constant_pool_count-1];//常量池  
  8. u2access_flags;//修飾符  
  9. u2this_class;//常量池索引  
  10. u2interfaces_count;  
  11. u2interfaces[interfaces_count];  
  12. u2fields_count;  
  13. field_infofields[fields_count];  
  14. u2methods_count;  
  15. method_infomethods[methods_count];  
  16. u2attributes_count;  
  17. attribute_infoattributes[attrributes_count];  

我們需要了解的有很多,但是我們難以理解的就是cp_infoconstant_pool常量池。

一個常量池里面有很多表:

CONSTANT_Utf8 UTF-8編碼的Unicode字符串

CONSTANT_Integer int類型的字面值

CONSTANT_Float float類型的字面值

CONSTANT_Long long類型的字面值

CONSTANT_Double double類型的字面值

CONSTANT_Class 對一個類或接口的符號引用

CONSTANT_String String類型字面值的引用

CONSTANT_Field ref對一個字段的符號引用

CONSTANT_Method ref對一個類中方法的符號引用

CONSTANT_InterfaceMethod ref對一個接口中方法的符號引用

CONSTANT_NameAndType 對一個字段或方法的部分符號引用

這些表結構我也不解釋了,如果對class文件不夠了解也沒什么關系,知道個大概也行。那么我們了解了jvm體系,類裝載器工作流程,那么我們細看下類裝載器工作中,jvm運行時數據區的變化,方法區里面的結構等等。

在類裝載的過程中,每一個類裝載器都會在方法區里面形成一張表,這張表記載著該裝載器和對應的類的權限定名。沒這么一張表就形成了jvm內部的命名空間。同時在方法區里面還該類的常量池等信息。

那么說到這些,其實這個過程還是很模糊,而且很多知識也落下了,那么我們現在看一個詳細一點的裝載過程。

當裝載一個普通的類的時候,即調用類裝載器的loadClass方法,如果希望裝載的類還沒有被裝載到命名空間,那么jvm會傳遞一個該類型的全限定名給類裝載器,也就是常量池CONSTANT_Class_info(該表存儲著父類、類裝載器等信息)入口的裝載器,來試圖裝載被引用的類型,如果發起引用的類型是被jvm裝載器定義的,那么由jvm類裝載器裝載,否則由用戶自定義裝載器裝載,那么一旦被引用的類型被裝載了,jvm仔細檢查它的二進制數據,如果類是是一個類,并且不是java.lang.Object。jvm根據數據得到它的全限定名進行裝載(遞歸的應用了)這個過程還需要遞歸超接口。

裝載差不多講完了,一個完整的過程是:裝載連接——初始化。

那么連接和初始化就一帶而過了,重點放在垃圾回收。

連接的過程主要是驗證(確認類型符合java語言的語義,并且它不會危及虛擬機的完整性)、準備(java虛擬機為類變量分配內存,設計默認初始值)、解析(在類型的常量池中尋找類、接口、字段和方法的符合引用,把這些符號引用替換成直接引用的過程)。

初始化的時候,如果類存在直接超類,且超類還沒有被初始化,就先初始化直接超類。初始化接口并不需要初始化它的父接口。

補充:

Jvm當運行某個方法的時候,先把這個方法壓入java棧中,里面包含局部變量等信息,那么對象放入哪里呢?壓入棧的是對象的引用,即變量,所有的對象都存儲在堆中。

為什么要把對象放入堆,把變量之類的數據放入棧呢?說白了,對象太大了,存入棧中運算麻煩。(當然標準的回答不是這樣的,我這里僅僅是說明實質)

了解了這么一個過程之后,我們必然要了解垃圾回收機制了。

基本回收算法

1. 引用計數:比較古老的回收算法。原理是此對象有一個引用,即增加一個計數,刪除一個引用則減少一個計數。垃圾回收時,只用收集計數為0的對象。此算法最致命的是無法處理循環引用的問題。

2. 標記-清除:此算法執行分兩階段。***階段從引用根節點開始標記所有被引用的對象,第二階段遍歷整個堆,把未標記的對象清除。此算法需要暫停整個應用,同時,會產生內存碎片。

3. 復制:此算法把內存空間劃為兩個相等的區域,每次只使用其中一個區域。垃圾回收時,遍歷當前使用區域,把正在使用中的對象復制到另外一個區域中。次算法每次只處理正在使用中的對象,因此復制成本比較小,同時復制過去以后還能進行相應的內存整理,不過出現碎片問題。當然,此算法的缺點也是很明顯的,就是需要兩倍內存空間。

4. 標記-整理:此算法結合了標記-清除和復制兩個算法的優點。也是分兩階段,***階段從根節點開始標記所有被引用對象,第二階段遍歷整個堆,把清除未標記對象并且把存活對象壓縮到堆的其中一塊,按順序排放。此算法避免了標記-清除的碎片問題,同時也避免了復制算法的空間問題。

5. 增量收集:實施垃圾回收算法,即:在應用進行的同時進行垃圾回收。

6. 分代:基于對對象生命周期分析后得出的垃圾回收算法。把對象分為年青代、年老代、持久代,對不同生命周期的對象使用不同的算法(上述方式中的一個)進行回收。現在的垃圾回收器(從J2SE1.2開始)都是使用此算法的。

原文鏈接:http://lrysir.iteye.com/blog/1153226

責任編輯:張偉 來源: lrysir的博客
相關推薦

2012-12-20 09:15:29

JVMJVM平臺JVM技術

2009-07-09 18:31:02

Microsoft J

2009-01-18 09:19:00

DHCPVlANIP

2021-11-11 11:31:54

擺動序列數字

2021-10-13 21:43:18

JVMRPC框架

2022-03-01 10:59:38

機器魚細胞研發

2019-04-17 18:04:10

網卡虛擬化網絡設備

2015-10-20 10:57:22

無線充電無線技術

2011-07-13 10:32:09

開源

2021-12-27 07:45:30

CSS 技巧煙霧效果

2021-03-26 10:02:29

PythonVIP視頻看電影

2014-06-24 09:24:24

密碼身份驗證

2022-02-10 08:07:41

機器學習低代碼開發

2009-12-25 10:07:38

Linux系統多點觸摸

2022-06-08 18:02:38

NVIDIA

2019-07-09 08:44:00

DeepfakeGAN人工智能

2021-08-02 09:01:29

PythonMySQL 數據庫

2015-07-29 14:19:24

2011-09-14 09:42:17

虛擬化ROI

2021-06-02 09:55:20

JVM排查JVM內存過高技術
點贊
收藏

51CTO技術棧公眾號

奇米成人av国产一区二区三区| 成人午夜在线观看| 蜜桃av在线免费观看| 久久午夜羞羞影院免费观看| 日本欧洲国产一区二区| 天天超碰亚洲| 欧美一级大胆视频| 免费一区二区三区在线视频| 亚洲精品久久久久| 菠萝蜜视频国产在线播放| 一本到不卡精品视频在线观看 | 国内精品国产成人国产三级粉色 | 石原莉奈一区二区三区在线观看| 成人综合色站| 欧美ab在线视频| 99热国产免费| 99av国产精品欲麻豆| 岛国一区二区三区高清视频| 欧美在线日韩| 99久久精品久久久久久ai换脸| 久久精品青草| 国产精品一区二区三区精品| 亚洲一区区二区| 日本在线成人一区二区| 蜜桃91丨九色丨蝌蚪91桃色| 免费观看中文字幕| 91美女片黄在线| 99热在线免费| 精品久久久久久久中文字幕| 精品999视频| 精品欧美黑人一区二区三区| 日本蜜桃在线观看视频| 日韩中文在线不卡| 99热这里只有精品首页| 国产精品视频区| 一区二区精品| av无码久久久久久不卡网站| 国产精品国产三级国产有无不卡 | 亚洲私人影院在线观看| 97色伦图片97色伦在线电影| 欧美曰成人黄网| 九色porny丨首页入口在线| 中文字幕欧美精品在线| 玖玖玖免费嫩草在线影院一区| 国产欧美中文字幕| 日日夜夜精品视频天天综合网| 异国色恋浪漫潭| 久久久久国产精品人| 116美女写真午夜一级久久| 欧洲一区在线电影| 在线免费日韩片| 国产999精品视频| 国产精品久久777777毛茸茸| 国产又粗又大又爽的视频| 中文字幕国产一区二区| 国产对白叫床清晰在线播放| 日韩成人在线电影网| 日韩欧美国产大片| 日韩精品电影网站| 亚洲日本电影在线| 激情av在线| 国产91色在线播放| 美女看a上一区| 国产黄色高清在线| 欧美色电影在线| 国产精品一区二区三区四区在线观看 | 国产97色在线 | 日韩| 欧美日韩国产综合新一区| a'aaa级片在线观看| 欧美野外猛男的大粗鳮| 久久中文字幕一区二区三区| 亚洲这里只有精品| 91精品国产一区二区三区| 欧洲一区在线| 久久久久一区二区三区| 国产女主播一区| a免费在线观看| 国产成人激情视频| 韩国v欧美v亚洲v日本v| 中文字幕网在线| 国产亚洲欧美日韩美女| 欧美视频成人| 亚洲 欧美 日韩系列| 日韩一卡二卡三卡国产欧美| 不卡视频一区二区三区| 久久精品一区二区国产| 97看剧电视剧大全| 亚洲欧美日韩天堂| 好看的日韩av电影| 成人观看视频| 亚洲剧情一区二区| 亚洲国产高清一区| 电影天堂爱爱爱爱| 日韩小视频网址| 久久亚洲风情| 中文字幕中文字幕在线中文字幕三区 | 日韩一区二区三区av| 精品欧美久久| 精品少妇无遮挡毛片| 精品一区电影国产| 国产精品人人爽人人做我的可爱| 黄污在线观看| 国产69精品久久久| 成人黄色大片在线观看| 婷婷在线播放| 国产视频在线观看一区| 亚洲一区在线电影| 国产66精品| 国产精品宾馆在线精品酒店| 国产麻豆精品在线| 影音先锋国产精品| japanese23hdxxxx日韩| 男人添女人下部视频免费| 五月天丁香久久| 台湾色综合娱乐中文网| www一区二区www免费| 亚洲人成电影网站| 久久精品国产999大香线蕉| 免费在线你懂的| 国产精品乱码| 欧美亚洲日本一区| 欧美日韩综合| 在线视频1区2区| 国产福利亚洲| 一区视频在线看| 真人做人试看60分钟免费| 校园春色影音先锋| 超碰中文在线| 清纯唯美亚洲色图| 国产亚洲精品久久| 欧美一区二区三区另类| 国产亚洲亚洲国产一二区| 给我免费播放片在线观看| 国产成人精品日本亚洲11| 91精品国自产在线观看| 欧美精品成人在线| 亚洲毛片av在线| 亚洲永久精品国产| 欧美网站大全在线观看| 色国产精品一区在线观看| 成人动漫在线播放| 99精品一区| 白嫩亚洲一区二区三区| 精品精品导航| 精灵使的剑舞无删减版在线观看| 新欧美整片sss第一页| 黄页在线观看| 国产va在线| 有色激情视频免费在线| 天堂在线第六区| 在线三级av| 久久这里精品| 日韩欧美小视频| 久久大胆人体| 精品久久影视| 亚洲伊人精品酒店| 69日本xxxxxxxxx49| 一区二区在线观| 中文字幕日韩欧美| 亚洲欧美综合v| 国产精品的网站| 欧美精品18| 理论片午午伦夜理片在线播放| 国产经典一区二区三区| 亚洲精品一区二区三区在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 一级毛片久久久| 777久久精品一区二区三区无码 | 亚洲欧洲国产精品久久| 精品免费日韩av| 中文字幕欧美一| 99riav久久精品riav| 亚洲自拍都市欧美小说| av基地在线| 黄色网址在线免费观看| 国产主播福利| 午夜国产一区二区三区| 成人免费高清在线播放| 欧美军人男男激情gay| 亚洲激情中文1区| 国产精品夜间视频香蕉| 激情se五月| 欧美天天综合| 一本色道久久综合狠狠躁的推荐| 国产欧美婷婷中文| 国产小视频免费在线观看| 免费日韩av| 亚洲九九九在线观看| 亚洲精品免费在线看| 99精品在线免费观看| 国产精品高潮呻吟| 91色精品视频在线| 国产拍在线视频| 久久高清免费| 一区二区毛片| thepron国产精品| 在线观看欧美视频| 一级在线免费观看| 国产精品自拍三区| 91一区二区三区|