1. 程式人生 > >JVM(一):久識你名,初居我心

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 使用方法

JVMJVM的執行時資料區

由於Java程式是交由JVM執行的,所以我們在談Java記憶體區域劃分的時候事實上是指JVM記憶體區域劃分。在討論JVM記憶體區域劃分之前,先來看一下Java程式具體執行的過程: 如上圖所示,首先Java原始碼檔案(.java字尾)會被Java編譯器編譯為位元組碼檔案(.class字尾),

JVMRun-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 DOMVirtual Dom 介紹

前言 目前最流行的兩大前端框架,React和Vue,都不約而同的藉助Virtual DOM技術提高頁面的渲染效率。那麼,什麼是Virtual DOM?它是通過什麼方式去提升頁面渲染效率的呢?本系列文章會詳細講解Virtual DOM的建立過程,並實現一個簡單的Diff演

JVM——記憶體模型程式計數器

擁有最高權利卻又從事著平民百姓的基礎工作是一種什麼樣的體驗? 對於從事C、C++的程式設計師來說,這種感覺他們實在是熟悉得不能再熟悉了。在記憶體管理的領域,不論是物件的生命的開始,還是終結,所有物件的命運都被他們掌握在手裡。他們既是掌管最高權利的皇帝,也是從事基礎工作的平民。 那麼Java程

INDEMIND帶玩轉OpenCV4.0DIS光流演算法解析

文章目錄 一.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子類 想