Java培训:什么是java中的堆内存?

应用程序创建的Java对象驻留在称为堆内存的内存中。堆是在JVM启动时创建的,根据应用程序的可用性,堆的使用率会增加并达到满堆。当堆使用率已满,并且进一步请求新对象分配时,当前堆内存中没有任何可用空间,则会发生垃圾收集。即在当不再使用的对象被删除后,该为新对象腾出空间的时候。想对java有更深入的了解,可以参加java培训,有助于进一步提升java知识和技能。

在理解堆内存段之前,我们需要了解Java中分代垃圾收集的概念。

在GC中,对堆内存中所有未引用的对象执行标记、扫描和压缩。随着越来越多的对象分配,JVM堆中堆积了大量的对象分配,这就需要更长的时间来进行垃圾收集。然而,对应用程序的经验或假设分析表明,大多数对象都是短期的。因此,标记和压缩JVM堆内存中的所有对象既低效又耗时。因此,GC实现了一个分代垃圾收集,它根据对象的年龄(寿命)对对象进行分类。通过这个过程,对象在不同的区域中分配,并相应地进行垃圾收集。

堆内存主要分为两个区域:新生区(或苗圃)、旧空间

1.新生区(或苗圃)

无论何时创建新对象,都会将其分配给新生区。在java培训中,有很多关于堆内存的学习课程,不仅有理论知识,还有实践项目训练,让你深入浅出地掌握java语言。新生区基本上由两部分组成。

A) Eden Space

所有新对象首先在Eden Space中分配。

B) Survivor Space

在一个GC循环之后,所有来自Eden Space的活物体都被移动到Survivor Space。Survivor Space进一步分为两部分,s1和s2空间,也称为FromSpace和ToSpace。当JVM启动时,两个Survivor Space总是空的。

2.旧空间

当对象在具有多个GC周期的新生区长期存在时,它们将在Survivor Space中标记为“生存”。在完成GC周期的阈值后,他们将有资格晋升到旧空间。这些长寿命的物体被进一步移入旧空间。旧空间也被称为终身制的一代。此区域中的垃圾收集事件称为主要收集。

完全GC执行所有代(新生区+旧空间)的清理。它执行从新生区到旧空间的所有活动对象的升级,以及旧空间的压缩。完全GC是停止世界暂停,这将确保没有分配新对象,并且在GC执行时对象不会突然变得不可访问。

堆内存是java的一种内存分配机制,作为一名java 程序员,必须要搞懂Java的内存分配问题,这样在工作中就可以避免出现很多错误。参加java培训,可以帮你加深对java的了解,学到更多的技能,提升工作效率。

相关文章