国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

高手支招 Java經驗分享(十二)

開發 后端
本篇文章是作者Ant_Yan在CSDN論壇上發布的自己對Java學習的一些經驗分享。這是他經驗分享的第十二部分,主要介紹作者學習JVM的心得。

  作為一個Java程序員,如果不了解JVM的工作原理,就很難從底層去把握Java語言和Java程序的運作機制。這里先推薦一個最權威的講解JVM的文檔,大家只要查過Java API的可以在里面的一個叫“API, Language, and Virtual Machine Document”的標題下看到四個子標題,***個是我們最熟悉的Java API Specification,很少會有人注意到第三和第四個子標題,分別是“The Java Language Specification”和“The Java Machine Specification”后面都帶有(Download)字樣,JVM的那個URL直接鏈接到http://java.sun.com/docs/books/vmspec/2nd-edition/這里地址。我們可以下載到一份非常權威詳細的講解JVM原理的官方文檔。筆者業余時間花了1個星期來閱讀,這里把自己的收獲跟大家來分享一下,大概從這么幾個方面來談一談:

  1. JVM的實現機制

  Java虛擬機就是一個小的計算機,有自己的指令集,有自己的文件系統,管理內部的表和數據,負責讀取class文件里面字節碼,然后轉換成不同操作系統的CPU指令,從而使得Java程序在不同的操作系統上順利的跑起來。所以Window的JVM能把字節碼轉換成Window系統的指令集,Linux的JVM能把字節碼轉換成Linux系統的字節,同理還有Solaris,它們彼此之間是不能通用的。最早一款的原型雖然是Sun公司開發的,但發展到現在其實任何廠商都可以自己去實現一個虛擬機,用來讀取字節碼轉換成OS指令。甚至我們可以認為JVM跟Java編程語言都沒有關系,因為你自己哪怕用記事本寫一串字節碼,也可以讓JVM來解析運行,只要你的字節碼能通過JVM的驗證。

  JVM的驗證其實是很嚴格的,這里只講一些有趣的地方。大家還記得Java的圖標是一個杯咖啡麼?究其歷史我們也許可以查出為什么,但還有更顯而易見的方式是JVM怎么判斷一個文件是否是class文件?JVM的做法是讀取前4個字節轉換成16進制數,判斷是否等于0xCAFEBABE這個數。注意到這個單詞了麼?“cafebabe”,代表著國外一種咖啡品牌,似乎叫做Peet’s coffee-baristas之類。創造Java的人為了方便記憶,選擇了這樣一個16進制數作為標準class文件的頭,所以任何class文件都必須具有這4個字節的頭部。我們可以用DataInput這個接口的實現類來驗證一下,讀取任何一個class文件的***個int,int在Java里面是四個字節。轉換成16進制一定會是0xcafebabe的。

  所以這里想告訴大家的是,JVM其實并沒有那么神秘,我們完全可以理解它的構造。

  2. Java相關的基礎概念

  配合JVM的結構,在Java語言中也會有很多特點比較鮮明的地方。比如對數值計算從來不會檢查位溢出。任何變量存儲的二進制即使位全部為1了仍然可以加,全部為0了仍然可以減。大家只要稍微測試一下就知道了,看這幾個例子:

  1. int max = Integer.MAX_VALUE;  
  2. int min = Integer.MIN_VALUE;  
  3. max+1 == min; //true  
  4. min-1 == max; //true  
  5. 0.0/0.0 //得到“NaN”(Not a number)  
  6. 1/0.0 //Infinity  
  7. -1/0.0 //-Infinity  
  8. 1或-1/0 //ArithmeticException唯一的異常情況 

  看完這幾個例子,大家是否能更好的把握Java的數值運算呢?Java完全遵照IEEE-754的標準來定義單雙精度浮點數以及其他的數值存儲方式。

  另外Java里面有一個概念叫做Daemon Thread(守護線程),知道它的存在主要是為了理解虛擬機的生命周期。當我們運行java命令,從main函數進入的那一刻起,虛擬機就開始啟動運行了。Main所在的主線程也會啟動起來,它屬于非守護線程。與之同時一些守護線程也會同時啟動,最典型的守護線程代表就是GC(垃圾收集器)線程。JVM虛擬機什么時候退出呢?是在所有的非守護線程結束的那一刻,JVM就exit。注意這個時候守護線程并未退出,很可能還要繼續完成它的本職工作之后才會結束,但虛擬機的生命周期已經提前于它結束了。

3. JVM內部的基本概念

  虛擬機內部還有一些概念,全部列舉是不現實的,太繁瑣也沒有意義。除非您真的想自己去做一個JVM。筆者只列舉部分概念:

  首先我們來看一個叫做ReturnAddress的變量,它是JVM用來存儲方法出口或者說進行跳轉的依據,把任何地址存入這個變量就一定會按照這個地址來跳轉。我們需要注意的就是finally有比方法return更高的賦值給ReturnAddress的優先級。同時存在方法return和finally return的話,一定是按照finally里面的return為準。

  JVM有自己的Heap,能被所有線程共享,存儲著所有的對象,內存是動態被分配的。對于每個線程,擁有自己的Stack,棧里面存儲的單位叫做Frame(楨)。楨里面就記錄著零時變量、對象引用地址、方法返回值等數據。JVM還有一個叫做Method Area的地方,存儲著一段一段的可執行代碼,每一段就是一個方法體,也能被所有線程共享。所以我們說一個線程其實從run方法跑起來,跟它的類中聲明的其他方法是兩個概念。因為其他的方法包括的所有的對象,這個時候都充當為資源被線程使用。

  JVM有自己管理內存的方案,因為它具有文件系統的功能,我們可以看成一個小型的數據庫,內部有許許多多不同的表。表的字段可能是另外一張表的地址,也可以直接就是一個存儲數據值的地址值。JVM所有對運行時候類的解析驗證計算等管理工作,實際上都是在管理這些表的變動,如果我們從數據庫的角度來看,JVM所做的就是根據你的代碼來操作那么多個表***返回給你結果的過程。里面的表結構包括class的表、field表、method表、attribute表等。

  4. JVM的指令集

  JVM有自己的指令集,筆者從前也看過一些計算機組成結構和匯編語言的數,建議大家也稍微看看,了解設計一個高效可用的計算機指令集是多么復雜又多么重要的過程。對于JVM的指令集,職責是管理好Java程序編譯出來的字節碼,相對而言指令集的名稱就多少和Java語言相關了,比如指令集里就有sastore,、saload表示array里面short的存和取、類似還有d2i表示從double轉換成int、monitorenter表示進入synchronized塊加鎖、getstatic和putstatic表示對靜態標量的存取、 jsr和ret等跳轉指令……

  為了便于記憶,設計JVM指令集的人們約定f開頭的跟float有關,d跟double有關,i跟int有關,s跟short有關,a跟array有關。有興趣的可以細讀文檔里面的每一個指令的作用。因為只是作為初步了解,這里就不多說了。

5. 一些Java關鍵字的實現原理

  文檔還很詳細的列舉了很多加載、初始化、加鎖等操作的過程。筆者覺得比較有用的***是記住Java里面只有Array不是由ClassLoader加載的對象,其他的對象全部都必須由一個ClassLoader來加載。另外package的概念除了類似于C++的namespace,是一種命名空間之外,底層的實現是規定同一個package下的類必須由同一個類加載器來加載,所以package的概念還可以認為是被同一個類加載器加載的類。

  另外在多線程中,有很多細節值得去體會。每個線程有自己的Working memory,它們從能被共享的Main Memory中去讀數據、修改、然后再存回去。筆者一直認為線程就是數據庫里面事務的前身或者說祖先。我們只要稍微比較一下它們的行為,就會發現很多一致性。事務也是操作被事務共享的表數據,你改完我改,順序不一致就會出現臟數據,而線程同樣會出現臟數據。我們對線程加的鎖策略,同樣在事務中也有適用。當然多事務的情況顯然比多線程更加復雜,但我們只要理解了多線程,相信對學習數據庫事務的效果也是非常有幫助的。Java里面除了synchronized能夠幫助同步多線程之外,還有一個弱同步的操作關鍵字是volatile,它產生在變量上的約束在文檔中也有詳細的說明。因為很復雜,考慮到篇幅筆者就不打算解釋一遍了。

  好了,又是新的一篇結束了。不足之處大家盡管提出來,筆者愿意接受各種職責批評。這個帖子一直以來得到那么多朋友的大力支持和鼓勵,筆者在這里真誠的說一聲謝謝!

【編輯推薦】

  1. 新手入門:學習Java的一點經驗心得
  2. 61條Java面向對象設計的經驗原則
  3. 經驗分享:我的JavaEE學習道路
  4. Java對象類型轉換的四個經驗
  5. 高手支招 Java經驗分享(一)
責任編輯:韓亞珊 來源: CSDN
相關推薦

2011-03-31 13:52:22

Java

2011-03-31 16:26:28

Java

2011-03-31 15:36:02

Java

2011-03-31 13:56:24

Java

2011-03-31 14:49:35

2011-03-31 13:32:13

Java

2011-03-31 14:07:27

Java

2011-03-31 16:44:43

Java

2011-04-07 13:18:00

管理軟件項目項目

2009-10-29 16:57:05

Oracle傳輸表空間

2018-06-19 08:12:55

2010-07-21 14:05:31

2014-05-28 10:55:11

Windows XP安全補丁

2010-08-18 14:19:01

無線路由器

2009-09-28 10:52:00

CCNA考試經驗CCNA

2009-12-07 11:11:46

PHP顯示圖片

2011-05-16 17:36:05

SEO

2011-07-15 17:35:19

JavaScript

2009-12-16 16:37:59

Ruby on Rai

2009-12-25 09:44:52

WPF窗口設置
點贊
收藏

51CTO技術棧公眾號

日韩脚交footjobhd| 欧美电影完整版在线观看| 亚洲精品国产高清久久伦理二区| 日本免费一区二区三区| 天堂av一区二区三区在线播放| 亚洲人成网站色ww在线| 2021国产在线| 欧美日韩免费一区二区三区视频| wwwav91com| 久久精品视频在线看| 男人的天堂avav| 国产精品综合视频| 亚洲欧美久久久久一区二区三区| 国产一区二区三区成人欧美日韩在线观看| 国产ts一区二区| 婷婷综合一区| 日本sm极度另类视频| 麻豆精品少妇| 久久人人爽人人| 高潮按摩久久久久久av免费| 欧美贵妇videos办公室| 久久国产精品免费一区二区三区| 日韩中文字幕不卡视频| 国产极品一区| 深夜福利日韩在线看| **国产精品| 欧美精品在线网站| 99国产精品久久一区二区三区| 色综合视频一区中文字幕| 久久wwww| 人人做人人澡人人爽欧美| 欧美9999| 国产精品xxxxx| 久久国产电影| 91视频免费在线| 亚洲精品精选| 在线免费观看一区二区三区| 国内成人精品2018免费看| 99久久免费观看| 久久亚洲一区二区三区四区| 69ww免费视频播放器| 精品久久久久国产| 毛片网站在线免费观看| 精品视频一区在线视频| 色综合一区二区日本韩国亚洲| 久久久久国产一区二区三区| 欧美jizz| 欧美日韩亚洲免费| 国产成人一区在线| 中文字幕在线观看第三页| 一区二区激情小说| 第一福利在线| 中文字幕日韩高清| 激情五月综合网| 麻豆亚洲一区| 久久只精品国产| 中文字幕在线第一页| 日韩午夜小视频| 9999精品免费视频| 91天堂在线视频| 老司机免费视频一区二区三区| 免费人成在线观看视频播放| 亚洲免费在线视频| av网站在线免费看推荐| 亚洲欧美国产另类| 麻豆精品av| 久久综合色一本| 99免费精品视频| 免费动漫网站在线观看| 亚洲高清免费观看高清完整版| 精品成人18| 久久99精品久久久久久久青青日本 | av最新在线| 韩国精品美女www爽爽爽视频| 欧美国产激情| 美女av免费在线观看| 欧美性猛交xxxx黑人交| 爱情电影网av一区二区| 国产91aaa| 中文一区二区在线观看| 久久99精品久久久久久野外| 亚洲97在线观看| 久热成人在线视频| 在线视频1区| 午夜久久av| 日本在线一区| 洋洋成人永久网站入口| 日韩毛片一区| 极品日韩久久| 亚洲综合色网站| 中文字幕日本一区| 日本在线一区| 欧美日韩午夜视频在线观看| 国产欧美日韩电影| 一本一本a久久| 在线一区二区视频| 日韩av中文字幕一区| 99热都是精品| 欧美疯狂性受xxxxx喷水图片| 伊人成综合网yiren22| 国产精品自拍片| 亚洲精品一区二区三区精华液| 亚洲中无吗在线| heyzo视频在线播放| 色偷偷综合社区| 免费看日韩精品| 在线免费观看的av网站| 国产日韩在线播放| |精品福利一区二区三区| 国产亚洲欧美日韩精品一区二区三区 | 久久在线精品| 深夜福利视频在线观看| 国产91精品黑色丝袜高跟鞋| 成人美女在线观看| 国产在线观看www| 欧美日韩亚洲综合一区二区三区激情在线 | 亚洲一区二区三区在线视频| 亚洲视频免费看| 99亚洲乱人伦aⅴ精品| 精品久久一二三| 尤物99国产成人精品视频 | 国产超碰91| 欧美性xxxxxxx| 成人中文视频| а√最新版天堂中文在线| 欧美贵妇videos办公室| 91免费国产在线| 日本久久久久| 日韩免费在线观看av| 日韩精品电影网| 久久99久久99精品免视看婷婷| sis001亚洲原创区| 亚洲午夜激情| 亚洲欧美日韩网| 丁香一区二区三区| 粉嫩一区二区三区在线观看| 欧美综合在线观看视频| 国内精品小视频在线观看| 国产清纯美女被跳蛋高潮一区二区久久w | 国产欧美日韩亚州综合| 日本精品视频| 人人做人人爽| 日本免费久久高清视频| 亚洲精品第1页| 久久久久久美女精品| 美女做暖暖视频免费在线观看全部网址91 | 99久久国产综合色|国产精品| 4438五月综合| 污网站免费看| 91精品一区二区| 日韩一级黄色大片| 国产精一区二区三区| 欧美xxxx性| 国产高潮免费视频| 91精品久久久久久久久久| 欧美性色综合网| 久久成人免费网站| 麻豆久久久久| 国产中文字幕第一页| 97netav| 精品处破学生在线二十三| 国产成人小视频| 国产另类在线| 免费福利在线视频| 中文字幕一区二区视频| 日韩黄色大片| 3d玉蒲团在线观看| av日韩一区二区三区| 欧美亚洲第一页| 在线观看成人免费视频| 狠狠色伊人亚洲综合成人| 欧美一区在线观看视频| 九色免费视频| 欧美性大战久久久久| 中文字幕无线精品亚洲乱码一区| 国产精品嫩草久久久久| 欧美日韩国产综合网| 少妇视频一区| 裸体免费网站| 午夜一区二区三区| 91国产中文字幕| 欧美刺激午夜性久久久久久久| 国产午夜亚洲精品午夜鲁丝片 | 欧美一区二区三区……| 欧美丰满美乳xxx高潮www| zzijzzij亚洲日本少妇熟睡| 手机在线一区二区三区| freexxx性亚洲精品| 羞羞的视频网站| 日本在线播放一区| 2019av中文字幕| 亚洲精品国产成人| 一二三四区精品视频| 日韩精品1区2区3区| 三级小说欧洲区亚洲区| а√天堂8资源中文在线| 日本免费视频| 免费不卡av在线| 久久精品人人做人人爽电影| 久久久久久美女|