JVM技術周報第2期

JVM技術周報第2期

JVM技術周報分享JVM技術交流群的討論內容,由群內成員整理歸納而成。如果你有興趣入群討論,請關注「Java技術精選」公眾號,通過右下角菜單「入群交流」加我好友,獲取入群詳情。

1、如何閱讀源碼?

在我的一個JVM技術交流群里,有人拋出了這樣一個問題:

經典框架的源碼要怎么讀容易些啊?比如spring,mybatis這種。

對于這個問題,群友進行了激烈的討論。

“源碼”,作為菜鳥的我真是還沒有想法到這一步,現在總是感覺我做的東西離這個還遠呢,根本用不到,看這個干嘛。有時間不如看看別的。源碼看了又看不懂,就先不看了吧。然后就這樣“說服”自己,避開源碼那一塊。但是實際上已經工作了兩年的我不應該再這樣繼續昏昏沉沉下去了,雖然我的理想很“豐滿”,但是現實……。最近又受了大佬的影響,我自己也想慢慢嘗試閱讀源碼。那么問題來了。如何下手?看哪些?怎么看?

【源碼如何“下手”】

我個人認為是先看同事寫的代碼,因為一個項目總是一個團隊完成的,而不是一個人,有的時候在遇到bug的時候,那個bug不一定是你寫的,而是別人的代碼造成了,那么需要你修復的時候,那這個時候其實就是相當于在看源碼,這一步就是開始在看“源碼”了。因為所謂的框架的源碼也都是別人寫的,只不過別人的確實比較“niubility”。

【該看那些源碼呢】

在平時做項目時候,我相信String大家都見過的吧。那就先從String這個常見的源碼開始。里面一些常用的方法,如:equals、valueOf、length等

【該怎么看呢】

知道了看哪些源碼以后,那么該怎么看呢?實際上“看”真的不僅僅是看,你需要仔細看,反復看,然后是自己嘗試寫,因為你看的再熟悉,哪怕你背出來了,你真不一定能寫出來。換句話說,你需要實踐,俗話說“實踐出真知嘛”,那“能動手就別走著瞧”了。

【大佬們的經驗】

剛開始看的時候不要每一行都看,因為你真的不是每一行都能看懂的,最好像String那樣,你能會用一些了,然后再分析,然后仿照一些方法自己嘗試寫來。有些晦澀難懂的就直接跳過,后期再看,不然硬生生強調“都看完了”那沒什么用,那也就是在自欺欺人,這樣的毅力我們是不需要的。我們需要的是有效那部分。再強調下, 剛開始看千萬不要追求每一行都看懂。

我這里將討論的結論總結一下:

  • 不要追求每行都看懂,而是先看懂框架。不要在不懂的地方過度消耗自己的精力。
  • 要善于學習別人的文章,善于請教別人。
  • 需要找到入口,之后再摸著繩子去閱讀。
  • 要有長期作戰的心理準備,而不是幾天、幾周的時間就搞定。
  • 要學會畫UML圖,通過UML圖梳理源碼結構。

2、Native Memory、Heap Memory 和 Direct Memory之間的區別和聯系

Native Memory 指的是本地內存,其實指的就是應用所運行機器的內存大小。更多時候指的是應用所運行操作系統分配給JVM的內存大小。Heap Memory 指的是JVM運行時數據區中定義的堆內存,其用來存放Java對象等共享的數據。Direct Memory 則是由于NIO產生而誕生的一塊數據區,其用來加速IO的讀取,其屬于 Native Memory 的一部分。

這三者的關系可以如下圖所示:

595137-20181125212421731-835043424.png

了解這三者之間的關系可以為我們解決一些線上問題打下基礎。例如線上發生了OOM異常,但此時的Java堆使用率還很低,那么這時候你可能要懷疑是不是 Direct Memory 出了問題。

參考資料:

  • https://developer.ibm.com/answers/questions/235834/what-is-the-difference-between-native-heap-memory/
  • https://www.ibm.com/developerworks/library/j-nativememory-linux/

3、PC寄存器是什么?它在內存結構中的位置是屬于哪里?

PC寄存器也叫程序計數器(Program Counter Register)指的是保存線程當前正在執行的方法。如果這個方法不是 native 方法,那么 PC 寄存器就保存 Java 虛擬機正在執行的字節碼指令地址。如果是 native 方法,那么 PC 寄存器保存的值是 undefined。任意時刻,一條 Java 虛擬機線程只會執行一個方法的代碼,而這個被線程執行的方法稱為該線程的當前方法,其地址被存在 PC 寄存器中。它是運行時數據區的,屬于線程的一部分,是線程私有的。

4、為什么0xCAFEBABE是4個字節?

為什么 0xCAFEBABE 是 4 個字節,而不是 8 個字節。我估計很多人搞不清楚。

首先,0xCAFEBABE 是十六進制,我想大家沒有異議。對于十六進制的數據來說,它們每位能存儲16個值,這就相當于二進制的 4 個位,也就是說 0x0F = 1111 = 15(十進制)。也就是說一個十六進制位相當于二進制的4個位(bit)。

那么兩個 16 進制位,是不是相當于 8 個位,8 bit。

那么 8 bit = 1 字節。所以兩位 16 進制 = 1 字節。

所以 CAFE = 2字節,BENE = 2 字節。

一共 4 個字節。

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

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

相關文章

最長重復子串和最長不重復子串求解

最長重復子串和最長不重復子串求解 本文內容框架: 1 最長重復子串 基本方法、KMP算法求解、后綴數組求解 2 最長不重復子串 基本方法、動態規劃、動態規劃Hash 3 小結 1最長重復子串 1.1問題描述 首先這是一個單字符串問題。子字符串R 在字符串L 中至少出現兩…

sql 查詢結果為null替換 為 0

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 mysql : ifnull( xxx , 0 ) select ifnull(colname,0) from tablename oracle: NVL(xxx , 0 )

前后端分離——token超時刷新策略

前言 記錄一下前后端分離下————token超時刷新策略! 需求場景 昨天發了一篇記錄 前后端分離應用——用戶信息傳遞 中介紹了token認證機制,跟幾位群友討論了下,有些同學有這么一個疑惑:token失效了,應該怎么做&…

Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性

本文轉載自[Android ImageView的scaleType(圖片比例類型)屬性與adjustViewBounds(調整視圖邊界)屬性]并做了排版的修改(http://www.cnblogs.com/xzbc/p/5098347.html) Android ImageView的scaleType的屬性可設置為matrix&#xff…

阿里云@廣東:讓我們一起上云!

鍋爐故障預測 預警準確率95%以上 利用算法模型進行制程能力的 綜合分析與評估優化 提升定標效率 時間降低30% 構建垃圾焚燒發電工藝的優化算法模型 綜合考慮環保和設備負荷因素 推薦最優工藝參數組合 優化人工操作,提高燃燒效率 中海油能源發展公司 石油鉆探預測優化…

程序員的自我經營

程序員的自我經營之道第一層 從你決定邁出校門進入社會的那一刻起,你就進入了一個戰場,這個戰場雖然沒有硝煙彌漫,沒有炮火紛飛,但卻絕不亞于任何一個真正的戰場。你要在這個戰場上去搏殺,去競爭,利用各種…

P3966 [TJOI2013]單詞

\(\color{#0066ff}{ 題目描述 }\) 小張最近在忙畢設,所以一直在讀論文。一篇論文是由許多單詞組成但小張發現一個單詞會在論文中出現很多次,他想知道每個單詞分別在論文中出現了多少次。 \(\color{#0066ff}{輸入格式}\) 第一行一個整數N,表示有N個單詞。接下來N行每行一個單詞,…

Android應用開發—RecyclerView繪制蒙層

背景:如何在跨越兩個或兩個以上的item繪制一個view,該view需要跟隨recyclerView的滑動而整體移動。 Overridepublic void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {super.onDrawOver(c, parent, state);final View child …

排序_3

希爾排序:分組排序 是把記錄按下標的一定增量分組,對每組使用直接插入排序算法排序; 隨著增量逐漸減少,每組包含的關鍵詞越來越多,當增量減至1時,整個文件恰被分成一組,算法便終止。 def shell_sort(array)…

face++算法工程實習生面試

2018-01-11 算法工程實習生 自動化工具鏈方面 面試的知識點非常仔細,十分檢驗基本功底 1.自我介紹 2.算法題,leetcode 第一題 兩數之和 問python中數組和字典的查找時間復雜度 3.git git 4.linux 常用命令 cd - ,cd ,cd ~,cd / awk 讀取倒數第一行&a…

IDEA中怎么設置黑色或白色背景?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 開啟軟件Intellij IDEA,在編輯框上面找到最前端的File。 點擊File,找到Setting,點擊進入。 然后在…

大公司體制內創新的困境

周末在家,隨手翻看了一點吳軍老師的《浪潮之巔》這本書。去年這本書上市之后我從頭到尾閱讀了一遍,在《浪潮之巔》中吳軍老師歷數了IT行業公司的興衰發展史,提出了一個令人印象深刻的“基因決定論”,即由于公司基因的影響&#xf…

java打印調用堆棧的方式

Log.d(TAG,Log.getStackTraceString(new Throwable()));

weblogic jprofile配置

前提: 1.安裝好weblogic 2.安裝好jprofile 非等待模式: export JAVA_OPTIONS"${JAVA_OPTIONS} -Dweblogic.threadpool.MinPoolSize100 -Dweblogic.threadpool.MaxPoolSize1000 -Djava.awt.headlesstrue -agentpath:/opt/jprofiler9/bin/linux-x64/l…

springboot/git學習資源記錄

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 只是記錄一下覺得不錯的資源: springboot: http://bbs.itmayiedu.com/article/1508826968799 http://blog.720ui.com/tags…

音視頻引擎研究

音視頻包:http://ishare.iask.sina.com.cn/f/33851582.html 1、WebRTC目的 WebRTC(Web Real-Time Communication)項目的最終目的主要是讓Web開發者能夠基于瀏覽器(Chrome\FireFox\...)輕易快捷開發出豐富的實時多媒體應…

我為什么“放棄”從事八年的嵌入式領域

由于嵌入式平臺性能所限,以及相應的開發平臺,工具,語言所限,導致很多前沿領域的軟件工程理論,方法無法實施,有些跟不上時代的感覺。 ……

Linux命令替換字符串

:%s/str1/str2/ 用str2替換str1 轉載于:https://www.cnblogs.com/haiyang21/p/10020503.html

人格差異

一.感知方式 感知是獲取感受的方式 感覺型【S】 S首先通過五官來直接感知事物。注意點在于當前的事實環境,而不是事實的來源。比如:雪融化了 因為太陽出來了,是事實。雪融化了,因為雪吸收太陽的熱量,達到自身融點&…

Hibernate @JoinTable 注解

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JoinTable支持的屬性 屬性是否必須說明name否指定該連接表的表名JoinColumns否該屬性值可接受多個JoinColumn,用于配置連接表…