1. 程式人生 > >JVM學習框架及記憶體結構初略理解

JVM學習框架及記憶體結構初略理解

JVM作用

      JAVA由於有虛擬機器的特性,很多東西是編譯器自己做的,不相C語言 記憶體的分匹配和釋放需要人為控制, JVM有垃圾回收器自動的進行處理,所以很多情況下,這種處理並不能讓我們滿意。為了解決這個問題還有執行緒處理的問題,我們需要學習JVM來處理相關異常(記憶體溢位)以及自定義JDK。

JVM學習的知識框架

    1、瞭解JAVA虛擬機器的發展  特別是Hotsop
    2、瞭解其自動記憶體管理結構(垃圾回收器)
    3、虛擬機器如何執行程式
    4、Java程式如何從原始碼到位元組碼   位元組嗎到機器碼
    5. JAVA裡提供了高效的執行緒操作,但是還是不夠, 我們可以通過JVM自己去搞 高效的併發操作
 
    2.3是理論基礎  (哪裡發生的溢位異常)
    4.5 運用 理論進行實踐 (如何解決記憶體溢位的異常 還有自定以JDK)

目前我學JVM,達到的目標:

   1、構建相關的學科框架

    2、著重去理解,第二章。記憶體管理裡的記憶體結構 幫助後續程式設計;四五章系統優化,暫不管


相關知識導圖和模型如下:

記憶體結構:

    虛擬機器棧:  存放物件引用包括各種基本資料型別(int .物件引用)  
    棧幀:有關方法的各種資訊,區域性變數 ,如何去呼叫方法 
    本地本地方法棧:作用和棧幀差不多,只不過是存放虛擬機器native方法的
    堆:  存放各種物件,陣列的資料   方法區:  類載入進來之後,類資訊(欄位 方法 介面)靜態量,常量(邏輯上的劃分)常量池:執行時期也可以存放相關資料
    程式計數器:執行緒開始時,JVM依據這個程式計數器進行操作 
    以上是虛擬機器內部的結構,外部還有執行引擎和本地庫介面,和其他軟體進行相關連線


與相關執行緒的知識:

    堆和方法區是資料共享的
    虛擬機器棧  本地方法棧 程式計數器是私有的 

GC概念:

       GC (GarbageCollection)是垃圾回收機制,在JAVA中開發人員無法使用指標來自由的管理記憶體,GC是JVM對記憶體(主要就是物件)進行管理的方式,GC使得JAVA開發人員擺脫了繁瑣的記憶體管理工作,讓程式開發更有效率。 對於GC來說,當程式設計師建立物件時,GC就開始監控這個物件的地址、大小以及使用情況。通常,GC採用有向圖的方式記錄和管理堆(heap)中的所有物件。通過這種方式確定哪些物件是"可達的",哪些物件是"不可達的"。當GC確定一些物件為"不可達"時,GC就有責任回收這些記憶體空間。但是,為了保證GC能夠在不同平臺實現的問題,Java規範對GC的很多行為都沒有進行嚴格的規定。例如,對於採用什麼型別的回收
演算法、什麼時候進行回收等重要問題都沒有明確的規定。因此,不同的JVM的實現者往往有不同的實現演算法。這也給Java程式設計師的開發帶來行多不確定性

相關一些記憶體結構圖片,幫助理解其JVM的記憶體結構:



相關推薦

JVM學習框架記憶體結構理解

JVM作用       JAVA由於有虛擬機器的特性,很多東西是編譯器自己做的,不相C語言 記憶體的分匹配和釋放需要人為控制, JVM有垃圾回收器自動的進行處理,所以很多情況下,這種處理並不能讓我們滿意。為了解決這個問題還有執行緒處理的問題,我們需要學習JVM來處理相關異常

JVM學習之java記憶體模型

JVM學習之java記憶體模型 以下blog內容來自《深入理解Java虛擬機器_JVM高階特性與最佳實踐》感謝作者!! java虛擬機器規範定義了一種java記憶體模型(JMM)來遮蔽不同硬體和作業系統的差異,達到跨平臺執行效果,記憶體模型的定義一個宗旨就是併發記憶體訪問操作不會產生

jvm學習之java記憶體區域

java虛擬機器在執行java程式的過程中會把它所管理的記憶體劃分為若干不同區域:有些是依賴使用者執行緒的啟動和結束而建立和銷燬的,有的則是隨著虛擬機器程序的啟動而存在。 執行緒共享區域:方法區 、堆。 執行緒隔離(各個執行緒獨有區域)虛擬機器棧、本地方法棧、程式計數器。  

JVM學習之物件記憶體佈局,物件頭

本篇內容來自《深入理解Java虛擬機器_JVM高階特性與最佳實踐》,感謝作者。 建立物件之後需要使用物件,java中除了對物件屬性方法的呼叫以外還有加鎖實現同步等其他操作,這裡的鎖加在了哪裡,如何記錄鎖,如何對鎖進行分類(有物件鎖,class鎖),垃圾回收機制中有關於GC的

jvm學習筆記——java記憶體區域

一、java記憶體區域:      1、程式計數器(執行緒私有):     記憶體中較小的記憶體空間,可以當做當前執行緒所執行位元組碼的行號指示器。如分支、迴圈、跳轉、異常處理、執行緒恢復都需要依賴這個計數器完成。 2、java虛擬機器棧(執行緒私有):     也

JVM學習(1) 自動記憶體管理機制

Java記憶體區域與記憶體溢位異常 Java和C++之間有一堵由記憶體動態分配和垃圾手機技術所圍成的高牆,牆外面的人想進去,牆裡面的人卻想出來。 概述 對於從事C和C++程式開發的開發人員來說,在記憶體管理領域,他們即是擁有最高權力的皇帝,又是從事最基礎工作的勞動人民——既有用每一個物件的“所有權”,又

JVM垃圾回收記憶體溢位

一、Java JVM垃圾回收: JVM的堆記憶體分為young generation、old generation兩部分,young generation劃分為Eden、From、To三個區間。新建物件使用Eden區,滿後進行young GC,young GC過程中物件在

JVM學習筆記】(一)jvm體驗-記憶體溢位問題分析解決方案

####1、開始 建立Main類和Demo類,在Main類的main方法中建立List,並向List中無限建立Demo物件,造成記憶體溢位, 並輸出記憶體溢位錯誤檔案在專案目錄下,為了使等待時間減小,設定執行堆記憶體大小。 ####2、建立Demo類 package com.ch

JVM窺:Java物件的記憶體結構

物件記憶體結構 Class檔案以位元組碼的形式儲存在方法區當中,用來描述一個類本身的記憶體結構。當使用Class檔案新建物件時,物件例項的記憶體結構又究竟是個什麼樣子呢?   如圖所示,為了表示物件的屬性、方法等資訊,HotSpot VM使用物件頭部的一個指標指向Class區域的方式來

JVM學習(二)類的載入,物件的建立,記憶體分配訪問定位

參考資料:   《深入理解java虛擬機器》    https://www.cnblogs.com/chenyangyao/p/5245669.html    https://blog.csdn.net/qq_41907991/artic

JVM記憶體結構--新生代新生代裡的兩個Survivor區(下一輪S0與S1交換角色,如此迴圈往復)、常見調優引數

轉自http://www.cnblogs.com/duanxz/p/6076662.html 一、為什麼會有年輕代   我們先來屢屢,為什麼需要把堆分代?不分代不能完成他所做的事情麼?其實不分代完全可以,分代的唯一理由就是優化GC效能。你先想想,如果沒有分代,那我們

java的執行緒安全、單例模式、JVM記憶體結構等知識學習和整理

知其然,不知其所以然 !在技術的海洋裡,前路漫漫,我一直在迷失著自我。 歡迎訪問我的csdn部落格,我們一同成長! “不管做什麼,只要堅持下去就會看到不一樣!在路上,不卑不亢!” 在下面的題目來自於我要加的一個QQ群,然後要加這個QQ群

Java架構學習(十二)java記憶體結構&新生代&老年代&JVM引數調優&堆記憶體引數配置&解決堆疊溢位

JVM引數調優與垃圾回收機制 一、java記憶體結構 Java記憶體模型:是多執行緒裡面的,jmm與執行緒可見性有關 Java記憶體結構:是JVM虛擬機器儲存空間。 Java記憶體結構圖 Java記憶體機構分為:方法區、java堆、棧、本地

JVM常用工具,記憶體結構,垃圾收集,鎖學習筆記(一)

JVM(JDK1.7)檢視JVM程序&引數JPS         列出在主機上執行的虛擬機器,語法jps [ options ] [ hostid ]                 jps-m -->輸出傳遞給JVM主方法的引數    jps -v -->

深入理解JVM記憶體結構GC機制

開發十年,就只剩下這套架構體系了! >>>   

這一次,終於系統的學習JVM 記憶體結構

最近在看《 JAVA併發程式設計實踐 》這本書,裡面涉及到了 Java 記憶體模型,通過 Java 記憶體模型順理成章的來到的 JVM 記憶體結構,關於 JVM 記憶體結構的認知還停留在上大學那會的課堂上,一直沒有系統的學習這一塊的知識,所以這一次我把《 深入理解Java虛擬機器JVM高階特性與最佳實踐 》、

2萬字長文包教包會 JVM 記憶體結構 保姆級學習筆記

> 寫這篇的主要原因呢,就是為了能在簡歷上寫個“熟悉JVM底層結構”,另一個原因就是能讓讀我文章的大家也寫上這句話,真是個助人為樂的帥小夥。。。。嗯,不單單只是面向面試學習哈,更重要的是構建自己的 JVM 知識體系,Javaer 們技術棧要有廣度,但是 JVM 的掌握必須有深度 > > 點贊

深入探究JVM記憶體結構字串常量池

# 前言 Java作為一種平臺無關性的語言,其主要依靠於Java虛擬機器——JVM,我們寫好的程式碼會被編譯成class檔案,再由JVM進行載入、解析、執行,而JVM有統一的規範,所以我們不需要像C++那樣需要程式設計師自己關注平臺,大大方便了我們的開發。另外,能夠執行在JVM上的並只有Java,只要能夠編譯

python基礎學習二 數據結構之list相關基本操作

意思 指定位置 blog div 基礎 我們 clas 位置 列表 list是py內置的一種數據類型,list就是列表的意思,list就是一種有序的數據集合,可以隨時增加和刪除list的元素。 生活中,比如我們要列出全班同學的名字,就可以用list來表示 >>

八大機器學習框架對比Tensorflow的優勢

同時 ++ 容易 得到 智能 模型訓練 並且 gpu 動態 八大機器學習框架的對比: (1) TensorFlow:深度學習最流行的庫之一,是谷歌在深刻總結了其 前身 DistBelief 的經驗教訓上形成的;它不僅便攜、高效、可擴 展,還能再不同計算機上運行:小到智能