Summary: Add RocksObject, the base class of all java objects which has a c++ pointer. While the finalizer of a RocksObject will release its c++ resource, it is suggested to call its RocksObject.dispose() to manually release its c++ resource. Existing RocksDB java classes are now extending RocksObject. Test Plan: make rocksdbjava make jtest make jdb_bench Reviewers: haobo, dhruba, sdong, ankgup87, rsumbaly, swapnilghike, zzbennett Reviewed By: haobo CC: leveldb Differential Revision: https://reviews.facebook.net/D18411main
parent
096f5be0ed
commit
61955a0dda
@ -0,0 +1,35 @@ |
|||||||
|
// Copyright (c) 2014, Facebook, Inc. All rights reserved.
|
||||||
|
// This source code is licensed under the BSD-style license found in the
|
||||||
|
// LICENSE file in the root directory of this source tree. An additional grant
|
||||||
|
// of patent rights can be found in the PATENTS file in the same directory.
|
||||||
|
|
||||||
|
package org.rocksdb; |
||||||
|
|
||||||
|
/** |
||||||
|
* RocksObject is the base-class of all RocksDB related class that has |
||||||
|
* a pointer to some c++ rocksdb object. Although RocksObject |
||||||
|
* will release its c++ resource on its finalize() once it has been |
||||||
|
* garbage-collected, it is suggested to call dispose() manually to |
||||||
|
* release its c++ resource once an instance of RocksObject is no |
||||||
|
* longer used. |
||||||
|
*/ |
||||||
|
public abstract class RocksObject { |
||||||
|
protected RocksObject() { |
||||||
|
nativeHandle_ = 0; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Release the c++ object pointed by the native handle. |
||||||
|
*/ |
||||||
|
public abstract void dispose(); |
||||||
|
|
||||||
|
protected boolean isInitialized() { |
||||||
|
return (nativeHandle_ != 0); |
||||||
|
} |
||||||
|
|
||||||
|
@Override protected void finalize() { |
||||||
|
dispose(); |
||||||
|
} |
||||||
|
|
||||||
|
protected long nativeHandle_; |
||||||
|
} |
Loading…
Reference in new issue