java的内存管理 对象的分配与释放
分配
程序员通过new为每个对象申请内存空间(基本类型除外),所有对象都在堆中分配空间;释放:对象的释放是由垃圾回收机制决定和执行的。
Java内存分为两种:栈内存和堆内存
(1)在函数中定义的基本类型变量(即基本类型的局部变量)和对象的引用变量(即对象的变量名)都在栈内存中分配;
(2)堆内存用来存储由new创建的对象和数组以及对象的实例变量(即全局变量)
(3)堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,因为它是运行时动态分配内存的;缺点是运行时动态分配内存,存取速度慢;
(4)栈的优点是存取速度较快仅仅次于CPU中的寄存器,且栈数据可以共享;但是栈中的数据大小和生存期是必须确定的,缺乏灵活性;
(5)只有一个堆区被所有线程共享,堆区不存放基本类型和对象引用只存放对象本身
(6)每个线程包含一个栈区,保存基础数据类型的对象和自定义对象的引用,每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问
还有一个方法区:存储所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量等信息,又叫静态区,是所有线程共享的。
Java对象销毁
Java中垃圾收集器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象作为垃圾进行回收,释放垃圾对象所占的内存空间。
对象运行结束后或生命周期结束时,将成为垃圾对象,但并不意味着就立即会被回收,仅当垃圾收集器空闲或内存不足时,才会回收他们。
Java中每个对象都拥有一个finalize()方法:
垃圾回收器在回收对象时自动调用对象的finalize()方法来释放系统资源。
参考:https://www.cnblogs.com/liufangdekele/p/6118979.html
参考:http://www.jb51.net/article/64258.htm
最新文章
- centos6.5编译安装lamp开发环境
- aiku给你们最真心地学习建议--转
- WCF传输Dataset大数据量 -压缩
- 如何配置svn服务器
- 【Android 复习】 : Activity之间传递数据的几种方式
- 彻底删除mysql的方法(有隐藏文件)
- <;php>;统计整个文件夹的大小
- Linux学习(一):linux更改ip地址命令_更改DNS_更改默认网关_更改子网掩码_主机名
- jQuery禁用、开启鼠标滚轮事件
- 控制使用jquery load()方法载入新页面中的元素
- Android 截屏与 WebView 长图分享经验总结
- MongDB篇,第三章:数据库知识3
- [VS工具]如何让#region...#endregion在ashx文件页面上折叠
- lufen登录注册
- Filter查询
- Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?(经典经典)
- mysql日期相关的函数
- C++11 override和final
- linux find 命令查找文件和文件夹
- (精)字符串,map ->; json对象->;map(初学者必读)