java的内存管理机制
1、內(nèi)存區(qū)域的分類
棧內(nèi)存:基本類型變量和對(duì)象的引用,優(yōu)勢(shì)在于存取速度快
堆內(nèi)存:new創(chuàng)建的對(duì)象和數(shù)組以及對(duì)象的實(shí)例化變量,優(yōu)勢(shì)在于動(dòng)態(tài)分配內(nèi)存,但是存取速度相對(duì)較慢
2、不同類型的內(nèi)存分配
(1)基本數(shù)據(jù)類型:類似int,char,double之類的數(shù)據(jù)類型
???????? 當(dāng)使用int a;來(lái)定義的時(shí)候,會(huì)在棧空間分配一個(gè)空間來(lái)存a(此時(shí)為空);當(dāng)使用int a=2;來(lái)定義的時(shí)候,會(huì)在棧空間分配一個(gè)空間來(lái)存a,同時(shí)去找有沒(méi)有值為2的內(nèi)存空間,如果有就把a(bǔ)的地址空間指向2的地址空間,如果沒(méi)有就創(chuàng)建值為2的地址空間,把a(bǔ)的地址空間指向那個(gè)地址空間。
(2)對(duì)象
???????? 對(duì)對(duì)象的內(nèi)存分配主要是在棧空間存放對(duì)象的地址(對(duì)應(yīng)的堆空間的地址),在堆空間存放對(duì)象
(3)String
???????? String其實(shí)就是一個(gè)類,但是有比較特殊的地方。
???????? String s = new String(“Hello,World!”); 和 String s = “Hello,World!”; 是不一樣的:
???????? 前者和普通類是一樣的,后者與基本類型類似,會(huì)先去找有沒(méi)有”Hello,World!”,如果沒(méi)有才會(huì)去創(chuàng)建一個(gè)值為”Hello,World!”的對(duì)象,然后棧空間存放這個(gè)對(duì)象的在堆中的地址(記這個(gè)棧空間的地址為X,X不是對(duì)象在堆中的地址),s在棧空間的值是X。
(4)數(shù)組
???????? 棧中存放數(shù)組在堆中的首地址,堆中分配數(shù)組。
(5)方法調(diào)用時(shí)的內(nèi)存分配
???????? 實(shí)例變量和對(duì)象在堆中,局部變量在棧中(方法執(zhí)行完成之后就會(huì)被回收)
3、垃圾回收機(jī)制
(1)方式
???????? JVM自己回收或者是system.gc();請(qǐng)求回收。
(2)對(duì)象
???????? 1)空引用:String s = null;此時(shí)s就會(huì)被回收
???????? 2)沒(méi)有引用:String s = “a”;s = “b”;那么a就變成“無(wú)主孤魂”就會(huì)被回收
???????? 3)過(guò)期:方法運(yùn)行完成后,方法中的局部變量就會(huì)被回收
???????? 4)互相引用:對(duì)象A引用了對(duì)象B,B直接或者間接引用了對(duì)象A,而且A和B都不被其他對(duì)象所引用,這樣也會(huì)被回收
(3)垃圾回收算法
???????? http://speed847.iteye.com/blog/373278
轉(zhuǎn)載于:https://www.cnblogs.com/songxh-scse/p/5887977.html
總結(jié)
以上是生活随笔為你收集整理的java的内存管理机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux系统MySQL开启远程连接
- 下一篇: Vue.js 入门指南之“前传”(含su