JVM(一)史上最佳入門指南

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

提到Java虛擬機(JVM),可能大部分人的第一印象是“難”,但當讓我們真正走入“JVM世界”的時候,會發現其實問題并不像我們想象中的那么復雜。唯一真正令我們恐懼的,其實是恐懼本身。而作為整個JVM系列的首篇,本文將帶你解除剛開始學習JVM時的種種疑惑。比如:什么是JVM?為什么學習JVM?怎么有效的學習JVM?帶著以上的這些問題,讓我們一起走入JVM的世界吧。

一、什么是JVM?

JVM簡介: JVM是Java Virtual Machine的縮寫,中文翻譯為Java虛擬機,是一種用于計算設備的規范,它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。簡單來說JVM是用來解析和運行Java程序的。

Java有一個非常重要的特點“平臺的無關性”,就是使用JVM實現的。Java語言只需要生成Jvm上運行的目標代碼(字節碼),就可以在多種平臺上不加修改地運行,因為JVM本身屏蔽了與具體平臺相關的信息,使得Java能夠“一次編譯,到處運行”。

二、為什么要學習JVM?

學習JVM無外乎以下幾個原因:

1、 <font color=#0000FF>程序調優</font>

不同的程序(業務場景)需要不同的Jvm配置,比如設置不同的垃圾收集器、設置新生代和老生帶的內存配置和占比等,不同的配置對于程序的運行有著千差萬別的影響。而Jvm默認的配置只能保證程序能夠“運行”,而想要“很好的運行”甚至是“更好的運行”,就是學習Jvm最主要的因素之一。

2、 <font color=#0000FF>排查程序運行問題</font>

有些程序可能在線上使用的時候會遇到各種各樣的問題,而這些問題通常都是致命的,比如內存溢出,死鎖導致的程序運行緩慢等,而這些問題在開發和小量并發測試階段是很容易被忽略的缺陷,所以學習好了Jvm才能在關鍵的時候,臨危不亂幫你掃除系統中的“頑疾”。

3、 <font color=#0000FF>掌握了程序執行的根本和原理</font>

也就是很多人說的:不但要“知其然”,還要“知其所以然”。

4、 <font color=#0000FF>規避寫代碼時候的一些錯誤</font>

比如避免重載可變長參數的調用(后面文章會給出具體的案例)。

5、 <font color=#0000FF>應付面試</font>

不得不說這也是很多人學習的目的之一,當然這也是積極的推動力,如果你明白“鯰魚效應”的話。

6、 <font color=#0000FF>掌握了其他語言的通用機制</font>

JVM還有一個強大之處是,它不止可以運行Java程序,還可以運行Scala、Clojure、Groovy,以及時下熱門的 Kotlin,學習JVM便可以了解這些語言的通用機制,甚至于讓這些語言共享生態系統。

三、怎么有效的學習JVM?

以上了解了學習JVM的種種好處,但是怎么有效的學習JVM呢?有人可能一看到“JVM”或者“Java虛擬機”這幾個字就懵了,不知道它是啥,更別說要怎么學了。而本小節就是要教大家怎么有效的學JVM,把JVM做一個知識點的劃分。可以說,掌握了以下列舉的知識點,就是掌握了整個JVM。

JVM的知識點,分為如下幾個:

1、 <font color=#0000FF>JVM的組成</font>

只有了解了JVM的組成部分,才能算的上真正的了解了JVM,JVM的組成5個部分:堆、虛擬機棧、本地方法棧、程序計數器、方法區,后面文章會分別介紹5個部分的具體用途。

2、 <font color=#0000FF>多種垃圾回收算法</font>

Jvm中有很多垃圾回收算法,不同的算法優缺點也各不相同,比如:標記清除算法和復制算法、標記清楚算法會產生多種空間碎片、復制算法把內存分為兩塊,性能雖然很好但是每次只能使用一塊,又浪費了內存的空間,那有沒有相對完美的算法呢?答案肯定是有的,由于篇幅的原因,后面文章會詳細講解。

3、 <font color=#0000FF>多種垃圾收集器</font>

Jvm的垃圾收集器有很多,比如最早版本的串行收集器Serial,發展歷史最悠久的收集器,它是采用復制算法的新生代收集器,它是一個單線程收集器,它在進行垃圾收集時,必須暫停其他所有的工作線程,直至Serial收集器收集結束為止(“Stop The World”)。還有CMS(Concurrent Mark Sweep)收集器是一種以獲取最短回收停頓時間為目標的收集器;還有比較前沿的G1(Garbage-First)收集器等。

學習這些收集器,一方面是為自己程序配置合適的收集器,另一方面是每個收集器的設置參數都不相同,學習了這些收集器的配置之后,可以為程序設置最優的運行匹配參數。

4、 <font color=#0000FF>JVM分析工具</font>

Jvm的分析工具用于排查程序運行的缺陷,找出程序的問題所在,從而保證程序的穩定運行,Jvm分析器分為:命令行工具(官方稱之為實驗性質的工具,但穩定性是不容置疑的),還有視圖分析工具,前者當然優于后者,但后者是建立在前者的基礎上的,本系列后面會詳細的把每個工具進行深入的講解。

5、 <font color=#0000FF>Java類加載機制</font>

Java類加載機制,講的是Java的類在Jvm中的加載以及運行機制,對于認識Java是怎么運行的有著非常大的幫助,這也是學習Java非常有趣的一點,你可以看到Java運行的整個過程,是完全透明化的,給人一種“掌控感”,這是Java語言天生支持的,所以會覺得Java這門語言很有趣。

6、<font color=#0000FF>JVM常用優化配置</font>

學習Jvm收益最大的其實就是,使用Jvm的這些常用配置,讓你的程序運行的更高效,所以對于這方面的學習是必不可少的。

四、總結

本文帶領大家對Jvm整體的印象有了初步的認識,我們明白了Jvm的學習能帶給我們的收益,以及Jvm該如何學習,而這些問題恰好是剛開始學習Jvm時最大的障礙。萬事開頭難,好的開始是成功的一半,恭喜你學習了Java領域中一項不可或缺的技能,如果覺得本文不錯,歡迎轉發到朋友圈或分享給你的朋友。

此篇是Jvm系列的第一篇,關注作者公眾號,了解后續更多精彩內容:

轉載于:https://my.oschina.net/u/3471412/blog/2998023

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/449863.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449863.shtml
英文地址,請注明出處:http://en.pswp.cn/news/449863.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何成為一個技術“牛人”

今天給浙江大學過來的幾個還沒有畢業的研究生做面試&#xff0c;這些研究生是想來公司實習的。在面試的過程中&#xff0c;一個學生問我“我們有C/C、JAVA等等多種語言&#xff0c;我如何才能成為某一方面的一個技術牛人呢&#xff1f;這一問題一直困擾著我”&#xff0c;對于這…

python量化數據處理小細節(以后還會不斷補充)

使用tushare數據源獲取數據后處理 以下都是本人在獲得數據后&#xff0c;進行量化回測時&#xff0c;處理數據遇到的各種坑以及解決方案&#xff0c;有些甚至都很幼稚&#xff0c;切勿嘲笑 獲取數據 導包 import tushare as ts import pandas as pd import matplotlib #(ju…

Linux find和grep的區別

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 grep是查找文件中匹配條件的行&#xff0c;find是搜索匹配條件的文件。 1.find:查找文件或目錄語法: find 查找位置 文件名或目錄名如:在…

Mysql 忘記密碼重置教程

https://jingyan.baidu.com/article/454316ab4e9e65f7a7c03ad1.html 百度經驗轉載于:https://www.cnblogs.com/leaf-cq/p/10410694.html

067:【Django數據庫】ORM查詢條件詳解-range

【Django數據庫】ORM查詢條件詳解-range range&#xff1a;判斷某個 field 的值是否在給定的區間中。示例代碼如下&#xff1a; # views.py文件內容&#xff1a;from datetime import datetime from django.utils.timezone import make_awaredef index(request):start_time ma…

貼吧爬蟲

import requests import re#根據url獲取網頁html內容 def getHtmlContent(url):page requests.get(url)return page.texthtml getHtmlContent(https://tieba.baidu.com/p/4840106397)#以html中使用re模塊解析出所有jpg圖片的url #百度貼吧html中jpg圖片的url格式&#xff1a;…

別把自己變成了“二等公民”

上周參加一個代碼審查會&#xff0c;在會上發現了設計上的一個很嚴重的錯誤。于是&#xff0c;我提了好幾個問題&#xff0c;想知道為什么會出現這一錯誤。但是&#xff0c;我的同事告訴我這都是印度團隊做的設計。需要提供的一個背景信息是&#xff0c;這個項目是我所在的研發…

jquery函數加載及生成隨機數

$(document).ready(function () {var code ; //在全局定義驗證碼  1.將函數寫好 function createCode(){code "";var codeLength 4;//驗證碼的長度var checkCode document.getElementById("code");var random new Array(0,1,2,3,4,5,6,7,8,9,A,B,C…

rsync解說

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、簡介1、認識Rsync&#xff08;remote synchronize&#xff09;是一個遠程數據同步工具&#xff0c;可通過LAN/WAN快速同步多臺主機間…

關于java中getClass()和getSuperClass()的講解

為了講解這個問題&#xff0c;我們先來看一下下面的代碼: package com.yonyou.test;import java.util.Date;class Test extends Date{private static final long serialVersionUID 1L;public static void main(String[] args) {new Test().print();}public void print(){Syste…

期權回測框架設計思路

期權回測&#xff0c;博主已經研究了很長時間&#xff0c;也接觸了不少平臺&#xff0c;如真格&#xff0c;以及這位博主提供的思路&#xff08;https://blog.csdn.net/luoqingyong/article/details/107523930&#xff09;&#xff0c;利用backtrader進行期權回測。確實國內做期…

UVA815

這道題主要學到的就是數據結構的組織&#xff0c;一些需要從小到大排列的東西&#xff0c;這些東西還有對應的東西。這個時候使用map可以解決 下面貼出代碼。其中所使用的思想&#xff0c;估計這個東西是沒法學的&#xff0c;這就只能是靈感 //這是什么吉爾題&#xff0c;題意都…

我對應聘者的面試原則

最近參與了幾次單位招聘面試工作&#xff0c;在面試工程師時&#xff0c;我是用我的分層準則指導與候選人的交流內容&#xff0c;以確定他的能力層次是否達到我所期望的。大體上軟件工程師可以分為三大層次&#xff0c;分別是技術知識積累層、掌握設計方法層以及運用開發方法論…

rsync:基本命令和用法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 2.1 說在前面的話 rsync官方網站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以實現增量備份的工具。配合任務計劃&#…

Java常見排序算法之堆排序

在學習算法的過程中&#xff0c;我們難免會接觸很多和排序相關的算法。總而言之&#xff0c;對于任何編程人員來說&#xff0c;基本的排序算法是必須要掌握的。 從今天開始&#xff0c;我們將要進行基本的排序算法的講解。Are you ready&#xff1f;Let‘s go~~~ 1、排序算法的…

python量化數據處理小細節2

處理數據主要使用的是DataFrame格式&#xff0c;偶爾也會有list格式。 首先定位尋找數據&#xff1a;主要為loc&#xff0c;iloc 創建DataFrame&#xff1a; df pd.DataFrame([1,2,3,4,5],index [a,b,c,d,e],columns[aa])或 datapd.DataFrame(np.arange(16).reshape(4,4),i…

python編碼問題

參考&#xff1a;https://blog.csdn.net/qq_33692803/article/details/81321340 注意區分系統默認編碼和本地默認編碼、編碼和解碼的區別轉載于:https://www.cnblogs.com/jianglinliu/p/10418437.html

軟件工程師所需掌握的“終極技術”是什么?

最近&#xff0c;我在微博上看到程序員鄒欣老師發的一條微博 — “不少大學同學都有一個想法&#xff1a;先做幾年技術&#xff0c;然后做管理&#xff1b;也有一些同學說&#xff1a;我技術不行&#xff0c;希望直接找到一個管理的工作&#xff0c;就像PM那樣。請看 PM 需要什…

linux中項目部署和日志查看

1 查找進程 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ps -ef | grep java 查看所有關于java的進程 root 17540 1 0 2009 ? 01:42:27 /usr/java/jdk1.5.0_1…

dspmq dspmqver command not found(dspmq命令找不到,dspmqver主安裝目錄設置不正確

[rootrhv6-64b ~]# su - mqm -bash-4.1$ dspmq -bash: dspmq: command not found&#xff08;dspmq命令找不到&#xff09; -bash-4.1$ dspmqver&#xff08;dspmqver主安裝目錄設置不正確&#xff09; AMQ8594: WebSphere MQ commands are no longer available in /usr/bin. I…