You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directmemory.apache.org by no...@apache.org on 2012/10/25 21:50:22 UTC
svn commit: r1402302 - in /directmemory/trunk/directmemory-cache/src:
main/java/org/apache/directmemory/memory/
main/java/org/apache/directmemory/memory/allocator/
test/java/org/apache/directmemory/memory/
test/java/org/apache/directmemory/preliminary/
Author: noctarius
Date: Thu Oct 25 19:50:21 2012
New Revision: 1402302
URL: http://svn.apache.org/viewvc?rev=1402302&view=rev
Log:
Fixed all unittest bugs appeared in the Unsafe implementation and some wrongly assumed behaviours in the MemoryBuffer nio and unsafe implementations
Added:
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/IllegalMemoryPointerException.java
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/LazyUnsafeAllocatorImpl.java
- copied, changed from r1402299, directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java
Modified:
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractMemoryManager.java
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerService.java
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java
directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseUnsafeTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/DefaultMemoryManagerServiceTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MallocWithUnsafeTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplTest.java
directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/preliminary/MicroBenchmark.java
Modified: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractMemoryManager.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractMemoryManager.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractMemoryManager.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/AbstractMemoryManager.java Thu Oct 25 19:50:21 2012
@@ -16,15 +16,18 @@ public abstract class AbstractMemoryMana
{
protected static final long NEVER_EXPIRES = 0L;
+
protected final Set<Pointer<V>> pointers = Collections.newSetFromMap( new ConcurrentHashMap<Pointer<V>, Boolean>() );
+
protected boolean returnNullWhenFull = true;
+
protected final AtomicLong used = new AtomicLong( 0L );
public AbstractMemoryManager()
{
super();
}
-
+
abstract public Pointer<V> store( byte[] payload, long expiresIn );
public Pointer<V> store( byte[] payload )
@@ -45,15 +48,14 @@ public abstract class AbstractMemoryMana
return used.get();
}
-
public long collectExpired()
{
int limit = 50;
- return free( limit( filter( pointers, relative ), limit ) ) + free(
- limit( filter( pointers, absolute ), limit ) );
-
+ return free( limit( filter( pointers, relative ), limit ) )
+ + free( limit( filter( pointers, absolute ), limit ) );
+
}
-
+
final Predicate<Pointer<V>> relative = new Predicate<Pointer<V>>()
{
@@ -78,33 +80,34 @@ public abstract class AbstractMemoryMana
public void collectLFU()
{
-
+
int limit = pointers.size() / 10;
-
+
Iterable<Pointer<V>> result = from( new Comparator<Pointer<V>>()
{
-
+
+ @Override
public int compare( Pointer<V> o1, Pointer<V> o2 )
{
float f1 = o1.getFrequency();
float f2 = o2.getFrequency();
-
+
return Float.compare( f1, f2 );
}
-
+
} ).sortedCopy( limit( filter( pointers, new Predicate<Pointer<V>>()
{
-
+
@Override
public boolean apply( Pointer<V> input )
{
return !input.isFree();
}
-
+
} ), limit ) );
-
+
free( result );
-
+
}
protected long free( Iterable<Pointer<V>> pointers )
@@ -127,14 +130,17 @@ public abstract class AbstractMemoryMana
{
return Collections.unmodifiableSet( pointers );
}
-
+
public <T extends V> Pointer<V> allocate( final Class<T> type, final int size, final long expiresIn,
final long expires )
{
- Pointer<V> p = store(new byte[size], expiresIn );
+ Pointer<V> p = store( new byte[size], expiresIn );
+ if ( p != null && p.getMemoryBuffer() != null )
+ p.getMemoryBuffer().clear();
- if (p != null) p.setClazz( type );
+ if ( p != null )
+ p.setClazz( type );
return p;
}
Added: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/IllegalMemoryPointerException.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/IllegalMemoryPointerException.java?rev=1402302&view=auto
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/IllegalMemoryPointerException.java (added)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/IllegalMemoryPointerException.java Thu Oct 25 19:50:21 2012
@@ -0,0 +1,29 @@
+package org.apache.directmemory.memory;
+
+public class IllegalMemoryPointerException
+ extends RuntimeException
+{
+
+ private static final long serialVersionUID = -273700198424032755L;
+
+ public IllegalMemoryPointerException()
+ {
+ super();
+ }
+
+ public IllegalMemoryPointerException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public IllegalMemoryPointerException( String message )
+ {
+ super( message );
+ }
+
+ public IllegalMemoryPointerException( Throwable cause )
+ {
+ super( cause );
+ }
+
+}
Modified: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerService.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerService.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerService.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerService.java Thu Oct 25 19:50:21 2012
@@ -1,5 +1,6 @@
package org.apache.directmemory.memory;
+import java.io.Closeable;
import java.util.Set;
/*
@@ -22,22 +23,21 @@ import java.util.Set;
*/
public interface MemoryManagerService<V>
+ extends Closeable
{
/**
- * Initialize the internal structure. Need to be called before the service
- * can be used.
- *
- * @param numberOfBuffers
- * : number of internal bucket
- * @param size
- * : size in B of internal buckets
+ * Initialize the internal structure. Need to be called before the service can be used.
+ *
+ * @param numberOfBuffers : number of internal bucket
+ * @param size : size in B of internal buckets
*/
void init( int numberOfBuffers, int size );
/**
- * Store function family. Store the given payload at a certain offset in a MemoryBuffer, returning the pointer to the value.
- *
+ * Store function family. Store the given payload at a certain offset in a MemoryBuffer, returning the pointer to
+ * the value.
+ *
* @param payload : the data to store
* @return the pointer to the value, or null if not enough space has been found.
*/
@@ -45,7 +45,7 @@ public interface MemoryManagerService<V>
/**
* Same function as {@link #store(byte[])}, but add an relative expiration delta in milliseconds
- *
+ *
* @param payload : the data to store
* @param expiresIn : relative amount of milliseconds the data will expire
* @return the pointer to the value, or null if not enough space has been found.
@@ -54,13 +54,14 @@ public interface MemoryManagerService<V>
/**
* Same function as {@link #store(byte[])}, but add an absolute expiration date
+ *
* @param payload : the data to store
* @param expires : the absolute date the data will expire
* @return the pointer to the value, or null if not enough space has been found.
*/
- //public Pointer store(byte[] payload, Date expires);
+ // public Pointer store(byte[] payload, Date expires);
- /**
+/**
*
*
* Update value of a {@link Pointer
Modified: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/MemoryManagerServiceImpl.java Thu Oct 25 19:50:21 2012
@@ -21,8 +21,10 @@ package org.apache.directmemory.memory;
import static java.lang.String.format;
+import java.io.IOException;
import java.nio.BufferOverflowException;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
import org.apache.directmemory.measures.Ram;
@@ -76,6 +78,20 @@ public class MemoryManagerServiceImpl<V>
logger.info( format( "MemoryManager initialized - %d buffers, %s each", numberOfBuffers, Ram.inMb( size ) ) );
}
+ @Override
+ public void close()
+ throws IOException
+ {
+ Iterator<Allocator> iterator = allocators.iterator();
+ while ( iterator.hasNext() )
+ {
+ Allocator allocator = iterator.next();
+ allocator.close();
+ iterator.remove();
+ }
+ used.set( 0 );
+ }
+
protected Allocator instanciateByteBufferAllocator( final int allocatorNumber, final int size )
{
final MergingByteBufferAllocatorImpl allocator = new MergingByteBufferAllocatorImpl( allocatorNumber, size );
Modified: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/UnsafeMemoryManagerServiceImpl.java Thu Oct 25 19:50:21 2012
@@ -1,5 +1,6 @@
package org.apache.directmemory.memory;
+import java.io.IOException;
import java.nio.BufferOverflowException;
import java.util.Collections;
import java.util.Iterator;
@@ -7,7 +8,8 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.directmemory.memory.allocator.Allocator;
-import org.apache.directmemory.memory.allocator.FixedSizeUnsafeAllocatorImpl;
+import org.apache.directmemory.memory.allocator.LazyUnsafeAllocatorImpl;
+import org.apache.directmemory.memory.buffer.MemoryBuffer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,8 +26,6 @@ public class UnsafeMemoryManagerServiceI
private Allocator allocator;
- // protected final AtomicLong used = new AtomicLong( 0L );
-
private long capacity;
private int size;
@@ -35,10 +35,18 @@ public class UnsafeMemoryManagerServiceI
{
this.capacity = numberOfBuffers * size;
this.size = size;
- this.allocator = new FixedSizeUnsafeAllocatorImpl( numberOfBuffers, size );
+ this.allocator = new LazyUnsafeAllocatorImpl( numberOfBuffers, capacity );
+ }
+
+ @Override
+ public void close()
+ throws IOException
+ {
+ allocator.close();
+ used.set( 0 );
}
- protected Pointer<V> instanciatePointer( final long expiresIn, final long expires )
+ protected Pointer<V> instanciatePointer( int size, long expiresIn, long expires )
{
Pointer<V> p = new PointerImpl<V>( allocator.allocate( size ) );
@@ -66,7 +74,7 @@ public class UnsafeMemoryManagerServiceI
}
}
- Pointer<V> p = instanciatePointer( expiresIn, NEVER_EXPIRES );
+ Pointer<V> p = instanciatePointer( payload.length, expiresIn, NEVER_EXPIRES );
p.getMemoryBuffer().writeBytes( payload );
used.addAndGet( payload.length );
@@ -93,7 +101,9 @@ public class UnsafeMemoryManagerServiceI
{
final byte[] swp = new byte[(int) pointer.getSize()];
- pointer.getMemoryBuffer().readBytes( swp );
+ MemoryBuffer memoryBuffer = pointer.getMemoryBuffer();
+ memoryBuffer.readerIndex( 0 );
+ memoryBuffer.readBytes( swp );
return swp;
}
@@ -101,9 +111,9 @@ public class UnsafeMemoryManagerServiceI
@Override
public Pointer<V> free( Pointer<V> pointer )
{
+ used.addAndGet( -pointer.getSize() );
allocator.free( pointer.getMemoryBuffer() );
pointers.remove( pointer );
- used.set( used.get() - ( pointer.getSize() ) );
pointer.setFree( true );
return pointer;
}
Modified: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java Thu Oct 25 19:50:21 2012
@@ -7,6 +7,7 @@ import java.util.Iterator;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue;
+import org.apache.directmemory.memory.IllegalMemoryPointerException;
import org.apache.directmemory.memory.buffer.AbstractMemoryBuffer;
import org.apache.directmemory.memory.buffer.MemoryBuffer;
@@ -131,6 +132,11 @@ public class FixedSizeUnsafeAllocatorImp
private UnsafeMemoryBuffer( long baseAddress, long capacity )
{
+ if ( baseAddress == 0 )
+ {
+ throw new IllegalMemoryPointerException( "The pointers base address is not legal" );
+ }
+
this.baseAddress = baseAddress;
this.capacity = capacity;
}
@@ -138,7 +144,7 @@ public class FixedSizeUnsafeAllocatorImp
@Override
public long capacity()
{
- return capacity;
+ return writerIndex();
}
@Override
@@ -183,14 +189,12 @@ public class FixedSizeUnsafeAllocatorImp
protected void writeByte( long offset, byte value )
{
unsafe.putByte( baseAddress + offset, value );
- writerIndex++;
}
@Override
protected byte readByte( long offset )
{
byte value = unsafe.getByte( baseAddress + offset );
- readerIndex++;
return value;
}
Copied: directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/LazyUnsafeAllocatorImpl.java (from r1402299, directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java)
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/LazyUnsafeAllocatorImpl.java?p2=directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/LazyUnsafeAllocatorImpl.java&p1=directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java&r1=1402299&r2=1402302&rev=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/FixedSizeUnsafeAllocatorImpl.java (original)
+++ directmemory/trunk/directmemory-cache/src/main/java/org/apache/directmemory/memory/allocator/LazyUnsafeAllocatorImpl.java Thu Oct 25 19:50:21 2012
@@ -3,46 +3,45 @@ package org.apache.directmemory.memory.a
import java.io.IOException;
import java.nio.BufferOverflowException;
import java.nio.ByteOrder;
+import java.util.Collections;
import java.util.Iterator;
-import java.util.Queue;
-import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.directmemory.memory.IllegalMemoryPointerException;
import org.apache.directmemory.memory.buffer.AbstractMemoryBuffer;
import org.apache.directmemory.memory.buffer.MemoryBuffer;
-public class FixedSizeUnsafeAllocatorImpl
+public class LazyUnsafeAllocatorImpl
implements Allocator
{
private final sun.misc.Unsafe unsafe = UnsafeUtils.getUnsafe();
- private final Queue<UnsafeMemoryBuffer> memoryBuffers = new ConcurrentLinkedQueue<UnsafeMemoryBuffer>();
+ private final Set<UnsafeMemoryBuffer> memoryBuffers =
+ Collections.newSetFromMap( new ConcurrentHashMap<UnsafeMemoryBuffer, Boolean>() );
+
+ private final AtomicLong used = new AtomicLong( 0 );
private final int number;
- private final int size;
+ private final long capacity;
// Tells if it returns null or throw an BufferOverflowException when the requested size is bigger than the size of
// the slices
private final boolean returnNullWhenOversizingSliceSize = true;
- public FixedSizeUnsafeAllocatorImpl( int number, int size )
+ public LazyUnsafeAllocatorImpl( int number, long capacity )
{
this.number = number;
- this.size = size;
+ this.capacity = capacity;
if ( unsafe == null )
{
throw new IllegalStateException( "This JVM has no sun.misc.Unsafe support, "
+ "please choose another MemoryManager implementation" );
}
-
- for ( int i = 0; i < number; i++ )
- {
- long baseAddress = unsafe.allocateMemory( size );
- UnsafeMemoryBuffer memoryBuffer = new UnsafeMemoryBuffer( baseAddress, size );
- memoryBuffers.add( memoryBuffer );
- }
}
@Override
@@ -62,14 +61,24 @@ public class FixedSizeUnsafeAllocatorImp
@Override
public void free( MemoryBuffer memoryBuffer )
{
- memoryBuffer.clear();
- memoryBuffers.offer( (UnsafeMemoryBuffer) memoryBuffer );
+ used.addAndGet( -memoryBuffer.capacity() );
+ memoryBuffer.free();
+ memoryBuffers.remove( memoryBuffer );
}
@Override
public MemoryBuffer allocate( int size )
{
- return findFreeBuffer( size );
+ if ( capacity < used.get() + size )
+ {
+ throw new BufferOverflowException();
+ }
+
+ long baseAddress = unsafe.allocateMemory( size );
+ UnsafeMemoryBuffer memoryBuffer = new UnsafeMemoryBuffer( baseAddress, size );
+ memoryBuffers.add( memoryBuffer );
+ used.addAndGet( size );
+ return memoryBuffer;
}
@Override
@@ -101,24 +110,6 @@ public class FixedSizeUnsafeAllocatorImp
return number;
}
- protected MemoryBuffer findFreeBuffer( int capacity )
- {
- // ensure the requested size is not bigger than the slices' size
- if ( capacity > size )
- {
- if ( returnNullWhenOversizingSliceSize )
- {
- return null;
- }
- else
- {
- throw new BufferOverflowException();
- }
- }
- // TODO : Add capacity to wait till a given timeout for a freed buffer
- return memoryBuffers.poll();
- }
-
private class UnsafeMemoryBuffer
extends AbstractMemoryBuffer
{
@@ -131,6 +122,11 @@ public class FixedSizeUnsafeAllocatorImp
private UnsafeMemoryBuffer( long baseAddress, long capacity )
{
+ if ( capacity > 0 && baseAddress == 0 )
+ {
+ throw new IllegalMemoryPointerException( "The pointers base address is not legal" );
+ }
+
this.baseAddress = baseAddress;
this.capacity = capacity;
}
@@ -183,14 +179,12 @@ public class FixedSizeUnsafeAllocatorImp
protected void writeByte( long offset, byte value )
{
unsafe.putByte( baseAddress + offset, value );
- writerIndex++;
}
@Override
protected byte readByte( long offset )
{
byte value = unsafe.getByte( baseAddress + offset );
- readerIndex++;
return value;
}
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/AbstractMemoryManagerServiceTest.java Thu Oct 25 19:50:21 2012
@@ -19,7 +19,7 @@ package org.apache.directmemory.memory;
* under the License.
*/
-import java.nio.ByteBuffer;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@@ -27,6 +27,7 @@ import java.util.Random;
import junit.framework.Assert;
import org.apache.directmemory.memory.buffer.MemoryBuffer;
+import org.junit.After;
import org.junit.Test;
public abstract class AbstractMemoryManagerServiceTest
@@ -35,28 +36,36 @@ public abstract class AbstractMemoryMana
protected static final Random R = new Random();
protected static final int SMALL_PAYLOAD_LENGTH = 4;
+
protected static final byte[] SMALL_PAYLOAD = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH );
+ protected MemoryManagerService<Object> mms;
- protected MemoryManagerService<Object> mms;
-
protected abstract MemoryManagerService<Object> instanciateMemoryManagerService( int bufferSize );
+ @After
+ public void cleanup()
+ throws IOException
+ {
+ if ( mms != null )
+ mms.close();
+ }
/**
- * Test pointers allocation, when buffer size is not aligned with the size of stored objects.
- * Null {@link Pointer} should be returned to allow {@link MemoryManagerService} to go to next step with allocation policy.
+ * Test pointers allocation, when buffer size is not aligned with the size of stored objects. Null {@link Pointer}
+ * should be returned to allow {@link MemoryManagerService} to go to next step with allocation policy.
*/
@Test
public void testNotEnoughFreeSpace()
{
- // Storing a first payload of 4 bytes, 1 byte remaining in the buffer. When storing a second 4 bytes payload, an null pointer should be returned.
+ // Storing a first payload of 4 bytes, 1 byte remaining in the buffer. When storing a second 4 bytes payload, an
+ // null pointer should be returned.
final int BUFFER_SIZE = SMALL_PAYLOAD_LENGTH + 1;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
Pointer<Object> pointer1 = mms.store( SMALL_PAYLOAD );
Assert.assertNotNull( pointer1 );
Assert.assertFalse( pointer1.isFree() );
@@ -66,7 +75,6 @@ public abstract class AbstractMemoryMana
}
-
/**
* Ensure no byte is leaking when allocating several objects.
*/
@@ -80,7 +88,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
for ( int i = 0; i < NUMBER_OF_OBJECTS; i++ )
{
Pointer<Object> pointer = mms.store( SMALL_PAYLOAD );
@@ -104,7 +112,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
Pointer<Object> lastPointer = null;
for ( int i = 0; i < NUMBER_OF_OBJECTS; i++ )
{
@@ -128,7 +136,8 @@ public abstract class AbstractMemoryMana
}
/**
- * Completely fill the buffer, free some pointer, reallocated the freed space, clear the buffer. The entire space should be
+ * Completely fill the buffer, free some pointer, reallocated the freed space, clear the buffer. The entire space
+ * should be
*/
@Test
public void testFullFillAndFreeAndClearBuffer()
@@ -138,7 +147,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
Pointer<Object> pointerFull = mms.store( MemoryTestUtils.generateRandomPayload( BUFFER_SIZE ) );
Assert.assertNotNull( pointerFull );
mms.free( pointerFull );
@@ -219,7 +228,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
for ( int i = 0; i < NUMBER_OF_OBJECTS; i++ )
{
byte[] payload = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH );
@@ -259,7 +268,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
List<Pointer<Object>> pointers = new ArrayList<Pointer<Object>>( NUMBER_OF_OBJECTS );
for ( int i = 0; i < NUMBER_OF_OBJECTS; i++ )
{
@@ -305,8 +314,8 @@ public abstract class AbstractMemoryMana
Pointer<Object> pointer3 = mms.allocate( Object.class, NUMBER_OF_OBJECTS / 4 * SMALL_PAYLOAD_LENGTH, 0, 0 );
Assert.assertNotNull( pointer3 );
- if (pointer3.getMemoryBuffer() != null)
- { // it makes no sense for Unsafe
+ if ( pointer3.getMemoryBuffer() != null )
+ { // it makes no sense for Unsafe
byte[] payload3 = MemoryTestUtils.generateRandomPayload( NUMBER_OF_OBJECTS / 4 * SMALL_PAYLOAD_LENGTH );
pointer3.getMemoryBuffer().writeBytes( payload3 );
byte[] retrievePayload3 = mms.retrieve( pointer3 );
@@ -322,7 +331,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
final byte[] payload = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH );
final Pointer<Object> pointer = mms.store( payload );
@@ -332,22 +341,20 @@ public abstract class AbstractMemoryMana
final byte[] otherPayload = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH );
final Pointer<Object> otherPointer = mms.update( pointer, otherPayload );
Assert.assertNotNull( otherPointer );
-// Assert.assertEquals( pointer.getStart(), otherPointer.getStart() );
+ // Assert.assertEquals( pointer.getStart(), otherPointer.getStart() );
Assert.assertEquals( pointer.getSize(), otherPointer.getSize() );
Assert.assertEquals( new String( otherPayload ), new String( mms.retrieve( otherPointer ) ) );
final byte[] evenAnotherPayload = MemoryTestUtils.generateRandomPayload( SMALL_PAYLOAD_LENGTH / 2 );
final Pointer<Object> evenAnotherPointer = mms.update( otherPointer, evenAnotherPayload );
Assert.assertNotNull( evenAnotherPointer );
-// Assert.assertEquals( pointer.getStart(), evenAnotherPointer.getStart() );
+ // Assert.assertEquals( pointer.getStart(), evenAnotherPointer.getStart() );
Assert.assertEquals( pointer.getSize() / 2, evenAnotherPointer.getSize() );
- //Assert.assertEquals( 2, new String( mms.retrieve( evenAnotherPointer ) ).length() );
- Assert.assertTrue( new String( mms.retrieve( evenAnotherPointer ) )
- .startsWith( new String( evenAnotherPayload ) ) );
+ // Assert.assertEquals( 2, new String( mms.retrieve( evenAnotherPointer ) ).length() );
+ Assert.assertTrue( new String( mms.retrieve( evenAnotherPointer ) ).startsWith( new String( evenAnotherPayload ) ) );
}
-
@Test
public void testAllocate()
{
@@ -356,7 +363,7 @@ public abstract class AbstractMemoryMana
final int BUFFER_SIZE = NUMBER_OF_OBJECTS * SMALL_PAYLOAD_LENGTH;
mms = instanciateMemoryManagerService( BUFFER_SIZE );
-
+
final byte[] payload1 = MemoryTestUtils.generateRandomPayload( 8 * SMALL_PAYLOAD_LENGTH );
final Pointer<Object> pointer1 = mms.store( payload1 );
Assert.assertNotNull( pointer1 );
@@ -396,7 +403,6 @@ public abstract class AbstractMemoryMana
buffer2.writeBytes( allocatedPayload2 );
Assert.assertEquals( new String( allocatedPayload2 ), new String( mms.retrieve( allocatedPointer2 ) ) );
-
// Ensure the new allocation has not overwritten other data
Assert.assertEquals( new String( payload2 ), new String( mms.retrieve( pointer2 ) ) );
Assert.assertEquals( new String( payload3 ), new String( mms.retrieve( pointer3 ) ) );
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseTest.java Thu Oct 25 19:50:21 2012
@@ -62,7 +62,7 @@ public class BaseTest
Random rnd = new Random();
- int size = rnd.nextInt( 10 ) * (int) mem.capacity() / 100;
+ int size = 0;// rnd.nextInt( 10 ) * (int) mem.capacity() / 100;
logger.info( "size=" + size );
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseUnsafeTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseUnsafeTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseUnsafeTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/BaseUnsafeTest.java Thu Oct 25 19:50:21 2012
@@ -31,7 +31,6 @@ import org.apache.directmemory.measures.
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,18 +38,19 @@ import org.slf4j.LoggerFactory;
import com.carrotsearch.junitbenchmarks.AbstractBenchmark;
import com.google.common.collect.Maps;
-@Ignore
-public class BaseUnsafeTest extends AbstractBenchmark
+public class BaseUnsafeTest
+ extends AbstractBenchmark
{
-
+
MemoryManagerService<Object> mem;
-
+
@Before
public void initMMS()
{
mem = new UnsafeMemoryManagerServiceImpl<Object>();
mem.init( 1, 1 * 1024 * 1024 );
}
+
@Test
public void smokeTest()
{
@@ -59,7 +59,7 @@ public class BaseUnsafeTest extends Abst
Random rnd = new Random();
- int size = rnd.nextInt( 10 ) * (int)mem.capacity() / 100;
+ int size = rnd.nextInt( 10 ) * (int) mem.capacity() / 100;
logger.info( "size=" + size );
@@ -71,7 +71,6 @@ public class BaseUnsafeTest extends Abst
assertEquals( 0, mem.used() );
}
-
private static Logger logger = LoggerFactory.getLogger( MallocTest.class );
final static Map<String, Byte> test = Maps.newHashMap();
@@ -91,8 +90,8 @@ public class BaseUnsafeTest extends Abst
@AfterClass
public static void setup()
{
-// logger.info("off-heap allocated: " + Ram.inMb(mem.capacity()));
-// logger.info("off-heap used: " + Ram.inMb(mem.used()));
+ // logger.info("off-heap allocated: " + Ram.inMb(mem.capacity()));
+ // logger.info("off-heap used: " + Ram.inMb(mem.used()));
logger.info( "test - size: " + test.size() );
logger.info( "test - errors: " + errors );
logger.info( "heap - max: " + Ram.inMb( Runtime.getRuntime().maxMemory() ) );
@@ -101,17 +100,15 @@ public class BaseUnsafeTest extends Abst
logger.info( "************************************************" );
}
-
-
@Test
public void aFewEntriesWithRead()
{
-// logger.info( "total capacity=" + Ram.inMb( mem.capacity() ) );
+ // logger.info( "total capacity=" + Ram.inMb( mem.capacity() ) );
assertNotNull( mem );
int howMany = 100000;
-// logger.info( "payload size is variable" );
-// logger.info( "entries=" + howMany );
-// String test = "this is a nicely crafted test";
+ // logger.info( "payload size is variable" );
+ // logger.info( "entries=" + howMany );
+ // String test = "this is a nicely crafted test";
for ( int i = 0; i < howMany; i++ )
{
final byte[] payload = ( test + " - " + i ).getBytes();
@@ -124,7 +121,7 @@ public class BaseUnsafeTest extends Abst
assertEquals( crc1, crc2 );
}
-// logger.info( "total used=" + Ram.inMb( mem.used() ) );
+ // logger.info( "total used=" + Ram.inMb( mem.used() ) );
}
private static long crc32( byte[] payload )
@@ -137,24 +134,24 @@ public class BaseUnsafeTest extends Abst
@Test
public void aFewEntriesWithCheck()
{
-// logger.info( "total capacity=" + Ram.inMb( mem.capacity() ) );
+ // logger.info( "total capacity=" + Ram.inMb( mem.capacity() ) );
assertNotNull( mem );
int howMany = 10;
-// logger.info( "payload size is variable" );
-// logger.info( "entries=" + howMany );
-// String test = "this is a nicely crafted test";
-// Pointer<Object> lastP = null;
+ // logger.info( "payload size is variable" );
+ // logger.info( "entries=" + howMany );
+ // String test = "this is a nicely crafted test";
+ // Pointer<Object> lastP = null;
for ( int i = 0; i < howMany; i++ )
{
byte[] payload = ( test + " - " + i ).getBytes();
Pointer<Object> p = mem.store( payload );
-// logger.info( "p.start=" + p.getStart() );
-// logger.info( "p.end=" + p.getEnd() );
+ // logger.info( "p.start=" + p.getStart() );
+ // logger.info( "p.end=" + p.getEnd() );
assertEquals( p.getCapacity(), payload.length );
-// lastP = p;
-// logger.info( "---" );
+ // lastP = p;
+ // logger.info( "---" );
}
-// logger.info( "total used=" + Ram.inMb( mem.used() ) );
+ // logger.info( "total used=" + Ram.inMb( mem.used() ) );
}
}
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/DefaultMemoryManagerServiceTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/DefaultMemoryManagerServiceTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/DefaultMemoryManagerServiceTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/DefaultMemoryManagerServiceTest.java Thu Oct 25 19:50:21 2012
@@ -26,28 +26,38 @@ import org.junit.runners.Parameterized.P
* under the License.
*/
-@RunWith(Parameterized.class)
+@RunWith( Parameterized.class )
public class DefaultMemoryManagerServiceTest
extends AbstractMemoryManagerServiceTest
{
@Parameters
- public static Collection<Object[]> data() {
- return Arrays.asList( new Object[][] {{new MemoryManagerServiceImpl<Object>()},{new UnsafeMemoryManagerServiceImpl<Object>()}} );
+ public static Collection<Object[]> data()
+ {
+ return Arrays.asList( new Object[][] { { MemoryManagerServiceImpl.class },
+ { UnsafeMemoryManagerServiceImpl.class } } );
}
-
- private final MemoryManagerService<Object> memoryManagerService;
-
- public DefaultMemoryManagerServiceTest(MemoryManagerService<Object> memoryManagerService) {
- this.memoryManagerService = memoryManagerService;
+
+ private final Class<? extends MemoryManagerService<Object>> memoryManagerServiceClass;
+
+ public DefaultMemoryManagerServiceTest( Class<? extends MemoryManagerService<Object>> memoryManagerServiceClass )
+ {
+ this.memoryManagerServiceClass = memoryManagerServiceClass;
}
-
+
@Override
protected MemoryManagerService<Object> instanciateMemoryManagerService( int bufferSize )
{
- final MemoryManagerService<Object> mms = memoryManagerService;
- mms.init( 1, bufferSize );
- return mms;
+ try
+ {
+ final MemoryManagerService<Object> mms = memoryManagerServiceClass.newInstance();
+ mms.init( 1, bufferSize );
+ return mms;
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
}
}
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MallocWithUnsafeTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MallocWithUnsafeTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MallocWithUnsafeTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MallocWithUnsafeTest.java Thu Oct 25 19:50:21 2012
@@ -28,14 +28,12 @@ import java.util.concurrent.ConcurrentMa
import org.apache.directmemory.measures.Ram;
import org.junit.After;
import org.junit.Before;
-import org.junit.Ignore;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.collect.MapMaker;
-@Ignore
public class MallocWithUnsafeTest
{
@@ -55,7 +53,7 @@ public class MallocWithUnsafeTest
}
MemoryManagerService<Object> mem;
-
+
@Before
public void initMMS()
{
@@ -68,7 +66,7 @@ public class MallocWithUnsafeTest
{
assertNotNull( mem );
int howMany = 1000000;
- int size = (int)mem.capacity() / ( howMany );
+ int size = (int) mem.capacity() / ( howMany );
size -= size / 100 * 1;
logger.info( "payload size=" + size );
logger.info( "entries=" + howMany );
@@ -92,7 +90,7 @@ public class MallocWithUnsafeTest
assertNotNull( mem );
int howMany = 2000000;
- int size = (int)mem.capacity() / ( howMany );
+ int size = (int) mem.capacity() / ( howMany );
size -= size / 100 * 1;
logger.info( "payload size=" + size );
logger.info( "entries=" + howMany );
@@ -115,7 +113,7 @@ public class MallocWithUnsafeTest
assertNotNull( mem );
int howMany = 5000000;
- int size = (int)mem.capacity() / ( howMany );
+ int size = (int) mem.capacity() / ( howMany );
size -= size / 100 * 1;
logger.info( "payload size=" + size );
logger.info( "entries=" + howMany );
@@ -132,12 +130,12 @@ public class MallocWithUnsafeTest
logger.info( "...done in " + ( System.currentTimeMillis() - start ) + " msecs." );
}
-
@Test
public void withMap()
{
- ConcurrentMap<Long, Pointer<Object>> map = new MapMaker().concurrencyLevel( 4 ).initialCapacity( 500000 ).makeMap();
+ ConcurrentMap<Long, Pointer<Object>> map =
+ new MapMaker().concurrencyLevel( 4 ).initialCapacity( 500000 ).makeMap();
String str = "This is the string to store into the off-heap memory";
@@ -161,7 +159,6 @@ public class MallocWithUnsafeTest
mem.clear();
}
-
@Test
public void oneMillionEntriesWithRead()
{
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplTest.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplTest.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplTest.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/memory/MemoryManagerServiceImplTest.java Thu Oct 25 19:50:21 2012
@@ -25,9 +25,6 @@ import java.util.Random;
import junit.framework.Assert;
-import org.apache.directmemory.memory.MemoryManagerService;
-import org.apache.directmemory.memory.MemoryManagerServiceImpl;
-import org.apache.directmemory.memory.Pointer;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -44,22 +41,27 @@ public class MemoryManagerServiceImplTes
@Parameters
public static Collection<Object[]> data()
{
- Object[][] data =
- new Object[][] { { new MemoryManagerServiceImpl<Object>() },
- { new UnsafeMemoryManagerServiceImpl<Object>() } };
- return Arrays.asList( data );
+ return Arrays.asList( new Object[][] { { MemoryManagerServiceImpl.class },
+ { UnsafeMemoryManagerServiceImpl.class } } );
}
- private final MemoryManagerService<Object> memoryManagerService;
+ private final Class<? extends MemoryManagerService<Object>> memoryManagerServiceClass;
- public MemoryManagerServiceImplTest( MemoryManagerService<Object> memoryManagerService )
+ public MemoryManagerServiceImplTest( Class<? extends MemoryManagerService<Object>> memoryManagerServiceClass )
{
- this.memoryManagerService = memoryManagerService;
+ this.memoryManagerServiceClass = memoryManagerServiceClass;
}
protected MemoryManagerService<Object> getMemoryManagerService()
{
- return memoryManagerService;
+ try
+ {
+ return memoryManagerServiceClass.newInstance();
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
}
@Test
Modified: directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/preliminary/MicroBenchmark.java
URL: http://svn.apache.org/viewvc/directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/preliminary/MicroBenchmark.java?rev=1402302&r1=1402301&r2=1402302&view=diff
==============================================================================
--- directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/preliminary/MicroBenchmark.java (original)
+++ directmemory/trunk/directmemory-cache/src/test/java/org/apache/directmemory/preliminary/MicroBenchmark.java Thu Oct 25 19:50:21 2012
@@ -19,6 +19,17 @@ package org.apache.directmemory.prelimin
* under the License.
*/
+import java.nio.ByteBuffer;
+import java.util.Map;
+import java.util.concurrent.ConcurrentMap;
+
+import org.apache.directmemory.measures.Ram;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.carrotsearch.junitbenchmarks.AbstractBenchmark;
import com.carrotsearch.junitbenchmarks.BenchmarkOptions;
import com.carrotsearch.junitbenchmarks.annotation.AxisRange;
@@ -27,38 +38,28 @@ import com.carrotsearch.junitbenchmarks.
import com.carrotsearch.junitbenchmarks.annotation.LabelType;
import com.google.common.collect.MapMaker;
import com.google.common.collect.Maps;
-import org.apache.directmemory.measures.Ram;
-import org.junit.Before;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.ByteBuffer;
-import java.util.Map;
-import java.util.concurrent.ConcurrentMap;
@AxisRange( min = 0, max = 1 )
@BenchmarkMethodChart( filePrefix = "latest-microbench" )
@BenchmarkOptions( benchmarkRounds = 1, warmupRounds = 0 )
@BenchmarkHistoryChart( labelWith = LabelType.CUSTOM_KEY, maxRuns = 5 )
-
+@Ignore
public class MicroBenchmark
extends AbstractBenchmark
{
private static Logger logger = LoggerFactory.getLogger( MicroBenchmark.class );
+ private final int many = 3000000;
- private int many = 3000000;
-
- private int less = 300000;
+ private final int less = 300000;
@Before
public void cleanup()
{
dump( "Before cleanup" );
- //Runtime.getRuntime().gc();
- //dump("After cleanup");
+ // Runtime.getRuntime().gc();
+ // dump("After cleanup");
logger.info( "************************************************" );
}
@@ -86,7 +87,6 @@ public class MicroBenchmark
logger.info( "stored " + Ram.inMb( payload.length * ops ) );
}
-
@Test
public void manySmallInHeapWithMapMaker()
{
@@ -112,7 +112,6 @@ public class MicroBenchmark
}
-
@Test
public void lessButLargerOffHeap()
{
@@ -140,24 +139,11 @@ public class MicroBenchmark
}
/*
- *
- *
- * ExecutorService executor = Executors.newCachedThreadPool();
- Callable<Object> task = new Callable<Object>() {
- public Object call() {
- return something.blockingMethod();
- }
- }
- Future<Object> future = executor.submit(task);
- try {
- Object result = future.get(5, TimeUnit.SECONDS);
- } catch (TimeoutException ex) {
- // handle the timeout
- } finally {
- future.cancel(); // may or may not desire this
- }
- */
-
+ * ExecutorService executor = Executors.newCachedThreadPool(); Callable<Object> task = new Callable<Object>() {
+ * public Object call() { return something.blockingMethod(); } } Future<Object> future = executor.submit(task); try
+ * { Object result = future.get(5, TimeUnit.SECONDS); } catch (TimeoutException ex) { // handle the timeout }
+ * finally { future.cancel(); // may or may not desire this }
+ */
private void pumpOffHeap( int ops, byte[] payload )
{
@@ -207,5 +193,4 @@ public class MicroBenchmark
logger.info( "done in " + ( finished - started ) / 1000 + " seconds" );
}
-
}