多语言展示
当前在线:191今日阅读:26今日分享:39

什么是jvm垃圾回收?

垃圾收集是回收以前分配的内存的机制
工具/原料
1

IntelliJ IDEA

2

jdk1.8

方法/步骤
1

垃圾收集是回收以前分配的内存的机制, 以便将来的内存分配可以重用它。在大多数语言中, 垃圾收集是自动化的。你不需要自己释放内存。

2

在 java 中, 每当通常由new关键字构造新对象时, jvm 都会为该对象及其所持有的数据分配适当数量的内存。

3

当不再需要该对象时, jvm 需要回收该内存, 以便其他构造的对象可以使用它。

4

对于 c 和 c++ 等语言, 有必要手动管理这些内存分配, 通常是通过对 malloc 和free的函数调用。更现代的语言, 如 java 和 c#, 有一个自动系统, 需要付出努力, 也可以避免任何潜在的错误, 远离程序员。

5

存在几种不同的垃圾收集算法, 但它们都有相同的目标, 即查找已分配的内存, 这些内存不再被任何实时代码引用, 并将其返回到可用内存池, 以便将来进行分配。

6

java 中的传统垃圾收集算法称为标记扫描。运行代码中的每个对象引用都标记为活动, 该对象中的每个引用都被遍历, 并且也被标记为活动, 依此类推, 直到跟踪了来自活动对象的所有路由。

7

完成此操作后, 将访问堆中的每个对象, 并且未标记为活动的内存位置可用于分配。在此过程中, jvm 中的所有线程都将暂停, 以允许回收内存 (称为 '停止世界')。当然, 垃圾回收器会尝试将所需的时间降至最低。自 java 首次发布以来, 垃圾收集算法已经进行了几次迭代, 尽可能多的工作是并行完成的。

8

java 6 引入了一种新的算法, 称为 'Garbage First (g1)'。它被批准在 java 6 中测试使用, 在 java 7 中使用生产。g1 仍然专注于并行运行的标记扫描算法, 但它首先集中在主要是空内存的区域, 试图保持大量可用空间。

9

其他操作也会在垃圾收集过程中执行, 例如升级到不同的代, 以及通过在内存中移动对象来将频繁访问的对象组合在一起, 以尝试保留尽可能多的可用空间。这称为压缩。压缩发生在 jvm 处于停止世界阶段时, 因为活动对象有可能移动到不同的物理内存位置。

推荐信息