java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制
程序執(zhí)行的內(nèi)存分析過程:
虛擬機棧(簡稱:棧)的特點如下:
1. 棧描述的是方法執(zhí)行的內(nèi)存模型。每個方法被調(diào)用都會創(chuàng)建一個棧幀(存儲局部變量、操作數(shù)、方法出口等)。
2. JVM為每個線程創(chuàng)建一個棧,用于存放該線程執(zhí)行方法的信息(實際參數(shù)、局部變量等)
3. 棧屬于線程私有,不能實現(xiàn)線程間共享!
4. 棧的存儲特性是“先進后出,后進先出”
5. 棧是由系統(tǒng)自動分配,速度快!棧是一個連續(xù)的內(nèi)存空間
堆的特點如下:
1. 堆用于存儲創(chuàng)建好的對象和數(shù)組(數(shù)組也是對象)
2. JVM只有一個堆,被所有線程共享
3. 堆是一個不連續(xù)的內(nèi)存空間,分配靈活,速度慢!
方法區(qū)(又叫靜態(tài)區(qū),也是堆)特點如下:
1. 方法區(qū)是JAVA虛擬機規(guī)范,可以有不同的實現(xiàn)
2. JVM只有一個方法區(qū),被所有線程共享
3. 方法區(qū)實際也是堆,只是用于存儲類、常量相關(guān)的信息
用來存放程序中永遠不變或唯一的內(nèi)容(類信息、靜態(tài)變量、字符串常量等)
垃圾回收機制(Garbage Collection):
Java引入了垃圾回收機制,令C++程序員最頭疼的內(nèi)存管理問題迎刃而解。Java程序員可以將更多的精力放到業(yè)務(wù)邏輯上而不是內(nèi)存管理工作上,大大的提高了開發(fā)效率。
內(nèi)存管理:
Java的內(nèi)存管理很大程度指的就是:堆中對象的管理,其中包括對象空間的分配和釋放。
對象空間的分配:使用new關(guān)鍵字創(chuàng)建對象即可。
對象空間的釋放:將對象賦值null即可,垃圾回收器將負責回收所有“不可達”對象的內(nèi)存空間。
垃圾回收過程:
任何一種垃圾回收算法一般要做兩件基本事情:
1. 發(fā)現(xiàn)無用的對象
2. 回收無用對象占用的內(nèi)存空間
垃圾回收機制保證可以將“無用的對象”進行回收。無用的對象指的就是沒有任何變量引用該對象。Java的垃圾回收器通過相關(guān)算法發(fā)現(xiàn)無用對象,并進行清除和整理。
垃圾回收相關(guān)算法:
1. 引用計數(shù)法
堆中的每個對象都對應(yīng)一個引用計數(shù)器,當有引用指向這個對象時,引用計數(shù)器加1,而當指向該對象的引用失效時(引用變?yōu)閚ull),引用計數(shù)器減1,最后如果該對象的引用計算器的值為0時,則Java垃圾回收器會認為該對象是無用對象并對其進行回收。優(yōu)點是算法簡單,缺點是“循環(huán)引用的無用對象”無法識別。
2. 引用可達法(根搜索法)
程序把所有的引用關(guān)系看作一張圖,從一個節(jié)點GC ROOT開始,尋找對應(yīng)的引用節(jié)點,找到這個節(jié)點以后,繼續(xù)尋找這個節(jié)點的引用節(jié)點,當所有的引用節(jié)點尋找完畢之后,剩余的節(jié)點則被認為是沒有被引用到的節(jié)點,即無用的節(jié)點。
總結(jié)
以上是生活随笔為你收集整理的java 堆_JAVA学习笔记 07——堆、栈和垃圾回收机制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机设备故障类型有哪些,计算机硬件故障
- 下一篇: java 不显示控制台_命令行启动jav