jvm基礎知識 - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 技術(shù)分享 >

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ì)碼,之後再傳遞給計算機去執行。

高級語言分類

有無虛拟機

  1. 有虛拟機:Java,Lua,Ruby,部分JavaScript的實現等等
  2. 無虛拟機:C,C++,C#,Golang,以及大部分常見的編程語言

變量是不是有确定的類型

  1. 靜态類型:Java,C,C++等等
  2. 動(dòng)态類型:所有腳本類型的語言

是編譯執行,還是解釋執行

  1. 編譯執行:C,C++,Golang,Rust,C#,Java,Scala,Clojure,Kotlin, Swift…等等
  2. 解釋執行:JavaScript的部分實現和(hé)NodeJS,Python,Perl,Ruby…等等

語言特點

  1. 面向過程:C,Basic,Pascal,Fortran等等
  2. 面向對象:C++,Java,Ruby,Smalltalk等等
  3. 函數式編程: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é) 壓縮整理

  1. C/C++完全相信而且慣着程序員,讓大家自行管理内存,所以可(kě)以編寫很自由的 代碼,但一個(gè)不小心就會造成内存洩漏等問(wèn)題導緻程序崩潰。
  2. Java/Golang完全不相信程序員,但也慣着程序員。所有的内存生命周期都由 JVM/運行時統一管理。 在絕大部分場景下(xià),你(nǐ)可(kě)以非常自由的寫代碼,而且不 用關(guān)心内存到底是什麼情況。 内存使用有問(wèn)題的時候,我們可(kě)以通(tōng)過JVM來信息 相關(guān)的分析診斷和(hé)調整。
  3. Rust語言選擇既不相信程序員,也不慣着程序員。 讓你(nǐ)在寫代碼的時候,必須清 楚明白的用Rust的規則管理好你(nǐ)的變量,好讓機器(qì)能明白高效地分析和(hé)管理内 存。 但是這樣會導緻代碼不利于人的理解,寫代碼很不自由,學習成本也很高。

相關(guān)案例查看更多