前言
請在看這篇文章之前先看
https://blog.csdn.net/dtttyc/article/details/89005771
JVM性能調優
使用什麼工具?
Jconsole查看
-Xmx Heap最大
-Xms 初始
-Xmn young區大小
-Xss 每個線程Stack大小
-XX:PermSize 非堆內存初始化大小
-XX:MaxPermSize 最大非堆內存大小
對象什麼時候可以回收
- 引用計數器,如果有引用加1, 引用消失減一
引發問題,加一容易,減一不容易,.找到對象不容易
- java虛擬機中的棧作爲搜索,可以瞭解一下Gc Roots,當沒有再關聯引用那麼就是可以回收的
爲什麼 會有新生代和老年代
爲了高效.根據對象的存活時間劃分,避免全局掃描
對象空間到持久層(方法區)
a1.m1()
- 在棧中找到引用堆的對象
- 在堆中根據對象類型指針找到持久層方法中的classA結構
- 找到具體方法,讓cpu執行
- 執行的時候棧會存儲臨時變量和局部變量分配內存, 當方法執行的時候棧也在改變
抽象
對過程抽象
對數據抽象
用類去封裝數據和過程
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形成一個體系