一般的内存分配是指堆上的分配,但也可能经过JIT编译后被拆散为标量类型并间接地在栈上分配。对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配,少数情况下直接分配在老年代中,分配的规则并不是百分之百固定的。细节取决于哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数的设置。

  一、对象优先在Eden分配

  优先在新生代的Eden区中分配,当不够时,发起一次Minor GC。

  二、大对象直接进入老年代

  需要连续大量内存空间的Java对象,长字符串和数组等。

  三、长期存活的对象将进入老年代

  虚拟机给每个对象定义了一个对象年龄计数器。Eden区的对象,经过一次Minor GC后,如果能进入Survivor区,年龄为1,以后没经过一次Minor GC,年龄加1,默认到15时进入老年代。可参数调节阈值。

  四、动态对象年龄判定

  如果在Survivor中相同年龄的所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等阈值年龄。

  五、空间分配担保

  在发生Minor GC前,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,改为直接进行Full GC。如果小于,检查HandlePromotionFailure设置是否允许担保失败;如果允许,只Minor GC;或者Full GC。

  如果发生了HandlePromotionFailure失败,失败后发起一次Full GC,默认允许担保失败。

  

  

最新文章

  1. Nodejs 饭店
  2. 【CISP笔记】数据库及应用安全
  3. 生物信息大数据&数据库(NCBI、EBI、UCSC、TCGA)
  4. 常用vim设置
  5. Entity Framework 4、5 多字段排序
  6. Jquery手册
  7. ASP.NET中Button控件的CommandName和CommandArgument属性用法
  8. Kill Process by Name
  9. 计算 x y 的最近值
  10. Redis学习——Windows环境下Redis的安装(二)
  11. requirejs的使用和快速理解
  12. React对比Vue(04 父子组件的通信 )
  13. MVC 第一章(下)
  14. R语言爬虫:使用R语言爬取豆瓣电影数据
  15. 2017-2018-2 20155315《网络对抗技术》Exp3:免杀原理与实践
  16. 使用MySQLMTOP监控MySQL性能(一)
  17. 《JAVA程序设计》 实验二 Java面向对象程序设计
  18. [转] Spring MVC 4.1.3 + MyBatis 零基础搭建Web开发框架
  19. Ubuntu快捷键截图
  20. URL里面的中文参数到底转换成了什么?

热门文章

  1. Centos7下搭建KVM虚拟机
  2. JavaWeb---总结(六)Servlet开发(一)
  3. WinForm------字段不能为空错误
  4. linux命令:mkdir 命令详解
  5. Linux学习笔记<四>
  6. C#--网络流Stream、字节数组保存到字符串中
  7. ecshop Admin后台商品列表处(上架、下架、精品...取消精品)增加操作
  8. json跨域
  9. XtraFinder在OSX10.11的使用
  10. Python开发【第十四篇】:Web框架本质