jvm基礎知識
發表時間:2020-10-19
發布人:葵宇科技
浏覽次數:62
JVM基礎知識
- 1. 常見編程語言類型
- 高級語言分類
- 2. 跨平台
- 3. 運行時(Runtime)與虛拟機(VM)
- 4. 内存管理和(hé)垃圾回收(GC)
1. 常見編程語言類型
從底向上劃分為最基本的三大類:機器(qì)語言、彙編 語言、高級語言。
- 機器(qì)語言:直接給計算機執行的語言,這種語言主要是利用二進制編碼進行指令發送,也就是二進制内容形式的文(wén)件
- 彙編語言:主要是以縮寫英文(wén)作為标符進行編寫的,介于高級語言與集器(qì)語言之間
- 高級語言:以更人性化的方式形式進行編碼,代碼編寫完成後通(tōng)過編譯或解釋,轉換成彙編 碼或機器(qì)碼,之後再傳遞給計算機去執行。
高級語言分類
有無虛拟機
- 有虛拟機:Java,Lua,Ruby,部分JavaScript的實現等等
- 無虛拟機:C,C++,C#,Golang,以及大部分常見的編程語言
變量是不是有确定的類型
- 靜态類型:Java,C,C++等等
- 動(dòng)态類型:所有腳本類型的語言
是編譯執行,還是解釋執行
- 編譯執行:C,C++,Golang,Rust,C#,Java,Scala,Clojure,Kotlin, Swift…等等
- 解釋執行:JavaScript的部分實現和(hé)NodeJS,Python,Perl,Ruby…等等
語言特點
- 面向過程:C,Basic,Pascal,Fortran等等
- 面向對象:C++,Java,Ruby,Smalltalk等等
- 函數式編程:LISP、Haskell、Erlang、OCaml、Clojure、F#等等
2. 跨平台
一般來說解釋型語言都是跨平台的,同一份腳本代碼,可(kě)以由不同平台上 的解釋器(qì)解釋執行。但是對于編譯型語言,存在兩種級别的跨平台: 源碼跨平台和(hé)二 進制跨平台。
1、典型的源碼跨平台(C++):
C++裡需要把一份源碼,在不同平台上分别編譯,生成這個(gè)平台相關(guān)的二進制可(kě)執行文(wén)件,然後才能在相應的平台上運行。 這樣就需要在各個(gè)平台都有開發工具和(hé)編譯器(qì),而且在各個(gè)平台所依賴的開發庫都需要是一緻或兼容的。
2、典型的二進制跨平台(Java字節碼):
java隻要将代碼編譯稱字節碼文(wén)件,然後再不同平台安裝虛拟機,就可(kě)以實現跨平台了,
- 腳本語言直接使用不同平台的解釋器(qì)執行,稱之為腳本跨平台,平台間的差異由不同平台上的解釋器(qì)去解決。
- 編譯型語言的代碼跨平台,同一份代碼,需要被不同平台的編譯器(qì)編譯成相應的二進制文(wén)件,然後再去分發和(hé)執行,不同平台間的差異由編譯器(qì)去解決。
- 編譯型語言的二進制跨平台,同一份代碼,先編譯成一份通(tōng)用的二進制文(wén)件,然後分發到不同平台,由虛拟機運行時來加載和(hé)執行。
3. 運行時(Runtime)與虛拟機(VM)
Java運行時 和(hé) JVM虛拟機 ,簡單的說JRE就是Java的運行
時,包括虛拟機和(hé)相關(guān)的庫等資(zī)源。
運行時提供了程序運行的基本環境,JVM在啟動(dòng)時需要加載所有運行時的核心庫等資(zī)源,然後再加載我們的應用程序字節碼,才能讓應用程序字節碼運行在JVM這個(gè)容器(qì)裡。
4. 内存管理和(hé)垃圾回收(GC)
内存資(zī)源總是有 限而又寶貴的,隻占用不釋放,很快就會用完了。程序得不到可(kě)用内存就會崩潰。
内存管理就是内存的生命周期管理,包括内存的申請、壓縮、回收等操作。
Java的内存管理就是GC,JVM的GC模塊不僅管理内存的回收,也負責内存的分配和(hé) 壓縮整理
- C/C++完全相信而且慣着程序員,讓大家自行管理内存,所以可(kě)以編寫很自由的 代碼,但一個(gè)不小心就會造成内存洩漏等問(wèn)題導緻程序崩潰。
- Java/Golang完全不相信程序員,但也慣着程序員。所有的内存生命周期都由 JVM/運行時統一管理。 在絕大部分場景下(xià),你(nǐ)可(kě)以非常自由的寫代碼,而且不 用關(guān)心内存到底是什麼情況。 内存使用有問(wèn)題的時候,我們可(kě)以通(tōng)過JVM來信息 相關(guān)的分析診斷和(hé)調整。
- Rust語言選擇既不相信程序員,也不慣着程序員。 讓你(nǐ)在寫代碼的時候,必須清 楚明白的用Rust的規則管理好你(nǐ)的變量,好讓機器(qì)能明白高效地分析和(hé)管理内 存。 但是這樣會導緻代碼不利于人的理解,寫代碼很不自由,學習成本也很高。