【问题标题】:Memory allocation and deallocation in RenderscriptRenderscript 中的内存分配和释放
【发布时间】:2017-03-26 02:03:59
【问题描述】:

很明显,在渲染脚本中分配内存可以使用分配类来完成。我不清楚这些内存将如何被释放或释放。

例如,如果我想创建一个包含 10 个元素的数组并使用分配类来实现。 Android 文档表明它就像在 C 中使用 malloc 一样简单。

如果有人可以帮助我了解如何在渲染脚本中释放内存,我将不胜感激。

【问题讨论】:

    标签: renderscript


    【解决方案1】:

    与其他 java 对象一样,当垃圾收集器确定对 Allocation 对象的引用不可访问时,当 GC 发生时,它可能会释放 Allocation 对象并调用本机端析构函数来释放内存。

    另外,用户可以调用 Allocation.destroy() 手动释放它:https://developer.android.com/reference/android/renderscript/Allocation.html#destroy()

    【讨论】:

    • 在文档上说 destroy() 暗示 setSurface(null)。那么如果我使用 Allocation 创建一个整数或浮点内存然后使用 destroy() 释放它,这是否适用?
    • setSurface 用于与相机或 UI 视图表面共享内存时。这意味着它会在销毁分配对象时减少对持有的表面对象的引用。分配的类型与此正交。如果您在没有 USAGE_IO 的情况下创建内存,那么只需调用 destroy 即可释放内存。由于带有 USAGE_IO 的分配不拥有后备内存,它可能只是共享它,它必须释放它对它的引用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 2011-05-13
    相关资源
    最近更新 更多