"JAVA内存管理总结" Java内存管理是对象的分配和释放问题。Java的内存管理可以分为两部分:内存的分配和释放。 **内存的分配** 在Java中,内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对象都在堆(Heap)中分配空间。例如,在创建一个新的对象时,需要使用new关键字来申请内存空间,如`String str = new String("hello");`。在这里,str是一个指向String对象的引用,指向一个堆中的对象。 **内存的释放** 对象的释放是由垃圾回收机制决定和执行的,这样做确实简化了程序员的工作。但同时,它也加重了JVM的工作。因为,GC为了能够正确释放对象,GC必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控。 **什么是Java中的内存泄露** 在Java中,内存泄漏是存在一些被分配的对象,这些对象有两个特点:首先,这些对象是可达的,即在有向图中,存在通路可以与其相连(也是说仍存在该内存对象的引用);其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。 **JVM的内存区域组成** Java把内存分为两种:一种是栈内存,另一种是堆内存。在函数中定义的基本类型变量和对象的引用变量都在函数的栈内存中分配;堆内存用来存放由new创建的对象和数组以及对象的实例变量。在函数(代码块)中定义一个变量时,Java在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间;在堆中分配的内存由Java虚拟机的自动垃圾回收器来管理。 **堆和栈的优缺点** 堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的。缺点是要在运行时动态分配内存,存取速度较慢;栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。另外,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 **Java中数据在内存中是如何存储的** Java的基本数据类型共有8种,即int,short,long,byte,float,double,boolean,char(注意,并没有string的基本类型)。这种类型的定义是通过诸如`inta=3;`长`b=255L;`的形式来定义的。如`inta=3;`这里的a是一个指向int类型的引用,指向3这个字面值。这些字面值的数据,由于大小可知,生存期可知(这些字面值定义在某个程序块)。
下载后可阅读完整内容,剩余5页未读,立即下载
- 粉丝: 3
- 资源: 885
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- OptiX传输试题与SDH基础知识
- C++Builder函数详解与应用
- Linux shell (bash) 文件与字符串比较运算符详解
- Adam Gawne-Cain解读英文版WKT格式与常见投影标准
- dos命令详解:基础操作与网络测试必备
- Windows 蓝屏代码解析与处理指南
- PSoC CY8C24533在电动自行车控制器设计中的应用
- PHP整合FCKeditor网页编辑器教程
- Java Swing计算器源码示例:初学者入门教程
- Eclipse平台上的可视化开发:使用VEP与SWT
- 软件工程CASE工具实践指南
- AIX LVM详解:网络存储架构与管理
- 递归算法解析:文件系统、XML与树图
- 使用Struts2与MySQL构建Web登录验证教程
- PHP5 CLI模式:用PHP编写Shell脚本教程
- MyBatis与Spring完美整合:1.0.0-RC3详解