做者:小傅哥
博客:https://bugstack.cn
Github:https://github.com/fuzhengwei/CodeGuide/wikihtml
沉澱、分享、成長,讓本身和他人都能有所收穫!😄
截至到這已經寫了22篇面經手冊,你看了多少?
java
😄其實小傅哥就是藉着面經的幌子在講 Java 核心技術
,探索這些核心知識點面試的背後到底在問什麼。git
想問一些面試官,是由於你們都在問因此你問,仍是你想從這裏問出什麼? 其實可能不少面試官若是不瞭解這些技術,每每會被求職者的答案擊碎心裏,哈哈哈哈哈哈。好比:梅森旋轉算法
、開放尋址
、斐波那契散列
、啓發式清理
、Javassist代理方式
、擾動函數
、哈希一致
等等。程序員
記住,讓懂了就是真的懂,比看水文、背答案要爽的多!嗯,就是有時候燒腦!github
謝飛機,小記!
,也不知道咋了,總感受有些面試攻擊性不大,但侮辱性極強
!面試
面試官:謝飛機寫過 Java 嗎?算法
謝飛機:那固然寫過,寫了3年多了!數據庫
面試官:那,JDK
、JRE
、JVM
之間是什麼關係?編程
謝飛機:嗯 J J J,JDK 裏面有 JRE,JVM 好像在 JRE 裏!?小程序
面試官:那,Client模式、Server模式是啥?
謝飛機:嗯!?啥?
面試官:好吧,問個簡單的。JVM 是如何工做的?背答案了嗎?
謝飛機:再見,面試官!
Oracle has two products that implement Java Platform Standard Edition (Java SE) 8: Java SE Development Kit (JDK) 8 and Java SE Runtime Environment (JRE) 8.JDK 8 is a superset of JRE 8, and contains everything that is in JRE 8, plus tools such as the compilers and debuggers necessary for developing applets and applications. JRE 8 provides the libraries, the Java Virtual Machine (JVM), and other components to run applets and applications written in the Java programming language. Note that the JRE includes components not required by the Java SE specification, including both standard and non-standard Java components.
The following conceptual diagram illustrates the components of Oracle's Java SE products:
Description of Java Conceptual Diagram
關於 JDK、JRE、JVM 之間是什麼關係,在 Java 平臺標準中已經明肯定義了。也就是上面的英文介紹部分。
綜上,從這段官網的平臺標準介紹和概念圖能夠看出,咱們運行程序的 JVM 是已經安裝到 JDK 中,只不過可能你開發了好久的代碼,也沒有注意過。沒有注意過的最大緣由是,沒有開發過一些和 JVM 相關的組件代碼
關於,各 JDK 版本的平臺標準,能夠自行比對學習,以下:
咱們默認安裝完 JDK 會有 jdk1.8.0_45
、jre1.8.0_45
,兩個文件夾。其實在 JDK 的文件中還會有 JRE 的文件夾,他們兩個 JRE 文件夾的結構是同樣的。
jvmti.h
。例如:基於jvmti設計非入侵監控.so
.dll
.dylib
那麼 jvm 在哪一個文件夾呢?
可能你以前並無注意過 jvm 原來在這裏:C:\Program Files\Java\jdk1.8.0_45\jre\bin\server
綜上經過 Java 平臺標準
和 JDK 的目錄結構
,JDK 是 JRE 的超集,JDK 包含了 JRE 全部的開發、調試以及監視應用程序的工具。以及以下重要的組件:
JRE 自己也是一個運行在 CPU 上的程序,用於解釋執行 Java 代碼。
通常像是實施的工做,會在客戶現場安裝 JRE,由於這是運行 Java 程序的最低要求。
其實簡單說 JVM 就是運行 Java 字節碼的虛擬機,JVM 是一種規範,各個供應商均可以實現本身 JVM虛擬機。就像小傅哥本身也按照虛擬機規範和手寫JVM的相關書籍實現了,基於Java實現的JVM虛擬機。
源碼地址:https://github.com/fuzhengwei/itstack-demo-jvm
內容簡介:本代碼主要介紹如何經過 java 代碼來實現 JVM 的基礎功能(搜索解析class文件、字節碼命令、運行時數據區等),從而讓java程序員經過最熟知的java程序,學習JVM是如何將java程序一步步跑起來的。
固然,咱們下載 Oracle 公司的 JVM 與本身實現的相比,要高級的多。他們的設計有不斷優化的內存模型、GC回收策略、自適應優化器等。
另外,JVM 之因此稱爲虛擬機,主要就是由於它爲了實現 「write-once-run-anywhere」。提供了一個不依賴於底層操做系統和機器硬件結構的運行環境。
在 JVM 中有兩種不一樣風格的啓動模式, Client模式、Server模式。
修改配置模式文件:C:\\Program Files\\Java\\jre1.8.0_45\\lib\\amd64\\jvm.cfg
# List of JVMs that can be used as an option to java, javac, etc. # Order is important -- first in this list is the default JVM. # NOTE that this both this file and its format are UNSUPPORTED and # WILL GO AWAY in a future release. # # You may also select a JVM in an arbitrary location with the # "-XXaltjvm=<jvm_dir>" option, but that too is unsupported # and may not be available in a future release. # -server KNOWN -client IGNORE
這部分屬於 JVM 的核心知識,但不是本篇重點,會在後續的章節中陸續講到。本章只作一些介紹。