日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足

發(fā)布時(shí)間:2024/10/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)存泄露

什么是內(nèi)存泄露?

在維基百科上的定義如圖:

中文意思就是一個(gè)對象在內(nèi)存中,而程序無法獲取此對象,于是不能釋放該對象所占用的內(nèi)存。

百度百科上的定義如圖:

OWASP上的定義:

開發(fā)者無法釋放某塊不會(huì)再使用的內(nèi)存。

用C語言解釋一下,例如:

#include void function_which_allocates(void) {

/* allocate an array of 45 floats */

float * a = malloc(sizeof(float) * 45);

/* additional code making use of 'a' */

/* return to main, having forgotten to free the memory we malloc'd */

}

int main(void) {

function_which_allocates();

/* the pointer 'a' no longer exists, and therefore cannot be freed,

but the memory is still allocated. a leak has occurred. */

}

程序中的指針a所指向的那塊內(nèi)存在函數(shù)退出后并沒有釋放。malloc申請的是堆內(nèi)存,正常情況下,使用完后要調(diào)用free來釋放該內(nèi)存。

但是在java里面,java有垃圾收集器(Garbage Collection,GC),會(huì)自動(dòng)收集垃圾,也就是不用的內(nèi)存。所以,C語言里的情況,在java里不會(huì)出現(xiàn),但是會(huì)有另外一種內(nèi)存泄露的情況出現(xiàn),例如:

Listlist = new ArrayList();

for (int i = 0; i < 100; i++) {

Object o = new Object();

list.add(o);

o = null;

}

此時(shí),所有的Object對象都沒有被釋放,因?yàn)樽兞縧ist引用這些對象。如果要釋放這些對象,應(yīng)該調(diào)用:‘

list.clear();

但是,如果程序一直沒調(diào)用clear,就有可能發(fā)生內(nèi)存泄露。

所以,java和C里面的內(nèi)存泄露是不一樣的,區(qū)別:

C:沒有指針指向不再使用的內(nèi)存,故無法釋放那塊內(nèi)存。

java:有引用指向不再使用的內(nèi)存,但是并沒有去釋放那塊內(nèi)存。

內(nèi)存溢出

英文叫memory overflow。與緩沖區(qū)溢出類似。比如,char ch[10],卻輸入11個(gè)char進(jìn)去。

但是很多人直接把內(nèi)存溢出當(dāng)成內(nèi)存不足了。

內(nèi)存不足

英文叫out of memory。申請內(nèi)存時(shí),沒有足夠的空間。

內(nèi)存泄露最終會(huì)導(dǎo)致內(nèi)存不足。

另外,可以參考IBM上的文章http://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

總結(jié)

以上是生活随笔為你收集整理的java 内存溢出 内存泄露_java 内存泄露、内存溢出、内存不足的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。