专栏名称: HollisChuang
Developer
目录
相关文章推荐
51好读  ›  专栏  ›  HollisChuang

原创|灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?

HollisChuang  · 掘金  ·  · 2019-08-01 02:40

正文

阅读 250

原创|灵魂拷问:Java对象的内存分配过程是如何保证线程安全的?

JVM内存结构,是很重要的知识,相信每一个静心准备过面试的程序员都可以清楚的把堆、栈、方法区等介绍的比较清楚。

上图,是一张在作者根据《Java虚拟机规范(Java SE 8)》中描述的JVM运行时内存区域结构画的。再强调一下,以上是JVM规范定义的逻辑分区,不同的虚拟机厂商,或者相同的虚拟机的不同版本实现上也不尽相同。

很多人都知道Java对象是在堆内存中分配空间的( JIT优化 除外),也知道内存分配过程中是线程安全的,那么虚拟机到底是如何保证线程安全的呢?本文就来简单介绍一下。

Java对象的内存分配

我们知道,Java是一门面向对象的语言,我们在Java中使用的对象都需要被创建出来,在Java中,创建一个对象的方法有很多种,如使用new、使用反射、使用Clone方法等,但是无论如何,对象在创建过程中,都需要进行内存分配。

拿最常见的new关键字举例,当我们使用new创建对象后代码开始运行后,虚拟机执行到这条new指令的时候,会先检查要new的对象对应的类是否已被加载,如果没有被加载则先进行类加载。

在类加载检查通过之后,就需要给对象进行内存分配了,分配的内存主要用来存放对象的实例变量。

在进行内存分配时,需要根据对象中的实例变量情况等信息确定需要分配的空间大小,然后从Java堆中划分出这样一块区域(假设没有JIT优化)。







请到「今天看啥」查看全文