我还没有深入探讨Java在程序运行时是如何对待内存的,就像我在应用程序级别上所做的那样。最近,由于应用程序的性能问题,我需要知道一个实例。
我已经注意到内存中的“堆栈”、“堆”区域,我认为这是Java程序的模型。然而,事实证明,这是更多,而且更多。
例如,我遇到了这样的术语:伊甸园、s0、s1、旧内存等等。我以前从来不知道这些术语。
由于Java正在/一直在变化,所以这些术语在Java 8中是/不相关的。
有人能指导我们从哪里获得这些信息吗?在什么情况下我们需要了解这些信息?是主存的这一部分,即内存。
发布于 2020-03-02 17:42:50
Java语言规范与Java虚拟机规范定义的Java讨论了堆栈和堆(以及方法面积)。
在概念上,这些都是需要描述的东西,它们构成了Java虚拟机。
如果您想要实现JVM,就需要以某种方式实现这些功能。它们在Java 13中和它们回到Java 1中一样有效,它们的工作方式并没有从根本上改变。
你提到的其他术语(以及“旧一代”、“新一代”、.)是用于实现特定的垃圾收集机制的内存区域,特别是在Oracle / OpenJDK中实现的内存区域。
所有这些区域基本上都是堆的特定部分。堆被划分到这些区域的确切方式是由垃圾收集器来决定,并且了解它们不应该是必要的,除非您想要调整垃圾收集器。
由于垃圾收集器在发行版之间发生变化,而新的垃圾收集器方法是定期实现的(因为这是加快JVM的主要方法之一),所以这里使用的具体术语将随着时间的推移而改变。
发布于 2020-03-02 17:36:48
Eden、s0、s1、旧内存和其他内存区域仅存在于特定垃圾收集器实现的上下文中,例如,像G1这样的代回收器将堆划分为提到的区域,而像ZGC这样的非分代收集器则不会。
首先回顾JVM中的主要垃圾收集器:
然后试着理解相关的概念:
boolean不使用1位(字撕裂)我不相信有一个网站可以解释完整的JVM内存管理方法。
https://stackoverflow.com/questions/60493804
复制相似问题