JVM三(調優與程序本質)

前言

請在看這篇文章之前先看
https://blog.csdn.net/dtttyc/article/details/89005771

JVM性能調優

使用什麼工具?
Jconsole查看

-Xmx  Heap最大
-Xms 初始
-Xmn young區大小
-Xss 每個線程Stack大小
-XX:PermSize 非堆內存初始化大小
-XX:MaxPermSize 最大非堆內存大小

對象什麼時候可以回收

  1. 引用計數器,如果有引用加1, 引用消失減一

引發問題,加一容易,減一不容易,.找到對象不容易
在這裏插入圖片描述

  1. java虛擬機中的棧作爲搜索,可以瞭解一下Gc Roots,當沒有再關聯引用那麼就是可以回收的

爲什麼 會有新生代和老年代

爲了高效.根據對象的存活時間劃分,避免全局掃描

對象空間到持久層(方法區)

在這裏插入圖片描述

a1.m1()

  1. 在棧中找到引用堆的對象
  2. 在堆中根據對象類型指針找到持久層方法中的classA結構
  3. 找到具體方法,讓cpu執行
  4. 執行的時候棧會存儲臨時變量和局部變量分配內存, 當方法執行的時候棧也在改變

抽象

對過程抽象
對數據抽象
用類去封裝數據和過程

class ABC{
  //屬性(數據)
  //方法(過程,操作,行爲)
}

繼承

擴展,代碼重用.正是有了繼承纔有了面向對象的第三大特性多態
複用不單單是在繼承有, 我再A中new出b對象,依舊可以訪問b對象裏面的內容

多態

一個對象多種形態,由於繼承而產生了多態
1人中一形態, 人是動物的一種形式, 人是生物的一種形態, 人是物體的一種形態, 爲什麼呢?
是因爲他們都繼承了動物,生活,物體.這也就是 繼承產生了多態

Animal a = new Bird()
主觀認爲      客觀存在,  從不同觀察角度看會運行不同的類
編譯時類型    運行時類型  不同的運行時期

a.sing() 編譯錯誤, 編譯不讓通過, 因爲Bird是運行時存在的
我們把子類對象當做父類對象來看, 那麼就只能訪問父類中有定義的熟悉和方法
在編譯器的時候我們可以讓他繞過,也就是說不會報錯, 但是對於jvm來說是不會被欺騙也就是根據不同角度運行不同的類

構造函數

1任何類都有構造函數,如果沒有明確的定義,則系統會默認加上構造函數
2 任何一個類的構造函數第一行只能是
this(XXX) or super (XXX)
如果不明確聲明,系統默認加上調用super()

接口

1彌補單繼承缺點
2形成一個體系

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