分配

程序员通过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

最新文章

  1. centos6.5编译安装lamp开发环境
  2. aiku给你们最真心地学习建议--转
  3. WCF传输Dataset大数据量 -压缩
  4. 如何配置svn服务器
  5. 【Android 复习】 : Activity之间传递数据的几种方式
  6. 彻底删除mysql的方法(有隐藏文件)
  7. <php>统计整个文件夹的大小
  8. Linux学习(一):linux更改ip地址命令_更改DNS_更改默认网关_更改子网掩码_主机名
  9. jQuery禁用、开启鼠标滚轮事件
  10. 控制使用jquery load()方法载入新页面中的元素
  11. Android 截屏与 WebView 长图分享经验总结
  12. MongDB篇,第三章:数据库知识3
  13. [VS工具]如何让#region...#endregion在ashx文件页面上折叠
  14. lufen登录注册
  15. Filter查询
  16. Nginx是什么,有什么优点?为什么选择Nginx做web服务器软件?(经典经典)
  17. mysql日期相关的函数
  18. C++11 override和final
  19. linux find 命令查找文件和文件夹
  20. (精)字符串,map -> json对象->map(初学者必读)

热门文章

  1. quartz(3)--spring整合quartz入门案例
  2. static变量的作用
  3. MFC中如何在一个类中调用另一个类的控件
  4. jmeter-执行多个sql查询语句
  5. scala学习手记34 - trait方法的延迟绑定
  6. SpringBoot实现多数据源(实战源码)
  7. 找出此产品描述中包含N个关键字的长度最短的子串
  8. 在Windows Server 2012上安装SharePoint 2010 SP1
  9. 更改当前启动项,开关Hyper-V
  10. 用verilog来描述组合逻辑电路