java中是否可能有多个堆?

java中是否可能有多个堆?,java,memory,memory-management,garbage-collection,heap,Java,Memory,Memory Management,Garbage Collection,Heap,java中是否可能有多个堆?如果可能的话,那么在什么情况下会发生这种情况?已经有多个内存区域,但只有一个Java堆 通常有 Java堆,可能会被分解为 伊甸园空间 幸存者空间 终身空间 用于小型直接内存分配的本机内存堆。e、 g.ByteBuffer.allocateDirect(4)有关本机空间中[heap]区域的有趣讨论,请参阅 用于大型直接分配的匿名内存映射ByteBuffer.allocateDirect(10000000) 线程的堆栈空间。i、 e.方法中的局部变量 代码的Per

java中是否可能有多个堆?如果可能的话,那么在什么情况下会发生这种情况?

已经有多个内存区域,但只有一个Java堆

通常有

  • Java堆,可能会被分解为
    • 伊甸园空间
    • 幸存者空间
    • 终身空间
  • 用于小型直接内存分配的本机内存堆。e、 g.
    ByteBuffer.allocateDirect(4)
    有关本机空间中
    [heap]
    区域的有趣讨论,请参阅
  • 用于大型直接分配的匿名内存映射<代码>ByteBuffer.allocateDirect(10000000)
  • 线程的堆栈空间。i、 e.方法中的局部变量
  • 代码的Perm Gen或元空间。您可以使用字节码和JIT编译的代码
  • 本机代码的共享库。这包括DLL/SO以及为什么“hello world”似乎使用了这么多内存
  • 内存映射文件区域。e、 g.FileChannel.map(..)
  • 其他地区很少直接使用,如VDSO。只能通过JNI访问或不安全
当您说“heap”时,它指的是第一个堆,您可以自然地在其上分配Java对象并由垃圾收集器管理。实际上,也存在本机“heap”,但这是不可互换的,并且有一个非常不同的用途,事实上大多数Java开发人员永远不需要知道它的存在


注意:这就是JVM在Windows和Linux上的实现方式,标准中没有任何规定必须存在JVM才能让Java工作。

由于Java虚拟机实例中只有一个堆,因此需要多个JVM才能实现多个堆

Java虚拟机架构-您可以看到区域是Java虚拟机中唯一的一个区域


我只是想知道——为什么?也许您可以通过多个jvm来实现这一点。jvm规范指定jvm的每个运行实例都应该有一个堆。你说的多堆是什么意思?。。您可以更改jvm的堆大小。因此,在单个jvm中不可能有两个堆?答案已经是它通常所指的方式:堆,而不是“堆”。您能告诉我您想要实现什么吗?