缓存java框架技术预研4:LazyUnsafeAllocator.java算法分析

LazyUnsafeAllocator.java这个类,如名字就知道懒惰,就如同c里面的malloc和free一样,没有做任何内存管理。

我们可以跟踪下代码如下:

    @Override

    public MemoryBuffer allocate( int size )

    {

        if ( capacity < used.get() + size ) //做一下容量控制

        {

            throw new BufferOverflowException();

        }

 

        long baseAddress = unsafe.allocateMemory( size );//直接调用类似malloc的方式来获取内存

        UnsafeMemoryBuffer memoryBuffer = new UnsafeMemoryBuffer( baseAddresssize );//封装一下

        memoryBuffers.add( memoryBuffer );//保留句柄

        used.addAndGet( size );//保留使用大小

        return memoryBuffer;

    }

---下面是释放

    @Override

    public void free( MemoryBuffer memoryBuffer )

    {

        used.addAndGet( -memoryBuffer.capacity() );//重新更新使用量

        memoryBuffer.free();//释放

        memoryBuffers.remove( memoryBuffer );

    }

 那么        memoryBuffer.free();//释放是如何做的呢?

        @Override

        public void free()

        {

            unsafe.freeMemory( baseAddress );

        }

看到了,直接通过类似free的方式还给了操作系统。

所以说,还是很简单的!

但是在生产环境中,没有内存池还是不太好!


你可能感兴趣的:(DirectMemory)