Java 在JPA中,哪个内存区域分配给托管实体对象?

Java 在JPA中,哪个内存区域分配给托管实体对象?,java,jpa,Java,Jpa,在JPA中,有一个持久性上下文,它保持所有处于托管状态的实体对象,这样,如果对同一对象的请求再次出现,就不需要从数据库中获取该对象并从持久性上下文本身返回它。 我很好奇这个持久性上下文在哪个内存区域获得内存?它是仅在JVM内部还是在何处?您可以创建一个持久性提供程序,将其保留在Java堆之外,但这需要本机代码,其优点值得怀疑 持久性提供程序是普通的Java代码,因此它创建的对象位于Java堆中。我读到jpa中的持久性上下文是一种缓存类型(类似于hibernate中的一级缓存)。那么这个缓存实际上

在JPA中,有一个持久性上下文,它保持所有处于托管状态的实体对象,这样,如果对同一对象的请求再次出现,就不需要从数据库中获取该对象并从持久性上下文本身返回它。
我很好奇这个持久性上下文在哪个内存区域获得内存?它是仅在JVM内部还是在何处?

您可以创建一个持久性提供程序,将其保留在Java堆之外,但这需要本机代码,其优点值得怀疑


持久性提供程序是普通的Java代码,因此它创建的对象位于Java堆中。

我读到jpa中的持久性上下文是一种缓存类型(类似于hibernate中的一级缓存)。那么这个缓存实际上是否驻留在堆内存中?堆的这个区域与Java的普通对象(由“new”关键字创建)所在的区域不同吗?请澄清。或者这是否意味着持久性提供程序创建的实体管理器对象是一个非常大的对象,其中包含所有托管实体对象?请澄清一下,持久性上下文中有一级缓存,这并没有什么神奇之处。它只是由普通的Joe编写的普通Java代码。第二级缓存可以通过多种方式实现,无论是Java解决方案(如
EHCache
)还是非Java解决方案(如
memcached
),都可以在同一台机器上运行,或者最好在其自己的服务器上运行。