gpt4 book ai didi

java - ByteBuffer.wrap(byte[]) 会导致长时间运行的应用程序内存泄漏吗?

转载 作者:行者123 更新时间:2023-11-30 08:09:42 27 4
gpt4 key购买 nike

我试图在网上搜索,但没有找到答案。

基于java doc , ByteBuffer.wrap() 在每次调用中创建一个新的 ByteBuffer。在一个长时间运行的应用程序中,如果 gc 没有被触发,但应用程序一直在调用 ByteBuffer.wrap(),应用程序可能会使用更多的 java 堆之外的内存,并导致潜在的内存泄漏。是对的吗?

public static ByteBuffer wrap(byte[] array)

Wraps a byte array into a buffer.

The new buffer will be backed by the given byte array; that is, modifications
to the buffer will cause the array to be modified and vice versa. The new
buffer's capacity and limit will be array.length, its position will be zero,
and its mark will be undefined. Its backing array will be the given array, and
its array offset will be zero.

根据jdk代码,似乎答案是否定的,因为ByteBuffer.wrap()创建了一个新的HeapByteBuffer对象,但并没有在下面分配一个新的缓冲区。

public static ByteBuffer wrap(byte[] array,
int offset, int length)
{
try {
return new HeapByteBuffer(array, offset, length);
} catch (IllegalArgumentException x) {
throw new IndexOutOfBoundsException();
}
}

最佳答案

只有在保留数组或包装字节缓冲区的硬引用时才会出现问题。

“wrap”方法不像直接的 ByteBuffer 那样在堆外分配内存。垃圾收集器应该能够在发生 OutOfMemory 错误之前将其清理干净。

关于java - ByteBuffer.wrap(byte[]) 会导致长时间运行的应用程序内存泄漏吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235309/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com