【JAVA内存回收】Java 内存回收机制
下面这个图,很清楚地说明对象在new的时候是怎样开辟内存空间的
其中对象new出来的,是栈内存,变量的开辟是堆内存
Java的一个重要优点就是通过垃圾收集器GC (Garbage Collection)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java 不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC 或JVM的问题。其实,这种想法是不正确的,因为Java 也存在内存泄漏,但它的表现与C++不同。如果正在开发的Java 代码要全天24 小时在服务器上运行,则内存漏洞在此处的影响就比在配置实用程序中的影响要大得多,即使最小的漏洞也会导致JVM耗尽全部可用内存。另外,在很多嵌入式系统中,内存的总量非常有限。在相反的情况下,即便程序的生存期较短,如果存在分配大量临时对象(或者若干吞噬大量内存的对象)的任何Java 代码,而且当不再需要这些对象时也没有取消对它们的引用,则仍然可能达到内存极限。
Java 的内存管理就是对象的分配和释放问题。分配内存的方式多种多样,取决于该种语言的语法结构。但不论是哪一种语言的内存分配方式,最后都要返回所分配的内存块的起始地址,即返回一个指针到内存块的首地址。在Java 中所有对象都是在堆(Heap)中分配的,对象的创建通常都是采用new或者是反射的方式,但对象释放却有直接的手段,所以对象的回收都是由Java虚拟机通过垃圾收集器去完成的。这种收支两条线的方法确实简化了程序员的工作,但同时也加重了JVM的工作,这也是Java 程序运行速度较慢的原因之一。因为,GC 为了能够正确释放对象,GC 必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC 都需要进行监控。监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。
Java 使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达,那么GC 也是可以回收它们的。
在Java 语言中,判断一块内存空间是否符合垃圾收集器收集标准的标准只有两个:
一个是给对象赋予了空值null,以下再没有调用过,
另一个是给对象赋予了新值,即 重新分配了内存空间。
【JAVA内存回收】Java 内存回收机制相关推荐
- 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )
文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...
- java基础(一):谈谈java内存管理与垃圾回收机制
看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...
- Java内存结构与垃圾回收机制算法分析
什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 但不一定所有人都知道的是, ...
- 详解JVM内存管理与垃圾回收机制5 - Java中的4种引用类型
在Java语言中,除了基础数据类型的变量以外,其他的都是引用类型,指向各种不同的对象.在前文我们也已经知道,Java中的引用可以是认为对指针的封装,这个指针中存储的值代表的是另外一块内存的起始地址(对 ...
- 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制
Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...
- Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制
开篇词:跳出舒适区,走在Android行业的前端 你好,我是姜新星,一个深耕 Andorid 领域的老工程师. 记得 2010 年毕业典礼上,某位老师说"你们是最幸福的一届毕业生,正好赶上中 ...
- java 虚拟机 Java内存结构 JVM垃圾回收机制算法
什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 但不一定所有人都知道的是, ...
- JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)
转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...
- java内存 海子_Java垃圾回收机制 - 海 子
Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...
- java有自己的内存回收机制,但为什么还存在内存泄漏的问题?
1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢? 在面试中经常会碰到这样一个问题(事实上笔者也碰到过):如何判断一个对象已经死去? 很容易想到的一个答案是:对一个对 ...
最新文章
- 前端猎奇系列之探索Python来反补JavaScript——上篇
- 关于librtmp接收数据(接收网络电视的数据流)
- 关于VC网络编程中用 char 发送结构体的说明
- 多线程介绍与threading模块应用以及使用Thread类创建多线程
- 浅谈jQuery Mobile设计思想
- 【开发者笔记】利用ab命令对接口进行压力测试
- 打开计算机页面闪,电脑打开网页闪烁几大原因及解决
- 项目管理高手常用的10张图表推荐!(小白也能懂的项目管理)
- 浅论bitset与位图算法bitmap
- 程序员的薪资真有那么高吗
- CSP-X模拟题第三套-信心赛题解
- Android 多平台AR SDK 集成使用
- 【flutter】上架马甲包过审
- Gif录制工具Gyazo 官方版
- Android 屏幕适配方案(七)
- HEVC-I帧中CU,TU,PU之间的关系
- 输入框上的Magnifier
- 【极客赠书】向Richard Stallman提问,赢取传记《若为自由故》【活动结束】
- vue组件通信你还在用笨重的vuex吗
- 条码软件如何实现扫描二维码显示汉字