Java内存管理

本文是自己在复习java基础知识时对内存管理部分进行的一点小小的梳理,有不对的地方还望各位大神指点,欢迎分享。

1.内存泄漏:由于某种原因使分配的内存始终没有得到释放。如果该任务不断的重复,程序最终会耗尽内存并异常终止,至少无法运行。Java不要求程序员显示分配内存和释放内存,当创建对象时会自动分配内存,当该对象的引用不存在时释放该内存。在java中,内存泄漏:1)对象可达,即在有向图中,存在通路可以与其相连;2)对象是无用的,即程序以后不会再使用这些对象。如果满足这两个条件,这些对象就可以判定为Java中的内存泄漏。在Java中,GC线程的优先级别较低。

2.Java中使用垃圾收集器技术来监视程序的运行状态。这里会引用一种叫软指针(不直接指向对象,而是指向对象的引用)的概念。Java使用软指针来跟踪对象的各个引用,并用一个对象表将这些软指针映射为对象的引用,使用软指针,垃圾收集器能够以单独的线程在后台运行,并依次检查每个对象。通过更改对象表项,垃圾收集器可以标记对象,移除对象,移动对象或检查对象。

3.垃圾收集器是自动运行的,一般情况下,无需显示的请求垃圾收集器,程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的空间。调用System类中的静态方法gc()可以运行垃圾收集器,但并不能保证立即回收指定对象。

4.Java垃圾回收机制:gc即垃圾回收机制,是指JVM用于释放那些不再使用的对象所占的内存。Java的垃圾回收机制是为所有的进程服务的,而不是为了某个特定的进程服务,因此任何一个进程都不能命令垃圾回收机制做什么,怎么做,做多少。在垃圾回收器收集一个对象之前,一般要求程序调用适当的方法释放资源,这个方法就是finalize()。原型是protected void finalize() throws Throwable。在该方法返回之后,对象消失,垃圾回收器开始执行。

5.在Java中程序员通过使用new关键字申请内存空间,所有的对象都在堆中分配空间,释放是由GC决定和执行。正因为如此,加重了JVM的负担,这就造成了java程序运行较慢(原因之一)。因为GC要监控每一个对象的运行状态,包括对象的申请,引用,被引用和赋值等。


堆栈:

1.Java中把内存划分为2种,一种是栈内存,一种是堆内存。栈:存取速度比堆快,仅次于直接位于CPU中的寄存器,但缺点是存在于栈中的数据大小与生存周期必须是确定的,缺乏灵活性,另外栈数据可以共享。堆:动态分配内存大小,生存周期也不必事先告诉编译器,java垃圾收集器会自动收走这些不再使用的数据。缺点是,由于要在运行时动态分配内存,存取速度慢。

2.8种基本数据类型(int, short, long, byte, float, double, boolean, char)是存在于栈中,而且还有数据共享的功能。int a = 3;int b = 3;这里在栈中只存在一个3,而且a = 4,也不会影响b的值,b还是3.对于String str = "abc";同样适用,但不适用于String str = new String("abc");

3.栈主要存放一些基本数据类型的变量和对象句柄(对象的引用)。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。

4.我们在使用诸如String str = "abc";的格式定义类时,总是想当然地认为,创建了String类的对象str,不一定,因为如果事先没有,那么就会创建,如果原来就有,那就指向那个原来的对象就可以了!只有通过new()方法才能保证每次都创建一个新的对象。由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

注:更加深入的垃圾回收以及内存管理机制参考印象笔记中的相关笔记。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容