Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ByteBuffer.wrap(字节[])是否会导致长时间运行的应用程序内存泄漏?_Java_Memory Leaks - Fatal编程技术网

Java ByteBuffer.wrap(字节[])是否会导致长时间运行的应用程序内存泄漏?

Java ByteBuffer.wrap(字节[])是否会导致长时间运行的应用程序内存泄漏?,java,memory-leaks,Java,Memory Leaks,我试图在网上搜索,但没有找到答案 基于,ByteBuffer.wrap()在每次调用中创建一个新的ByteBuffer。在长时间运行的应用程序中,如果没有触发gc,但应用程序一直在调用ByteBuffer.wrap(),则应用程序可能会在java堆外使用更多内存,并导致潜在的内存泄漏。这是对的吗 public static ByteBuffer wrap(byte[] array) Wraps a byte array into a buffer. The new buffer will b

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

基于,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();
    }
}

只有在保留数组或包装ByteBuffers的硬引用时,这才是一个问题


“wrap”方法不像直接字节缓冲那样将内存分配到堆外。垃圾收集器应该能够在OutOfMemory错误发生之前将其清除。

请发布您的源代码,我不理解您的担忧。如果您创建的引用数量永久增长,那么您当然会耗尽内存。否则,如果引用在某个时候被丢弃,那么就不会有内存泄漏。我在使用ByteBuffer发送WebSocket消息时也遇到过这个问题。问题是,即使放弃引用,最终内存也会变满@俞阳:你找到解决办法了吗?@AndreiF我还没有找到解决办法。我提出了一个解决办法,每天重新启动进程,以减少内存泄漏的副作用。