在學習jvm的時候許多人處于迷茫的狀態,對一些基礎的知識反而聽過就忘了,這篇筆記是我在學習jvm的時候隨手記的一些,適合已經學過或者了解過的小伙伴復習回顧一下,當然知識的覆寫是沒有的,主要記錄了我覺得容易忘記或者記錯的知識點,這些有很多是基石知識,希望大家不要忘記,大家看到就當正好復習一下,對大家的面試可能會有一點小小的幫助
記憶體結構
- 1.方法區用來存盤類加載的資料,例如類的名稱,方法入口
- 2.JVM虛擬機堆疊用于存盤執行緒,包括區域變數和方法引數
- 3.堆記憶體用來存盤物件
- 4.方法區的規范實作:永久代和元空間
- 5.方法區 JVM堆疊 堆 都會發生記憶體溢位的問題 程式計數器不會
- 6.程式計數器用來存盤程式運行到哪里 因為執行緒是不斷切換的
垃圾回收演算法
- 標記清除演算法:會產生大量記憶體碎片,很多虛擬機不再使用
- 標記整理演算法:適用于老年代的垃圾回收,老年代的無法被回收的物件多,需要被回收的垃圾少,標記整理的效率高
- 標記復制演算法:適用于新生代的垃圾回收,無法被回收的物件少,標記復制效率高
- 新生代的垃圾回收:在對新生代進行垃圾回收時,會標記伊甸園區中的被參考的物件將其復制到幸存區的to中,然后將伊甸園的所有物件回收,from和to交換位置,如果一個物件經常被參考,到達一個次數后會晉升老年代
- 新生代老年代差別:新生代可以頻繁的回收,速度快 老年代應盡量避免,時間較長
類加載
- 1.類的位元組碼檔案保存在方法區,類名.class即類物件保存在堆記憶體中
- 2.靜態變數屬于類,隨著類的加載而加載,普通成員變數屬于實體物件
- 3.final修飾的變數在加載鏈接階段就已經賦值,而在此階段靜態變數只被分配了空間,沒有賦值,靜態變數的賦值是在初始化階段完成的
- 4.在類的初始化階段,靜態代碼塊和靜態變數的賦值是在一個方法中完成的
- 5.類的加載和初始化都是懶惰的,非必要不加載,例如訪問普通成員變數
Spring框架
Spring_refresh
- 1.Applicationcontext 是beanfactory 衍生來的用于管理bean
- 2.spring容器啟動時會創建IOC容器applicationcontext,創建容器時會呼叫refresh方法,通過這個方法完成bean的創建和初始化
- 3.Environment 主要用于決議@value注解中的${},#{}
- 4.applicationcontext內部仍借用了beanfactory的功能
- 5.Beanfactory 創建和管理bean并不是一瞬間的,需要借助beandefinition,BeanDefinition來源多種多樣主要有XML,配置類,組件掃描三種
- 6.通過@configuration注解把一個類宣告為配置類,spring會管理配置類,但是beanfactory無法檢測到配置類中的@bean注解,這時需要一個后處理器postprocess 幫助beanfinition識別@bean
- 7.通過@component 或者其他注解 將一個類宣告為受spring管理的bean spring會通過組件掃描的方式獲取這個bean
- 8.Bean的后處理器 用于決議注解例如@Autowired @Resource@Value
- 9.Refresh完成的最后會將beanfinitionmap中的bean放到singletonobjects單例池中,物件創建有三個不同階段,每個階段都有不同的bean后處理器參與進來
Spring_bean
1.bean的生命周期 通過refresh方法可以獲取singleton中的單例物件,通過getbean方法獲取bean 多例物件需要手動getbean
2.依賴注入的優先級@autowired最低 其次是按名稱匹配AUTOWIRE_BY_NAME 優先級最高的是精確指定注入bean
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551893.html
標籤:其他
上一篇:Tcl/Tk教程_編程入門自學教程_菜鳥教程-免費教程分享
下一篇:返回列表
