// Copyright 2004-present Facebook. All Rights Reserved. package com.facebook.jni; import com.facebook.proguard.annotations.DoNotStrip; import com.facebook.soloader.SoLoader; /** * A Java Object that has native memory allocated corresponding to this instance. * * NB: THREAD SAFETY (this comment also exists at Countable.cpp) * * {@link #dispose} deletes the corresponding native object on whatever thread the method is called * on. In the common case when this is called by Countable#finalize(), this will be called on the * system finalizer thread. If you manually call dispose on the Java object, the native object * will be deleted synchronously on that thread. */ @DoNotStrip public class Countable { static { SoLoader.loadLibrary("fb"); } // Private C++ instance @DoNotStrip private long mInstance = 0; public native void dispose(); protected void finalize() throws Throwable { dispose(); super.finalize(); } }