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

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

应用程序创建的Java对象驻留在称为堆内存的内存中 。 堆是在JVM启动时创建的 , 根据应用程序的可用性 , 堆的使用率会增加并达到满堆 。 当堆使用率已满 , 并且进一步请求新对象分配时 , 当前堆内存中没有任何可用空间 , 则会发生垃圾收集 。 即在当不再使用的对象被删除后 , 该为新对象腾出空间的时候 。 想对java有更深入的了解 , 可以参加java培训 , 有助于进一步提升java知识和技能 。
在理解堆内存段之前 , 我们需要了解Java中分代垃圾收集的概念 。
在GC中 , 对堆内存中所有未引用的对象执行标记、扫描和压缩 。 随着越来越多的对象分配 , JVM堆中堆积了大量的对象分配 , 这就需要更长的时间来进行垃圾收集 。 然而 , 对应用程序的经验或假设分析表明 , 大多数对象都是短期的 。 因此 , 标记和压缩JVM堆内存中的所有对象既低效又耗时 。 因此 , GC实现了一个分代垃圾收集 , 它根据对象的年龄(寿命)对对象进行分类 。 通过这个过程 , 对象在不同的区域中分配 , 并相应地进行垃圾收集 。

堆内存主要分为两个区域:新生区(或苗圃)、旧空间
1.新生区(或苗圃)
无论何时创建新对象 , 都会将其分配给新生区 。 在java培训中 , 有很多关于堆内存的学习课程 , 不仅有理论知识 , 还有实践项目训练 , 让你深入浅出地掌握java语言 。 新生区基本上由两部分组成 。
A)Eden Space
所有新对象首先在EdenSpace中分配 。
B)Survivor Space
在一个GC循环之后 , 所有来自EdenSpace的活物体都被移动到SurvivorSpace 。 SurvivorSpace进一步分为两部分 , s1和s2空间 , 也称为FromSpace和ToSpace 。 当JVM启动时 , 两个SurvivorSpace总是空的 。
2.旧空间
当对象在具有多个GC周期的新生区长期存在时 , 它们将在SurvivorSpace中标记为“生存” 。 在完成GC周期的阈值后 , 他们将有资格晋升到旧空间 。 这些长寿命的物体被进一步移入旧空间 。 旧空间也被称为终身制的一代 。 此区域中的垃圾收集事件称为主要收集 。
完全GC执行所有代(新生区+旧空间)的清理 。 它执行从新生区到旧空间的所有活动对象的升级 , 以及旧空间的压缩 。 完全GC是停止世界暂停 , 这将确保没有分配新对象 , 并且在GC执行时对象不会突然变得不可访问 。
【京东|Java培训:什么是java中的堆内存?】堆内存是java的一种内存分配机制 , 作为一名java程序员 , 必须要搞懂Java的内存分配问题 , 这样在工作中就可以避免出现很多错误 。 参加java培训 , 可以帮你加深对java的了解 , 学到更多的技能 , 提升工作效率 。