javajava 内存分配之 指针碰撞 创建对象

Posted 九师兄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javajava 内存分配之 指针碰撞 创建对象相关的知识,希望对你有一定的参考价值。

1.概述

对象的创建

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

1. 类加载过程

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

3. 分配内存

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

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


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

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

以上是关于javajava 内存分配之 指针碰撞 创建对象的主要内容,如果未能解决你的问题,请参考以下文章

java中的对象内存分配和访问

JVM技术专题TLAB内存分配+锁的碰撞技术串烧「难点-核心-遗漏」

JVM系列之HotSpot虚拟机对象详解

JVM高级特性-JVM在堆中对象的分配布局访问过程

JVM总结的部分内容

JVM--10--创建对象的步骤对象实例化内存布局访问定位