原创 深入理解JAVA虛擬機學習筆記3——OutOfMemoryError異常

開門見山。爲了方便製造溢出,將JAVA堆的大小調整爲10M。本機用的是IntelliJ IDEA作爲開發工具,進入到IDEA的安裝目錄,如D:\tools\IntelliJ IDEA 2017.1.4\bin,打開idea64.exe.v

原创 深入理解JAVA虛擬機學習筆記7——內存的分配與回收策略

今天的內容主要是內存的分配,其實前面已經介紹了很多,就當作是複習吧。大家現在應該都知道了,JAVA虛擬機在堆中存放對象實例,所以對象的內存分配也主要是在堆上進行。堆中又分新生代和老年代(有疑問的可以看一下以前的文章),對於新創建的對象,按

原创 深入理解JAVA虛擬機學習筆記1——內存

Java虛擬機在執行Java程序的過程中會在內存空間中分配出一塊區域,用於程序的運行。虛擬機又會把這塊所管理的內存劃分爲若干個不同的數據區域:虛擬機棧,本地方法區,程序計數器,堆,方法區。 左側三個爲線程私有,右側兩個爲線程共享的區域。1

原创 (三)項目構建-構建web項目

1 構建web項目 本人使用idea2017作爲開發工具。首先使用idea創建gradle項目。 2 項目gradle配置 2.1 創建好項目後,默認的資源用的是mavenCentral(),這裏增加本地倉庫。 r

原创 深入理解JAVA虛擬機學習筆記15——字節碼執行引擎(棧幀)

每天進步一點點!今天主要了解一下棧幀中的內容,大部分爲內容都比較容易理解,且做以下記錄。首先介紹以下棧幀的概念:棧幀(Stack Frame)是用於支持虛擬機進行方法調用和方法執行的數據結構,它是虛擬機運行時數據區的虛擬機棧(Virtu

原创 深入理解JAVA虛擬機學習筆記15——字節碼執行引擎(動態類型語言與lambda表達式)

每天進步一點點!在我們剛接觸Java時候,我們就被告知,Java是一門靜態類型語言。隨着開發技術的發展,出現了更多的動態語言,比如我們耳熟能詳的Groovy,List,Python,Ruby,JavaScript等。這也就迫使Java需

原创 深入理解JAVA虛擬機學習筆記14——類加載的初始化過程

每天進步一點點!前面已經介紹了類加載的加載、驗證、準備、解析等過程,今天來學習最後一個過程,初始化!對於有過java開發經驗的朋友們來說,初始化這個詞自然不陌生,初始化階段與變量初始化自然不是一個概念,但是也有一些關聯。在上一篇中,我們

原创 深入理解JAVA虛擬機學習筆記14——類加載的準備和解析

每天進步一點點!今天我們一起看一下類加載的準備階段和解析階段。先看一下準備階段:主要任務是在方法區中爲類變量(僅static修飾變量,不包含實例變量)分配內存並設置類變量初始化的階段。這裏面的區別,我們通過下面的代碼來簡單瞭解一下。我們

原创 深入理解JAVA虛擬機學習筆記15——字節碼執行引擎(方法調用)

每天進步一點點!這裏說的方法調用階段的任務並不是執行過程,而是確定方法運行時的入口地址。前面我們已經學習過,在Class文件的常量池中,類型爲CONSTANT_Methodref_info的,存儲的就是方法信息,並最終指向方法的符號引用

原创 深入理解JAVA虛擬機學習筆記14——類加載的加載過程

每天進步一點點!上一篇穿插了一段動態綁定和靜態綁定的知識,這一篇我們迴歸到類加載上來,學習一下類加載的“加載”。是不是讀起來有點拗口,這是什麼意思?別迷糊,還記得上一篇的上一篇學習過的類加載過程嗎,裏面有一個階段就是“加載(loadin

原创 深入理解JAVA虛擬機學習筆記13——字節碼指令1(加載和存儲)

一個忙碌的週末又過去了,時間不能阻止我們前進的腳步,每天進步一點點!上一篇在方法體中,方法體被編譯成了指令,我們已經初步瞭解了每條字節碼指令佔用一個字節, 大概有200餘種字節碼指令。虛擬機的解釋器的工作流程大致如下圖僞代碼所示。對於這麼

原创 深入理解JAVA虛擬機學習筆記13——字節碼指令3(類型轉換指令)

每天進步一點點!上一篇寫的數據類型的範圍,相信大家還記得吧,每一種類型對應不同的數據範圍和精度。有的時候,我們需要對數據類型進行轉換,既涉及到從範圍較小的數據類型向範圍較大的數據類型來轉換,也涉及到從範圍較大的數據類型轉向範圍較小的數據

原创 深入理解JAVA虛擬機學習筆記12——class類文件結構概述

對於前面的學習,筆者認爲屬於第一階段,一直都在說虛擬機內存分配和垃圾收集的問題,由於這些都是開發的過程中看不見又不常用得,不那麼容易理解。從這一篇開始,我們迎來了第二階段,這一階段的知識,將會和我們的代碼緊密聯繫起來。每一個學習JAVA

原创 深入理解JAVA虛擬機學習筆記12——Class類文件的結構(1常量池)

前一篇文章已經對Class類文件匆匆一瞥,上一篇沒看的,建議先看一下上一篇,這一篇就看一下具體的細節。我們先隨便創建一個類,代碼如下。運行main方法,這個時候會生成一個class文件,我們用文本編輯器打開它。由於class文件中是二進

原创 深入理解JAVA虛擬機學習筆記14——類加載的驗證過程

每天進步一點點!上一篇已經學習了加載階段,這一篇我們瞭解一下驗證的過程。我們已經知道了,虛擬機加載的是Class字節碼文件,我們也通過工具查看了文件中存儲的是二進制流。下面我們打開一個文件AppTest.class,我們在文件的開頭隨便