【java】java 内存分配之 指针碰撞 创建对象

在这里插入图片描述

1.概述

对象的创建

当我们在代码中使用 new 关键字创建一个对象时,其在虚拟机中需要经过以下步骤:

1. 类加载过程

当虚拟机遇到一条字节码 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,就必须先执行相应的类加载过程。

3. 分配内存

在类加载检查通过后,虚拟机需要新生对象分配内存空间。根据 Java 堆是否规整,可以有以下两种分配方案:

指针碰撞:假设 Java 堆中内存是绝对规整的,所有使用的内存放在一边,所有未被使用的内存放在另外一边,中间以指针作为分界点指示器。此时内存分配只是将指针向空闲方向偏移出对象大小的空间即可,这种方式被称为指针碰撞。

在这里插入图片描述
醉了,醉了 ,我一直以为指针碰撞时一个很牛逼的东西,很难理解的东西,没想到就是内存使用与未使用的分割点。我他妈的被名词给吓着了。

空闲列表:如果 Java 堆不是规整的,此时虚拟机需要维护一个列表,记录哪些内存块是可用的,哪些是不可用的。在进行内存分配时,只需要从该列表中选取出一块

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/124439209
今日推荐