JVM(四)

對象的訪問定位:

建立對象是爲了能夠是使用對象;通過棧上的reference數據來操作堆上的具體的對象。然而Reference類型在虛擬機的規範只是指定了一個對象的引用,具體如何去訪問,就的需要取決於虛擬機。主要的倆中方式:句柄和直接指針倆種。

句柄式訪問:JAVA堆中會劃分出一個句柄池,Reference存儲的是句柄地址。句柄中包含了對象實例數據與類型數據各自的具體的地址信息。

   好處:Reference中存儲的是穩定的句柄地址,在對象被移動後,只會改變句柄中的實例數據指針。Reference本身布需要修改。

直接訪問:Reference存儲的直接就是對象地址。好處:訪問的速度極快,節約了一次指針定位的時間開銷。

-Xms ,Xmx:最小值參數,最大值參數設置避免堆自動擴展

-XX:+HeapDumpOnOutOfMemeoryError:配置參數可以讓虛擬機在出現內存溢出異常的時候Dump出當前的內存堆轉存儲快照以便事後進行分析。

-Xss:設置棧容量

-XX:PermSize -XX:MaxPermSize:可以限制方法區的大小,從而間接的限制常量池的容量大小。

DirectMemory容量可以用:-XX:MaxDirectMemorySize設定

回顧JAVA虛擬機的分區:

運行時數據區:

程序計數器:

JAVA虛擬機棧:各種基本數據類型,對象引用和returnAddress類型

本地方法棧:作用和JAVA虛擬機棧一樣,主要區別:虛擬機棧實行JAVA方法(字節碼)服務,然而本地方法棧使用到的Native方法服務

(有的虛擬機合併了虛擬機棧和本地方法棧)

JAVA堆:垃圾收集器主要管理的區域,用於存放對象實例。

方法區:線程共享的內存區域,存儲已被虛擬機加載的類信息、常量、靜態變量,即時編譯器編譯後的代碼等數據。

運行時常量池:是方法區的一部分,用於存放編譯期生成的各種自面量和符號引用

直接內存:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章