如何在内部分配对象的内存



我想了解JVM如何在内部分配内存。我已经读到"新"字节码指令就是这样做的。一旦执行了"新"指令,就会对堆上分配的内存进行什么样的记账?有没有办法在不使用new(也许是ReflectionFactory)的情况下创建类的实例?

没有办法在不使用new的情况下创建一个类的实例(也许是ReflectionFactory)?

不。在 Java 中,您可以使用 new 创建实例。

一旦"新"指令被执行,对堆上分配的内存做了什么样的嘘声?

Java使用垃圾收集器,内存模型记录在JLS-17.4内存模型中,其中(部分)

内存模型在给定程序和该程序的执行跟踪的情况下,描述执行跟踪是否是程序的合法执行。Java 编程语言内存模型的工作原理是检查执行跟踪中的每个读取,并根据某些规则检查该读取观察到的写入是否有效。

内存模型描述程序的可能行为。实现可以自由地生成它喜欢的任何代码,只要程序的所有结果执行都产生可由内存模型预测的结果。

编辑

如注释中所述,可能还有其他指令可以在不使用显式new的情况下创建实例,但这样创建的实例仍遵循指定的 Java 内存模型。

您可以使用

Class.newInstance() 创建实例,或者如果类是可克隆的,则可以使用 Object.clone() 创建一个实例(另一个对象的副本)。

最新更新