一、对象导论(三)
2016-04-13 20:53
274 查看
10、对象的创建和生命周期
这个话题贯穿Java内存模型与垃圾回收始终,是个很值得聊聊的地方,在这出现在导论里只是简单的概述一下,后面会有非常详细的关于垃圾回收和内存模型的描述。对象的创建
每个对象一旦被创建就必然会占用JVM的内存资源,当程序不再需要它的时候,它也应该及时的被清理掉,以释放资源供其他对象使用,在Java中,垃圾回收不是我们所关心的,我们只需要知道创建一个对象,然后使用,当它不再被使用之后,JVM会帮我们完成内存的回收。Java中对象动态创建于内存池中,知道运行时才知道需要多少对象、及其生命周期和类型。如果需要一个新对象,可以在需要的时刻直接在堆中创建,因为存储空间是在运行时被动态管理的,所以需要大量的时间在堆中分配存储空间,这可能要远远大于在栈中创建存储空间的时间。在栈中存储空间的创建和释放通常个需要一条汇编指令即可,分别对应将栈顶指针向下移动和将栈顶指针向上移动。而堆中存储空间的创建时间依赖于存储机制的设计。
动态存储有这样一个一般性的逻辑假设:对象趋向于变得复杂,所有查找和释放存储空间的开销不会对对象的创建造成重大冲击。动态方式所带来的更大的灵活性正是解决一般化变成的问题的要点所在。
Java中,要创建一个对象,就要使用new关键字来构建此对象的动态实例。
对象的生命周期
在栈上面创建的对象,其大小和生命周期都是确定的,随着栈帧的弹出,其生命周期自然结束,空间也得以释放。然而,如果是堆上创建的对象,其大小和生命周期都不是能被实时掌握的,只有在触发垃圾回收的时候,JVM才能得知这个对象是否还能存活,如果还能存活,它还是不知道能活多久。这里所提到的“垃圾回收(GC)”就是指JVM对“死去”的对象进行清理的活动,垃圾回收是很大一块内容,无论是本书还是《Java虚拟机原理》都拿出了很大的篇幅进行介绍,其中后者讲的比价有针对性,对GC感兴趣的同学可以去读一读,必定获益匪浅。本章节剩下的内容也只是泛泛而谈,后面会有比较详细的讲解,因此这一部分打算读一下就好,不作笔记了,学到后面相关部分时再详细记录。
相关文章推荐
- 20135320赵瀚青LINUX第八周学习笔记
- spark入门教程(3)--Spark 核心API开发
- mycat 启动失败 The specified size exceeds the maximum representable size
- C语言小程序
- hdu1358 KMP循环节
- mysqli的认识与应用
- BigDecimal计费
- 团队计划会议-01
- 转:mybatis3中@SelectProvider的使用技巧
- Error MSB6006: “mt.exe”已退出,代码为 31
- 关于取模和取余的区别。
- android socket基于mina框架实现和服务器长连接
- IOS学习之[深入浅出Cocoa]iOS网络编程之Socket
- NYOJ-23 取石子(一)
- 虚幻4 渲染线程主循环
- atitit.解决net.sf.json.JSONException There is a cycle in the hierarchy
- 三角形5
- Eclipse中使用Ant打Android包报错及解决方案
- 用SurfaceView实现Android游戏摇杆
- 面试题之二维数组中的查找