2017-04-19 15 views
0

私は次のようにオフヒープメモリのいくつかの量を割り当てる必要がGC -pressure減少させるために:Javaでメモリの割り当てを解除するには?

long sz; 
//... 
long pointer = sun.misc.Unsafe.getUnsafe().allocateMemory(sz); 

をしかし、それはGCのために利用できないだから、私は手で、後でそれを解放する必要があります。どうやって?それは可能ですか?

+1

本物の問題について詳しく知ることなく、「sun.misc.Unsafe」を使用することは正しいことだと疑うことができます。sun.*のソースにいつでもアクセスできます。 – Axel

+0

@Axel我々の状況では、より良い方法を見つけることはできませんでした。 –

+2

Unsafe#allocateMemoryのjavadocで何が問題なのですか? –

答えて

1

あなたは本当に、そのjavadocを読めば、あなたはそこに得ることはありません。

/** 
* Allocates a new block of native memory, of the given size in bytes. The 
* contents of the memory are uninitialized; they will generally be 
* garbage. The resulting native pointer will never be zero, and will be 
* aligned for all value types. Dispose of this memory by calling {@link 
* #freeMemory}, or resize it with {@link #reallocateMemory}. 
* 
* @throws IllegalArgumentException if the size is negative or too large 
*   for the native size_t type 
* 
* @throws OutOfMemoryError if the allocation is refused by the system 
* 
* @see #getByte(long) 
* @see #putByte(long, byte) 
*/ 
public native long allocateMemory(long bytes); 

をですから、解放するunsafe.freeMemory(pointer)を必要とする、または再割り当てするunsafe.reallocateMemory(pointer)

関連する問題