php - 为什么内存使用统计中没有锯齿形状?
问题描述
最近我做了这样的实验——新对象不断地在一个不停止的循环中产生,没有保存它们的任何引用,所以它们应该在最近的合适时刻被垃圾收集器销毁。唯一特别的是对象在内存使用方面非常大 - 一个对象包含 7000 万个元素的数组。这是代码:
class Temp {
private $data;
function __construct() {
$this->data = range(1,70000000);
}
}
while (true) {
new Temp();
}
我很惊讶在内存使用图中没有任何典型的垃圾收集器行为。这是(数组中的 7000 万个元素):
问题是 -锯齿在哪里?
我最好的猜测是对象的分配和收集过程开始同时工作,或者其他事情正在发生。
编辑1:
当数组中的元素数量减少到 6000 万时 - 我得到了预期的锯齿 GC 行为(数组中的 6000 万个元素):
编辑2:
如果数组中的元素数量增加(数组中的 9000 万个元素) - 我会得到一个反向锯齿图!:
因此,7000 万个元素的测试似乎是这两种不同形状的锯齿之间的一个边缘案例。但我不清楚这背后的原因。
解决方案
推荐阅读
- php - If 语句不显示 else 结果
- typescript - 如何根据条件将可选属性设置为必需?
- node.js - 任何redis调用的ioredis发送命令的默认超时是多少
- c - 对于我的 C 代码,我正在读取一个文件并对其进行排序,这给了我垃圾输出。为什么?
- php - 如何在 PHP 中将未选中的框数据存储在数据库中?
- vba - VBA - 单击 ms-word 上的富文本字段时出现运行时错误
- excel - EXCEL单元格填写错误值时如何发出警报
- svg.js - 如何在 svg.js 3.0 中使用 foreignObject?
- r - 如何模拟变量变化的方程?
- prolog - 如何访问 PROLOG 中的规则数据