All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.internal.memory.MemoryAllocator Maven / Gradle / Ivy

There is a newer version: 4.5.4
Show newest version
/*
 * Copyright (c) 2008-2018, Hazelcast, Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.hazelcast.internal.memory;

import com.hazelcast.memory.NativeOutOfMemoryError;
import com.hazelcast.nio.Disposable;

/**
 * Manages the usage of an address space by allocating and freeing blocks of addresses.
 */
public interface MemoryAllocator extends Disposable {

    /**
     * The special value that does not correspond to an actual address and signals the absence
     * of an address.
     */
    long NULL_ADDRESS = 0L;

    /**
     * Allocates a block of addresses with the requested size and returns the base address of the
     * block. The contents of the block will be initialized to the zero value.
     * 

* Guarantees that no subsequent call to {@code allocate()} will allocate a block which * overlaps the currently allocated block. The guarantee holds until the block is * {@link #free(long, long)}'d. * * @param size size of the block to allocate * @return the base address of the allocated block * @throws NativeOutOfMemoryError if there is not enough free memory to satisfy the reallocation request. */ long allocate(long size); /** * Accepts the base address and size of a previously allocated block and "reallocates" it by either: *

  1. * Resizing the existing block, if possible. The contents of the block remain unchanged up to the * lesser of the new and old sizes. *
  2. * Allocating a new block of {@code newSize}, copying the contents of the old block * into it (up to the new block's size), then freeing the old block. *
* The part of the new block which extends beyond the size of the current block (if any) will be * initialized to the zero value. * * @param address base address of the block * @param currentSize size of the block * @param newSize requested new block size * @return base address of the reallocated block * @throws NativeOutOfMemoryError if there is not enough free memory to satisfy the reallocation request. */ long reallocate(long address, long currentSize, long newSize); /** * Accepts the base address and size of a previously allocated block and sets it free. All the addresses * contained in the block are free to be allocated by future allocation/reallocation requests. * * @param address base address of the block * @param size size of the block */ void free(long address, long size); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy