JVM内存分配策略

引自《深入理解Java虚拟机》

关键词:优先级,大对象,老不死对象

三个策略:

  • 对象优先在Eden区分配
  • 大对象直接进入老年代(大对象举例:很长的String,很长的数组)
  • 长期存活的对象进入老年代

长期存活:从Eden出生,每经历一次Minor GC 年龄加1(出生时为0,年龄为1时已经在Survivor区),在年龄达到15(默认)时,就会晋升到老年代

注意:晋升到老年代还有一种情况:

Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,用公式表示为:

原文地址:https://www.cnblogs.com/hwtblog/p/9470418.html

时间: 2024-10-25 14:07:23

JVM内存分配策略的相关文章

深入理解JVM内存分配策略

理解JVM内存分配策略 三大原则+担保机制 JVM分配内存机制有三大原则和担保机制 具体如下所示: 优先分配到eden区 大对象,直接进入到老年代 长期存活的对象分配到老年代 空间分配担保 对象优先在Eden上分配 如何验证对象优先在Eden上分配呢,我们进行如下实验. 打印内存分配信息 首先代码如下所示: public class A { public static void main(String[] args) { byte[] b1 = new byte[4*1024*1024]; }

JVM内存分配策略,及垃圾回收算法

本人免费整理了Java高级资料,一共30G,需要自己领取;传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Scala等)程序员在提升开发效率上获得了惊人的便利.理解GC,对于理解JVM和Java语言有着非常重要的作用.并且当我们需要排查各种内存溢

第六章:JVM内存分配策略

① 对象的内存分配,总体上讲就是在堆上分配,对象主要分配在新生代的Eden区,少数情况也会直接分配在老年代.分配的规则并不是百分百固定的,其细节取决于当前使用的是哪一种垃圾收集器组合,还有虚拟机中与内存相关的参数配置. 对象优先在Eden区分配 大多数情况下,对象在新生代Eden区分配.当Eden区没有足够空间进行分配时,虚拟机会触发一次Minor GC,Minor GC采用复制算法进行垃圾回收. 大对象直接进入老年代 所谓大对象,是指需要大量连续内存的Java对象,最典型的大对象就是那种很长的

JVM性能调优 第七章 内存分配策略

理解了jvm内存分配策略不仅是程序性能调优的重要知识,还能够给养成自己一种良好的代码思路,一个程序的代码差异往往都是在这里体现出来的. 一.对象优先分配到Eden区域   一般来说,新创建的对象都会直接分配到Eden区域,如果Eden区域内存不够,JVM就会触发GC(垃圾回收),一般来说在JVM中有3种GC: Minor GC:指发生在新生代的垃圾收集动作,非常频繁,速度较快. Major GC:指发生在老年代的GC,出现Major GC,经常会伴随一次Minor GC,同时Minor GC也会

JVM总结(二):JVM的内存分配策略

这节我们总结一下JVM中的内存分配策略.目录如下: 内存分配策略 对象优先在新生代Eden分配 大对象直接进入老年代 长期存活的对象将进入老年代 动态对象年龄判定 空间分配担保 内存分配策略 Java技术体系中所提倡的自动内存管理可以归结于两个部分:给对象分配内存以及回收分配给对象的内存. 我们都知道,Java对象分配,都是在Java堆上进行分配的,虽然存在JIT编译后被拆分为标量类型并简介地在栈上进行分配.如果采用分代算法,那么新生的对象是分配在新生代的Eden区上的.如果启动了本地线程分配缓

jvm笔记2--垃圾收集器与内存分配策略

垃圾收集器与内存分配策略 Java运行时,内存的各个部分中,程序计数器,虚拟机栈,本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作.每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的.因此这几个区域不需要过多考虑回收的问题,因为线程结束时,内存自然就跟着回收了. Java堆和方法区不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,只有在程序运行期间才知道会创建哪些对象,这部分内存的分配

java虚拟机学习-JVM内存管理:深入垃圾收集器与内存分配策略(4)

Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 概述: 说起垃圾收集(Garbage Collection,下文简称GC),大部分人都把这项技术当做Java语言的伴生产物.事实上GC的历史远远比Java来得久远,在1960年诞生于MIT的Lisp是第一门真正使用内存动态分配和垃圾收集技术的语言.当Lisp还在胚胎时期,人们就在思考GC需要完成的3件事情:哪些内存需要回收?什么时候回收?怎么样回收? 经过半个世纪的发展,目前的内存分配策略

JVM理论:(二/1)内存分配策略

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存以及回收分配给对象的内存. 对象的分配可能有以下几种方式: 1.JIT编译后被拆散为标量类型并间接地栈上分配 2.对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓冲,将按线程优先在TLAB上分配 3.少数情况下也会直接分配在老年代 参考下图: 5种内存分配策略 1.对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配,当Eden区没有足够空间进行分配时,虚拟机将发起一次Minor G

垃圾收集器与内存分配策略

①对于java虚拟机来说,垃圾收集器主要关注的内存区域是 堆和方法区. ②垃圾收集器就是要收集那些已经“死了”的对象.如果判断一个对象是否存活? 对象引用计数法 对象引用增加一个,那么相应的计数器加1,否则,减1. 优点:实现简单 缺点:不能处理对象间的循环引用.a引用b,b同时引用a. 可达性分析 如果节点到root节点可达,则证明是存活的:否则,已死.所以对于下图的o5,o6,o7虽然他们是循环引用的,但是到root节点无可达,所以已死可清除. ③垃圾回收器对于不同类型引用的回收规则 强引用