JVM(一):久識你名,初居我心
聊聊JVM
JVM,一個熟悉又陌生的名詞,從認識Java的第一天起,我們就會聽到這個名字,在參加工作的前一兩年,面試的時候還會經常被問到JDK,JRE,JVM這三者的區別。
JVM可以說和我們是老朋友了,但是在工作中的應用場景也許不如那些框架,但是在關鍵時候還是得靠它去搞定問題,俗話說得好,知己知彼,方能百戰不殆,JVM作為前往高階工程師的一道坎,從這篇文章開始,我們會去逐步的分析,講解,攻克這座大山。
什麼是JVM
JVM(Java Virtual Machine),翻譯成中文就是Java虛擬機器,總所周知,Java語言有一個非常鮮明的特性,也是前期Java 發展的口號之一
Write Once Run Everywhere
"一次編寫,到處執行",相信作為一名Java開發人員,我們對這句話都不會陌生,這句話的底氣就來源於我們的JVM。
其中的原理就是,我們所編寫的源程式java檔案,被編譯成了JVM可以識別的位元組碼檔案(以class為字尾的檔案),到處執行所依賴的其實就是為不同的平臺實現了不同的虛擬機器。
java的程式執行在JVM上,而非直接執行在CPU上。
JVM的學習要點
首先,我們需要知道的是,作為一個虛擬機器,必定是擁有自己的記憶體機制,所以我們必須對他的記憶體機制有所瞭解,其中包括了記憶體結構,垃圾回收機制等一些內容。
其次,我們需要知道,我們寫的原始碼被翻譯成了位元組碼檔案(因其後綴名為class,所以也會被稱為類檔案),對於這個檔案的結構,我們必須有所瞭解,在知道了該類的結構下,對於一些併發和多執行緒的知識才能做到洞若觀火,知其然知其所以然。
該位元組碼檔案在進入虛擬機器到執行之前,會經歷一系列的過程,我們對於這個過程的機制一般稱為類載入機制,當這個類被載入到JVM中,在執行的過程中,會有一系列的指令去幫助程式到達最終的目的。
其實,上面說了那麼多,都是在幫助我們對於java檔案的一個執行過程發生的事情有一個更深的瞭解,在遇到問題時,我們可以胸有成竹,刨根問底的去解決問題,但是在日常工作中,我們不會甚至肯定不會去看我們寫完的位元組碼檔案,我們關心的是如何使用工具去調優,使最低的成本發揮最高的價值,通過對JVM的調優使我們的程式的魯棒性得到提升。
關於JVM的一個補充
雖然,JVM叫做Java Virtual Machine,但是需要注意,隨著Java的發展壯大,有越來越多的語言加入到JVM生態中,比如我們耳熟能詳的Groovy,Scala,Kotlin等等,他們都是依託於JVM平臺的,編譯產生的檔案也都是字尾為class的位元組碼檔案。
寫在末尾
當親愛的讀者大人看到這篇文章的時候,說明Vi的技術部落格的JVM系列已經開啟更新,之前的Spring Boot系列暫告一段落(後續會不定期更新),同時最開始接觸寫作時寫的Java基礎系列也會迎來一次回爐重造,敬請期待。
很慶幸能夠遇到你們,謝謝你們一直以來的支援和陪伴 :)
公眾號
相關推薦
JVM(一):久識你名,初居我心
聊聊JVM JVM,一個熟悉又陌生的名詞,從認識Java的第一天起,我們就會聽到這個名字,在參加工作的前一兩年,面試的時候還會經常被問到JDK,JRE,JVM這三者的區別。 JVM可以說和我們是老朋友了,但是在工作中的應用場景也許不如那些框架,但是在關鍵時候還是得靠它去搞定問題,俗話說得好,知己知彼,方能百戰
nodejs web應用伺服器搭建(一):跑起你的伺服器
前言 本章會分四部分來講,在開始教程之前請準備好相關基礎知識 & 文件 JavaScript基礎;AMD概念;ES5 | ES6語法;(這些沒弄清楚估計往下看也看不下去) nodejs 環境搭建 nodejs sdk文件 express 使用方法
JVM(一):JVM的執行時資料區
由於Java程式是交由JVM執行的,所以我們在談Java記憶體區域劃分的時候事實上是指JVM記憶體區域劃分。在討論JVM記憶體區域劃分之前,先來看一下Java程式具體執行的過程: 如上圖所示,首先Java原始碼檔案(.java字尾)會被Java編譯器編譯為位元組碼檔案(.class字尾),
JVM(一):Run-Time Data Areas(執行時資料區)/ 記憶體區域
一:前言 特別說明:文章中引用的圖片是通過谷歌的方式找到的,當時並沒有找到圖片是否擁有版權,如果遇到了的話,請告知博主,我會將相應的圖片刪除。 本部落格主要總結的是JVM的Run Time Data Areas(執行時資料區),也就是我們常說的記憶體區域。借
產品的定價策略(一):想通過產品掙錢,首先你產品的目標客戶得不差錢
有許多工程技術上很好,很優秀的產品,甚至一定程度上得到了認可,卻無法生存的產品,關門大吉。人們常常說是因為技術人不善於營銷,這是一方面原因,更重要的我認為是他們的產品本身,就不適合放在市場上賺錢,再怎麼營銷也很難翻盤。這無關產品本身是否優秀,而是指產品的定位和產品的形態。 ### 什麼是產品的客戶 許多技術
構建NetCore應用框架之實戰篇(一):什麽是框架,如何設計一個框架
net 希望 dmi 清晰 構建 組織 評估 系統開發 概念 一、系列簡述 本篇起,將通過一系列文章,去描述如何構建一個應用開發框架,並以作者開發的框架為例,逐個點展開分析,如何從零開始,構建自己的開發框架。 本系列文章的目的,是帶領有一編程經驗的人,通過動手,初步完成
jQuery -- 光陰似箭(一):初見 jQuery -- 基本用法,語法,選擇器
jQuery -- 知識點回顧篇(一):初見jQuery -- 基本用法,語法,選擇器 1. 使用方法 jQuery 庫位於一個 JavaScript 檔案中,其中包含了所有的 jQuery 函式。 網頁需要使用到 jQuery 時,需要先在網頁中引入 jQuery 的 js檔案。
影象演算法(一):最近鄰插值,雙線性插值,三次插值
最近在複習影象演算法,對於一些簡單的影象演算法進行一個程式碼實現,由於找工作比較忙,具體原理後期補上,先上程式碼。今天先給出最近鄰插值,雙線性插值,三次插值。 1.最近鄰插值 原始圖中影響點數為1 (1)程式碼 # include<iostream>
圖文並茂- 12C RAC的安裝 (一) : 作業系統引數的配置,ASM共享磁碟配置
虛擬環境:vCenter OS: redhat 7.4 RDBMS:12.1.0.2.0 關閉防火牆,不然在安裝GI的時候,會提示各個節點之間網路不通,雖然可以ping通 systemctl stop firewalld chkconfig firewalld o
資料視覺化 三步走(一):資料採集與儲存,利用python爬蟲框架scrapy爬取網路資料並存儲
前言 最近在研究python爬蟲,突然想寫部落格了,那就寫點東西吧。給自己定個小目標,做一個完整的簡單的資料視覺化的小專案,把整個相關技術鏈串聯起來,目的就是為了能夠對這塊有個系統的認識,具體設計思路如下: 1. 利用python爬蟲框架scr
【小說連載】網絡紅顏(一):當你遇到一個不收錢的出租車司機
網絡 美女 職場 生活 小說 簡介:這是一段描寫網絡工程師生活的故事。故事中沒有英雄,沒有勵誌,也沒有所謂的雞湯文化和狼性文化。有的,或許是一種對技術的執著,對愛情的渴望或者是對名利的一種追求,但又能追求到什麽呢?聲明:本故事所出現的人名,公司名均為虛構,如有雷同恰屬巧合小說將在本站博客和
Java虛擬機(一):JVM的運行機制
包括 MQ inf 分配 font 可能 mage star 都是 一、JVM啟動流程 1.java虛擬機啟動的命令是通過java +xxx(類名,這個類中要有main方法)或者javaw啟動的。 2.執行命令後,系統第一步做的就是裝載配置,會在當前路徑中尋找jvm的
RxJava 沈思錄(一):你認為 RxJava 真的好用嗎?
list 理念 public 圖片文件 ide 方便 復制 等於 ret 本人兩年前第一次接觸 RxJava,和大多數初學者一樣,看的第一篇 RxJava 入門文章是扔物線寫的《給 Android 開發者的 RxJava 詳解》,這篇文章流傳之廣,相信幾乎所有學習 RxJa
你不知道的 Virtual DOM(一):Virtual Dom 介紹
前言 目前最流行的兩大前端框架,React和Vue,都不約而同的藉助Virtual DOM技術提高頁面的渲染效率。那麼,什麼是Virtual DOM?它是通過什麼方式去提升頁面渲染效率的呢?本系列文章會詳細講解Virtual DOM的建立過程,並實現一個簡單的Diff演
JVM——記憶體模型(一):程式計數器
擁有最高權利卻又從事著平民百姓的基礎工作是一種什麼樣的體驗? 對於從事C、C++的程式設計師來說,這種感覺他們實在是熟悉得不能再熟悉了。在記憶體管理的領域,不論是物件的生命的開始,還是終結,所有物件的命運都被他們掌握在手裡。他們既是掌管最高權利的皇帝,也是從事基礎工作的平民。 那麼Java程
INDEMIND帶你玩轉OpenCV4.0(一):DIS光流演算法解析
文章目錄 一.OpencCV 4.0 新特性介紹 首先是OpenCV完全支援了C++ 11 DNN(深度神經網路)模組是目前OpenCV更新最重要的模組 G-API 為演算法的硬體優化
概率論與數理統計(一):教你一步步推貝葉斯公式
參考資料:《概率論與數理統計》 陳希孺 2000.3/2016.8 1,概率是什麼? 概率是表示某種情況出現的可能性大小的一種數量指標,它介於0和1之間。 概
JVM調優總結(一):基本概念
一、資料型別 Java虛擬機器中,資料型別可以分為兩類:基本型別和引用型別。 基本型別的變數儲存原始值,即:他代表的值就是數值本身; 而引用型別的變數儲存引用值。“引用值”代表了某個物件的引用,而不是物件本身,物件本身存放在這個引用值所表示的地址的位置。
安卓APP實戰(一):需求介紹及安卓工程結構再識
在搭建好開發環境,大致瞭解了Android的相關基礎知識,新建好第一個專案併成功執行後。便開始做第一個專案!需求如下: APP應用名稱叫歡樂寫數字 (Android專案開發實戰入門 明日科技出版 中第一個專案,本書紙質內容只有八個專案,並且屬於傻瓜式教程,似乎有基礎知識介紹在光盤裡,我沒有找
PyTorch 學習筆記(一):讓PyTorch讀取你的資料集
本文擷取自《PyTorch 模型訓練實用教程》,獲取全文pdf請點選:https://github.com/tensor-yu/PyTorch_Tutorial 文章目錄 Dataset類 構建Dataset子類 想