下面这个图,很清楚地说明对象在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 内存回收机制相关推荐

  1. 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 )

    文章目录 一.Java 虚拟机内存分区 二.垃圾回收机制 三.引用计数器算法 ( 无法解决循环引用问题 ) 一.Java 虚拟机内存分区 Java 虚拟机内存分区 : 所有线程共有的内存区域 : 堆 ...

  2. java基础(一):谈谈java内存管理与垃圾回收机制

    看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型: ...

  3. Java内存结构与垃圾回收机制算法分析

    什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 但不一定所有人都知道的是, ...

  4. 详解JVM内存管理与垃圾回收机制5 - Java中的4种引用类型

    在Java语言中,除了基础数据类型的变量以外,其他的都是引用类型,指向各种不同的对象.在前文我们也已经知道,Java中的引用可以是认为对指针的封装,这个指针中存储的值代表的是另外一块内存的起始地址(对 ...

  5. 【深入理解Java虚拟机】自动内存管理机制——垃圾回收机制

      Java与C++之间有一堵有内存动态分配和垃圾收集技术所围成的"高墙",墙外面的人想进去,墙里面的人却想出来.C/C++程序员既拥有每一个对象的所有权,同时也担负着每一个对象生 ...

  6. Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制

    开篇词:跳出舒适区,走在Android行业的前端 你好,我是姜新星,一个深耕 Andorid 领域的老工程师. 记得 2010 年毕业典礼上,某位老师说"你们是最幸福的一届毕业生,正好赶上中 ...

  7. java 虚拟机 Java内存结构 JVM垃圾回收机制算法

    什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机. 但不一定所有人都知道的是, ...

  8. JVM原理(Java代码编译和执行的整个过程+JVM内存管理及垃圾回收机制)

    转载注明出处: http://blog.csdn.net/cutesource/article/details/5904501 JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.e ...

  9. java内存 海子_Java垃圾回收机制 - 海 子

    Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给 ...

  10. java有自己的内存回收机制,但为什么还存在内存泄漏的问题?

    1.既然 Java 的垃圾回收机制能够自动的回收内存,怎么还会出现内存泄漏的情况呢? 在面试中经常会碰到这样一个问题(事实上笔者也碰到过):如何判断一个对象已经死去? 很容易想到的一个答案是:对一个对 ...

最新文章

  1. 前端猎奇系列之探索Python来反补JavaScript——上篇
  2. 关于librtmp接收数据(接收网络电视的数据流)
  3. 关于VC网络编程中用 char 发送结构体的说明
  4. 多线程介绍与threading模块应用以及使用Thread类创建多线程
  5. 浅谈jQuery Mobile设计思想
  6. 【开发者笔记】利用ab命令对接口进行压力测试
  7. 打开计算机页面闪,电脑打开网页闪烁几大原因及解决
  8. 项目管理高手常用的10张图表推荐!(小白也能懂的项目管理)
  9. 浅论bitset与位图算法bitmap
  10. 程序员的薪资真有那么高吗
  11. CSP-X模拟题第三套-信心赛题解
  12. Android 多平台AR SDK 集成使用
  13. 【flutter】上架马甲包过审
  14. Gif录制工具Gyazo 官方版
  15. Android 屏幕适配方案(七)
  16. HEVC-I帧中CU,TU,PU之间的关系
  17. 输入框上的Magnifier
  18. 【极客赠书】向Richard Stallman提问,赢取传记《若为自由故》【活动结束】
  19. vue组件通信你还在用笨重的vuex吗
  20. 条码软件如何实现扫描二维码显示汉字

热门文章

  1. AMiner论文推荐
  2. Uart串口实验--TQ2440
  3. rand()函数详解
  4. CAN/CANFD总线基础培训
  5. 如何做一名好的软件开发的销售精英
  6. 【AWK】awk 基础用法和应用
  7. 读 TiDB: A Raft-based HTAP Database
  8. 开源正弦波20kHz信号发生器 V2
  9. Leetcode--Java--340. 至多包含 K 个不同字符的最长子串
  10. 以编程方式使用 Microsoft Office Visio 2003 ActiveX 控件(经经经经经典)