实体管理器管理的实体在堆内存中是否有 2 个对象?

Does entities managed by an Entity Manager have 2 objects in heap memory?

在我的 DAO class 中,比方说,我有实体管理器 'em' 由实体管理器工厂构成,之后的代码如下:-

CarEntity carEntity = new CarEntity;//line 1
carEntity.setName("XYZ");           //line 2

当我执行上面的代码行时,在堆内存中创建了一个对象,并在其中存储了它的实例变量的值"XYZ"。

现在考虑下面的代码:

em.getTransaction().begin();
em.persist(carEntity);         //line 3

在第 3 行之后,我们知道,carEntity 对象进入托管状态。 在我刷新或提交 事务之前,它不会转到数据库

那么实体管理器如何知道实体已进入托管状态? 执行 line 3 后是否为 CarEntity 创建了一个新对象? 或者它在堆中的内存位置是否有任何变化,表示它的状态从 'new state' 更改为 'managed state'?

据我所知,处于托管状态的实体在持久上下文(也是堆区域)中分配内存。这是否意味着内存再次分配给堆中的托管实体。

如果是这样,则意味着托管实体在 JVM 的堆内存中有 2 个对象。一个由程序的引用处理,另一个由实体管理器实例处理。

这就是我要澄清的!

将实体添加到列表时会发生什么?该列表仅具有对实体的引用。对于持久性上下文来说也是一样的。它保留对托管实体的引用。它知道一个实体是托管的,因为该实体在其托管实体集合中。