【问题标题】:When removing item from slice will the item remain in underlying array and consume memory从切片中删除项目时,该项目将保留在底层数组中并消耗内存
【发布时间】:2020-02-22 01:33:28
【问题描述】:

我正在制作结构的一部分(用户会话)

我只想管理当前用户会话

所以我在用户登录时添加了一个会话 并在用户注销时删除

我想知道这是否会消耗内存,如果所有已删除的会话都存在于底层数组中。

【问题讨论】:

  • 这取决于。请出示您的代码。
  • 如果你把它从切片的中间剪下来,例如,没有。运行时很可能会重新分配您的切片(及其底层数组)并复制这些值。从切片的末尾删除一些东西可以保留已经消耗内存的容量(底层数组的大小)。即使元素被释放了,go GC 在清扫之前也会标记,所以不会立即释放
  • 感谢 icza 提供链接

标签: go


【解决方案1】:

是的,底层数组将保留,因此从切片中删除的项目仍将存在于内存中。 处理它的最佳方法是将要删除的项目设置为“零值”,然后再将其从切片中删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    相关资源
    最近更新 更多