@Test public void testCopyReferenceLoadTest() { assertEquals(0, JNIMemoryManager.getMgr().getNumPinnedObjects()); RefCounted obj = RefCountedTester.make(); for (int i = 0; i < 100000; i++) { RefCounted copy = obj.copyReference(); copy.delete(); } obj.delete(); assertEquals(0, JNIMemoryManager.getMgr().getNumPinnedObjects()); }
@Test public void testCopyReferenceLoadTestMultiThreaded() throws InterruptedException { assertEquals(0, JNIMemoryManager.getMgr().getNumPinnedObjects()); final RefCounted obj = RefCountedTester.make(); final int NUM_THREADS = 100; final int NUM_ITERS = 10000; final AtomicBoolean start = new AtomicBoolean(false); Thread[] threads = new Thread[NUM_THREADS]; for (int i = 0; i < threads.length; i++) { threads[i] = new Thread( new Runnable() { public void run() { synchronized (start) { while (!start.get()) try { start.wait(); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } // System.out.println("Thread started: // "+Thread.currentThread().getName()); for (int i = 0; i < NUM_ITERS; i++) { RefCounted copy = obj.copyReference(); copy.delete(); } } }, "thread_" + i); } for (int i = 0; i < threads.length; i++) { threads[i].start(); } synchronized (start) { start.set(true); start.notifyAll(); } for (int i = 0; i < threads.length; i++) { threads[i].join(); // System.out.println("Thread finished: "+threads[i].getName()); } obj.delete(); assertEquals(0, JNIMemoryManager.getMgr().getNumPinnedObjects()); }