Java是如何管理内存
来源:互联网 发布:西门子plc编程教程 编辑:程序博客网 时间:2024/05/21 09:27
Java的内存管理就是对象的分配和释放问题。在 Java 中,程序员需要通过关键字 new 为每个对象申请内存空间 (基本类型除外),所有的对象都在堆 (Heap)中分配空间。另外,对象的释放是由 GC 决定和执行的。在 Java 中,内存的分配是由程序完成的,而内存的释放是由 GC 完成的,这种收支两条线的方法确实简化了程序员的工作。但同时,它也加重了JVM的工作。这也是 Java 程序运行速度较慢的原因之一。因为,GC 为了能够正确释放对象,GC 必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC 都需要进行监控。
监视对象状态是为了更加准确地、及时地释放对象,而释放对象的根本原则就是该对象不再被引用。
为了更好理解 GC 的工作原理,我们可以将对象考虑为有向图的顶点,将引用关系考虑为图的有向边,有向边从引用者指向被引对象。另外,每个线程对象可以作为一个图的起始顶点,例如大多程序从 main 进程开始执行,那么该图就是以 main 进程顶点开始的一棵根树。在这个有向图中,根顶点可达的对象都是有效对象,GC将不回收这些对象。如果某个对象 (连通子图)与这个根顶点不可达(注意,该图为有向图),那么我们认为这个(这些)对象不再被引用,可以被 GC 回收。
以下,我们举一个例子说明如何用有向图表示内存管理。对于程序的每一个时刻,我们都有一个有向图表示JVM的内存分配情况。以下右图,就是左边程序运行到第6行的示意图。
Java使用有向图的方式进行内存管理,可以消除引用循环的问题,例如有三个对象,相互引用,只要它们和根进程不可达的,那么GC也是可以回收它们的。这种方式的优点是管理内存的精度很高,但是效率较低。另外一种常用的内存管理技术是使用计数器,例如COM模型采用计数器方式管理构件,它与有向图相比,精度行低(很难处理循环引用的问题),但执行效率很高。
- Java是如何管理内存
- JAVA内存管理【1.1 java是如何管理内存的】
- JAVA是如何管理内存的?
- java 是如何管理内存的
- java是如何管理内存的
- java是如何管理内存的
- 【Windows】内存是如何管理
- 我们首先必须了解Java是如何管理内存的
- 内核是如何管理内存的?
- 内核是如何管理内存的?
- 内核是如何管理内存的?
- 内核是如何管理内存的?
- 内核是如何管理内存的?
- 【译】内核是如何管理内存的
- 内核是如何管理内存的
- Python是如何进行内存管理的
- python是如何进行内存管理的?
- Python是如何进行内存管理的?
- 深入理解typedef
- 正则表达式 - 语法
- 顺序表应用6:有序顺序表查询
- fastjson
- 精通CSS+DIV网页样式布局(一)
- Java是如何管理内存
- Android修改控件背景图片的一点提示
- C/C++ typedef用法
- 内存不足
- .net 一个解决方案调用另一个解决方案里面的dll文件 调试
- pojo和javabean的比较
- Spring 给Bean属性注入null值
- 二分查找 C/C++实现
- 转载:统计一串英文中出现次数最多的单词以及次数;