1
303
堆内存堆内存是运行时数据区域,Java VM从该区域开始为所有类实例和数组分配内存。堆的大小可以是固定的,也可以是可变的。垃圾收集器是一个自动内存管理系统,它为对象回收堆内存。
非堆内存非堆内存包括一个方法区域,在所有线程和内存之间共享,用于Java VM的内部处理或优化。它存储每个类结构,如运行时常量池、字段和方法数据,以及方法和构造函数的代码。方法区域在逻辑上是堆的一部分,但是,取决于实现,Java VM可能不会垃圾收集或压缩它。与堆内存一样,方法区域的大小可以是固定的,也可以是可变的。方法区域的内存不需要是连续的。
|
2
56
新关键字在Java堆上分配内存。堆是内存的主要池,可供整个应用程序访问。如果没有足够的内存分配给该对象,则JVM将尝试通过垃圾收集从堆中回收一些内存。如果仍然无法获得足够的内存,则抛出OutOfMemoryError,然后退出JVM。 堆被分成几个不同的部分,称为代。随着对象在更多垃圾收集中存活,它们被提升到不同的代。老一代并不像以前那样经常被垃圾收集。因为已经证明这些对象的寿命更长,所以它们不太可能被垃圾收集。 当对象第一次被构造时,它们被分配到伊甸园空间中。如果他们在垃圾收集中幸存下来,他们将被提升为幸存者空间,如果他们在那里活得足够长,他们将被分配给终身一代。这一代人的垃圾收集频率要低得多。 还有第四代,称为永久一代,或永久一代。驻留在这里的对象不符合被垃圾收集的条件,并且通常包含运行JVM所必需的不可变状态,例如类定义和字符串常量池。请注意,PrimGEN空间计划从Java 8中移除,并将被称为Meta SpACE的新空间替换,该新空间将保存在本机内存中。 参考文献 http://www.programcreek.com/2013/04/jvm-run-time-data-areas/
|
3
32
使用Java8,非堆区域不再包含PyMGEN但Meta SPACE,这是Java8中的一个主要变化,应该消除Java的内存不足,因为Meta空间大小可以根据JVM对类数据所需的空间而增加。 |
4
16
主内存 是操作系统分配给JVM的内存的一部分。 对象位于称为堆的区域中。堆是在JVM启动时创建的,并且在应用程序运行时可能会增大或减小大小。当堆满时,将收集垃圾。
你可以找到更多关于 伊甸园空间、幸存者空间、终身空间和永久世代 在下面的问题中: Young , Tenured and Perm generation 自从Java 8发布以来,PyMGEN已经被Meta SPACE取代了。 关于您的查询:
Codecache: Java虚拟机(JVM)生成本地代码并将其存储在称为CODECACHE的内存区域中。JVM出于多种原因生成本机代码,包括动态生成的解释器循环、Java本机接口(JNI)存根,以及JavaTimes(JIT)编译器将其编译成本机代码的Java方法。到目前为止,JIT是codecache的最大用户。 |
Community wiki · 如何调试Python内存故障? 1 年前 |
tuskiomi · 如何为参考提供明确的锈蚀寿命? 2 年前 |
cobb208 · Malloc正在为释放指针引发错误 2 年前 |
mo FEAR · C++ STL映射是否在创建后移动了一个值的位置? 2 年前 |
Pooyanoss · 覆盖类的堆栈分配实例 2 年前 |
TheKing · 为什么数组的地址可以有负值? 2 年前 |
Http2inc · 如何从内存中解析这些二进制数据? 2 年前 |
tifrel · 如何检查已编译类型的表示形式? 2 年前 |
Gabriele · 释放GSL矩阵的正确方法是什么? 6 年前 |
Makogan · 3D纹理大小影响程序输出,不会引发错误 6 年前 |