对象分配内存

作者: 暮想sun | 来源:发表于2020-01-13 09:46 被阅读0次

对象的内存分配,大方向上是在对上分配(也可能经过JIT编译后拆散为标量类型并间接地在栈上分配),对象主要分配在新生代的Eden区,如果启动了本地线程分配缓冲(TLAB),将按线程优先分配在TLAB上。少数情况下直接分配在老年代。

Serial、Serial Old收集器下:

对象优先在Eden区分配,当Eden区没有足够的空间进行分配时,将发起一次Minor GC。

-XX:PrintGCDetails--收集日志参数,在垃圾收集时打印内存回收日志,且在进程退出时输出当前的内存各区域分配情况。

大对象(大量连续内存空间的对象,例很长的字符串以及数组)直接进入老年代
-XX:PretenureSizeThreshold--令大于这个设置值的对象在老年代分配。只对Serial和ParNew生效

长期存活对象进入老年代。
虚拟机给每个对象定义一个对象年龄器。在Eden的对象,在经过第一次Minor GC后仍然存在,并且可被Survivor容纳的话,将被移动到Survivor空间中,对象年龄设为1。每熬过一次Minor GC,年龄+1。
-XX:MaxTenuringThreshold--对象晋升老年代的年龄阈值。默认为15

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

Minor GC之前,虚拟机先检查老年代最大可用的连续空间是否大于新生代所有对象空间之和。如果不大于且HandlePromotionFailure允许担保的话,会继续查看老年代最大可用的连续空间是否大于晋升到老年代对象的平均大小,如果大于则进行Minor GC。否则进行Full GC。
JDK 1.6 Update 24之后,HandlePromotionFailure失效。

相关文章

  • JVM学习四(内存分配与回收策略)

    (一)内存分配与回收策略 给对象分配内存、回收分配给对象的内存1、对象优先在Eden分配 通过-XX:+Print...

  • 内存分配与回收

    概述 java技术体系所提倡的自动内存管理其实主要包括 ①:给对象分配内存 ②:回收给对象分配的内存对象的内存分配...

  • Java中四种引用

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • Java编程语言:java中四种引用!欢迎补充

    Java内存管理包括内存分配和内存回收。 内存分配:程序员通过new对象,JVM会自动为该对象分配内存。 内存回收...

  • JVM 常见内容汇总

    面试题 对象 对象的创建 分配内存 对象头 内存溢出 内存溢出与内存泄漏 内存溢出:系统无法再分配内存空间。 内存...

  • 内存分配和回收策略

    java自动内存管理:给对象分配内存以及回收分配给对象内存 1、对象优先在Eden分配,当Eden区没有足够空间进...

  • 自动化内存管理

    java中自动化内存管理的自动分为两类: 为对象分配内存 回收分配给对象的内存 对象分配的几个原则: 对象优先在新...

  • 内存分配策略

    详解JVM对象分配内存 对象的内存分分配主要是指对上分配(也可栈上分配),对象主要分配在新生代Eden区,如果启动...

  • 【019】2020.11.19 周四 Java内存分布与回收策略

    内存分布与回收策略 解决两个问题 自动给对象分配内存 基本上都是堆上分配 自动回收分配给对象的内存 对象优先在新生...

  • 对象分配内存

    对象的内存分配,大方向上是在对上分配(也可能经过JIT编译后拆散为标量类型并间接地在栈上分配),对象主要分配在新生...

网友评论

    本文标题:对象分配内存

    本文链接:https://www.haomeiwen.com/subject/orrgactx.html