日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JVM—学习路线

發布時間:2024/4/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM—学习路线 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?目錄

1、JVM?簡介

3、JVM加載class文件的原理機制?


1)Class Loader?類加載器?

類加載器的作用是加載類文件到內存,比如編寫一個HelloWord.java?程序,然后通過javac?編譯成class?文件,那怎么才能加載到內存中被執行呢?Class Loader?承擔的就是這個責任,那不可能隨便建立一個.class?文件就能被加載的,Class Loader?加載的class?文件是有格式要求,在《JVM Specification?》中式這樣定義Class?文件的結構:

ClassFile {u4 magic;u2 minor_version;u2 major_version;u2 constant_pool_count;cp_info constant_pool[constant_pool_count-1];u2 access_flags;u2 this_class;u2 super_class;u2 interfaces_count;u2 interfaces[interfaces_count];u2 fields_count;field_info fields[fields_count];u2 methods_count;method_info methods[methods_count];u2 attributes_count;attribute_info attributes[attributes_count];}

需要詳細了解的話,可以仔細閱讀《JVM Specification?》的第四章“The class File Format?”,這里不再詳細說明。友情提示:Class Loader?只管加載,只要符合文件結構就加載,至于說能不能運行,則不是它負責的,那是由Execution Engine?負責的。

2) Execution Engine?執行引擎?

執行引擎也叫做解釋器(Interpreter)?,負責解釋命令,提交操作系統執行。

3) Native Interface?本地接口

本地接口的作用是融合不同的編程語言為Java?所用,它的初衷是融合C/C++?程序,Java?誕生的時候是C/C++?橫行的時候,要想立足,必須有一個聰明的、睿智的調用C/C++?程序,于是就在內存中專門開辟了一塊區域處理標記為native?的代碼,它的具體做法是Native Method Stack?中登記native?方法,在Execution Engine?執行時加載native libraies?。目前該方法使用的是越來越少了,除非是與硬件有關的應用,比如通過Java?程序驅動打印機,或者Java?系統管理生產設備,在企業級應用中已經比較少見,因為現在的異構領域間的通信很發達,比如可以使用Socket?通信,也可以使用Web Service?等等,不多做介紹。

4) Runtime data area?運行數據區?

運行數據區是整個JVM?的重點。我們所有寫的程序都被加載到這里,之后才開始運行,Java?生態系統如此的繁榮,得益于該區域的優良自治。

整個JVM?框架由加載器加載文件,然后執行器在內存中處理數據,需要與異構系統交互是可以通過本地接口進行,瞧,一個完整的系統誕生了!

1、JVM?簡介

  JVM?是我們Javaer?的最基本功底了,剛開始學Java?的時候,一般都是從“Hello World?”開始的,然后會寫個復雜點class?,然后再找一些開源框架,比如Spring?,Hibernate?等等,再然后就開發企業級的應用,比如網站、企業內部應用、實時交易系統等等,直到某一天突然發現做的系統咋就這么慢呢,而且時不時還來個內存溢出什么的,今天是交易系統報了StackOverflowError?,明天是網站系統報了個OutOfMemoryError?,這種錯誤又很難重現,只有分析Javacore?和dump?文件,運氣好點還能分析出個結果,運行遭的點,就直接去廟里燒香吧!每天接客戶的電話都是戰戰兢兢的,生怕再出什么幺蛾子了。我想Java?做的久一點的都有這樣的經歷,那這些問題的最終根結是在哪呢?——?JVM?。

  JVM?全稱是Java Virtual Machine?,Java?虛擬機,也就是在計算機上再虛擬一個計算機,這和我們使用?VMWare不一樣,那個虛擬的東西你是可以看到的,這個JVM?你是看不到的,它存在內存中。我們知道計算機的基本構成是:運算器、控制器、存儲器、輸入和輸出設備,那這個JVM?也是有這成套的元素,運算器是當然是交給硬件CPU?還處理了,只是為了適應“一次編譯,隨處運行”的情況,需要做一個翻譯動作,于是就用了JVM?自己的命令集,這與匯編的命令集有點類似,每一種匯編命令集針對一個系列的CPU?,比如8086?系列的匯編也是可以用在8088?上的,但是就不能跑在8051?上,而JVM?的命令集則是可以到處運行的,因為JVM?做了翻譯,根據不同的CPU?,翻譯成不同的機器語言。

  JVM?中我們最需要深入理解的就是它的存儲部分,存儲?硬盤?NO?,NO?,?JVM?是一個內存中的虛擬機,那它的存儲就是內存了,我們寫的所有類、常量、變量、方法都在內存中,這決定著我們程序運行的是否健壯、是否高效,接下來的部分就是重點介紹之。我們先把JVM?這個虛擬機畫出來,從這個圖中可以看到,JVM?是運行在操作系統之上的,它與硬件沒有直接的交互,如下圖所示:

?

3、JVM加載class文件的原理機制?

?

Java中的所有類,都需要由類加載器裝載到JVM中才能運行。類加載器本身也是一個類,而它的工作就是把class文件從硬盤讀取到內存中。在寫程序的時候,我們幾乎不需要關心類的加載,因為這些都是隱式裝載的,除非我們有特殊的用法,像是反射,就需要顯式的加載所需要的類。類裝載方式,有兩種 :

  • 隱式裝載, 程序在運行過程中當碰到通過new 等方式生成對象時,隱式調用類裝載器加載對應的類到jvm中,
  • 顯式裝載, 通過class.forname()等方法,顯式加載需要的類?
  • 隱式加載與顯式加載兩者本質是一樣??Java類的加載是動態的,它并不會一次性將所有類全部加載后再運行,而是保證程序運行的基礎類(像是基類)完全加載到jvm中,至于其他類,則在需要的時候才加載。這當然就是為了節省內存開銷。Java的類加載器有三個,對應Java的三種類:

  • 系統類:BootstrapLoader? // 負責加載系統類?(指的是內置類,像是String,對應于C#中的System類和C/C++標準庫中的類)
  • 擴展類:- - ExtClassLoader?? //?負責加載擴展類(就是繼承類和實現類)
  • 由程序員自定義的類 :- - AppClassLoader?? //?負責加載應用類(程序員自定義的類)
  • 三個加載器各自完成自己的工作,但它們是如何協調工作呢?哪一個類該由哪個類加載器完成呢?為了解決這個問題,Java采用了委托模型機制。委托模型機制的工作原理很簡單:當類加載器需要加載類的時候,先請示其Parent(即上一層加載器)在其搜索路徑載入,如果找不到,才在自己的搜索路徑搜索該類。這樣的順序其實就是加載器層次上自頂而下的搜索,因為加載器必須保證基礎類的加載。之所以是這種機制,還有一個安全上的考慮:如果某人將一個惡意的基礎類加載到jvm,委托模型機制會搜索其父類加載器,顯然是不可能找到的,自然就不會將該類加載進來。我們可以通過這樣的代碼來獲取類加載器:

    ClassLoader loader = ClassName.class.getClassLoader(); ClassLoader ParentLoader = loader.getParent();

    注意一個很重要的問題,就是Java在邏輯上并不存在BootstrapKLoader的實體!因為它是用C++編寫的,所以打印其內容將會得到null。? ? ??前面是對類加載器的簡單介紹,它的原理機制非常簡單,就是下面幾個步驟:

    1.裝載:查找和導入class文件;

    2.連接:

    ??????(1)檢查:檢查載入的class文件數據的正確性;

    ??????(2)準備:為類的靜態變量分配存儲空間;

    ??????(3)解析:將符號引用轉換成直接引用(這一步是可選的)

    3.初始化:初始化靜態變量,靜態代碼塊。

    ??????這樣的過程在程序調用類的靜態成員的時候開始執行,所以靜態方法main()才會成為一般程序的入口方法。類的構造器也會引發該動作。

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的JVM—学习路线的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日韩精品人妻中文字幕 | 国产无套内射又大又猛又粗又爽 | 成人国产精品入口 | 欧美一性一乱一交一视频 | 日本高清网色 | 国产精品无码av在线播放 | 夜夜操国产 | 国模大胆一区二区三区 | 理论片大全免费理伦片 | 国产av人人夜夜澡人人爽麻豆 | √天堂8资源中文在线 | 一边摸内裤一边吻胸 | 国产不卡视频 | xx久久 | 男人天堂av电影 | 五月色婷 | 国产性hd| 日本老妇高潮乱hd | 日韩成年视频 | 精品福利片 | 日韩免费不卡视频 | 麻豆传媒一区 | 日产久久久久久 | 日韩精品第一 | a级片免费看 | 欧美粗大猛烈老熟妇 | 以女性视角写的高h爽文 | 欧美性xxxxx 亚洲特黄一级片 | 久草美女 | 亚洲视频在线观看视频 | 999久久久精品视频 亚洲视频精品在线 | 亚洲欧美999 | 国产精品热久久 | 六月丁香激情网 | 亚洲欧洲精品成人久久奇米网 | 中文字幕一区二区视频 | 激情视频一区二区三区 | 成人中文字幕在线观看 | 黄色777| 伊人看片 | 国产欧美日韩在线视频 | 嫩草嫩草嫩草嫩草嫩草 | 国产午夜视频 | 日韩小视频在线观看 | 日韩一级色片 | www.xxx.日本 | av影视在线观看 | h网址在线观看 | 不卡视频一区 | 欧美日韩国产精品成人 | 狠狠躁18三区二区一区 | se在线观看 | 日韩精品网站 | 日本成人毛片 | 伊人影院久久 | 日本www视频在线观看 | 天天射综合网站 | 精品人妻伦一二三区久 | 欧美人体视频一区二区三区 | 国产偷亚洲偷欧美偷精品 | 网站国产| 91网站免费 | 激情欧美综合 | 国产精品178页 | 免费精品视频一区二区三区 | 俺去久久 | 神马影院午夜伦理片 | 亚洲三区在线观看无套内射 | 吞精囗交69激情欧美 | 国产一区第一页 | 操亚洲| 天天爽天天色 | 日本va欧美va国产激情 | 国产又粗又猛又爽又黄的网站 | 精品欧美一区二区三区在线观看 | 蜜臀久久99精品久久久画质超高清 | 免费a在线观看 | 国产精品精品软件视频 | 国产黄色大片在线观看 | 九一在线视频 | 欧美日韩国产传媒 | 欧美色xxxx| 公侵犯人妻一区二区 | 4438成人网 | 亚州精品视频 | 国产精品三级 | 欧美精品一区二区免费看 | 国产成人精品一区二区三区无码熬 | 国产精品啊啊啊 | 中国免费看的片 | 色七七在线 | 中文字幕人成乱码熟女香港 | 国产区视频在线观看 | 久久久午夜电影 | 欧美精品国产一区二区 | 日本高清视频免费看 | 杨幂一区二区国产精品 | 亚洲男人影院 | 久久久久久成人 |