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

时间:2014-11-27 04:03:38

标签: java memory

我想了解JVM如何在内部分配内存。我已经读过“新”字节码指令执行此操作。执行“新”指令后,对堆上分配的内存执行何种簿记?有没有办法在不使用new的情况下创建类的实例(可能是ReflectionFactory)?

2 个答案:

答案 0 :(得分:2)

有没有办法在不使用new的情况下创建类的实例(可能是ReflectionFactory)?

没有。在Java中,您使用new创建实例。

一旦"新"执行指令,为堆上分配的记忆做了什么样的bookeeping?

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

  

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

     

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

修改

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

答案 1 :(得分:0)

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