LMDB is compact, fast, powerful, and robust and implements a simplified variant of the BerkeleyDB (BDB) API.
Everything starts with an environment, created by env_create. Once created, this environment must also be opened with env_open. env_open gets
passed a name which is interpreted as a directory path. Note that this directory must exist already, it is not created for you. Within that directory,
a lock file and a storage file will be generated. If you don't want to use a directory, you can pass the NOSUBDIR option, in which case the path you
provided is used directly as the data file, and another file with a "-lock" suffix added will be used for the lock file.
Once the environment is open, a transaction can be created within it using txn_begin. Transactions may be read-write or read-only, and read-write
transactions may be nested. A transaction must only be used by one thread at a time. Transactions are always required, even for read-only access. The
transaction provides a consistent view of the data.
Once a transaction has been created, a database can be opened within it using dbi_open. If only one database will ever be used in the environment, a
NULL can be passed as the database name. For named databases, the CREATE flag must be used to create the database if it doesn't already exist. Also,
env_set_maxdbs must be called after env_create and before env_open to set the maximum number of named databases you want to support.
Note
a single transaction can open multiple databases. Generally databases should only be opened once, by the first transaction in the process. After the first transaction completes, the database handles can freely be used by all subsequent transactions.
Within a transaction, get and put can store single key/value pairs if that is all you need to do (but see Cursors below if you want to do
more).
A key/value pair is expressed as two MDBVal structures. This struct has two fields, mv_size and mv_data. The data is a void
pointer to an array of mv_size bytes.
Because LMDB is very efficient (and usually zero-copy), the data returned in an MDBVal structure may be memory-mapped straight from disk. In other
words look but do not touch (or free() for that matter). Once a transaction is closed, the values can no longer be used, so make a copy
if you need to keep them after that.
To do more powerful things, we must use a cursor.
Within the transaction, a cursor can be created with cursor_open. With this cursor we can store/retrieve/delete (multiple) values using
cursor_get, cursor_put, and cursor_del.
cursor_get positions itself depending on the cursor operation requested, and for some operations, on the supplied key. For example, to list all
key/value pairs in a database, use operation FIRST for the first call to cursor_get, and NEXT on subsequent calls, until the end is hit.
To retrieve all keys starting from a specified key value, use SET.
When using cursor_put, either the function will position the cursor for you based on the key, or you can use operation CURRENT to use the
current position of the cursor. Note that key must then match the current position's key.
So we have a cursor in a transaction which opened a database in an environment which is opened from a filesystem after it was separately created.
Or, we create an environment, open it from a filesystem, create a transaction within it, open a database within that transaction, and create a cursor within all of the above.
LMDB uses POSIX locks on files, and these locks have issues if one process opens a file multiple times. Because of this, do not env_open a file
multiple times from a single process. Instead, share the LMDB environment that has opened the file across all threads. Otherwise, if a single process
opens the same environment multiple times, closing it once will remove all the locks held on it, and the other instances will be vulnerable to
corruption from other processes.
Also note that a transaction is tied to one thread by default using Thread Local Storage. If you want to pass read-only transactions across threads,
you can use the NOTLS option on the environment.
To actually get anything done, a transaction must be committed using txn_commit. Alternatively, all of a transaction's operations can be discarded
using txn_abort. In a read-only transaction, any cursors will not automatically be freed. In a read-write transaction, all cursors will be
freed and must not be used again.
For read-only transactions, obviously there is nothing to commit to storage. The transaction still must eventually be aborted to close any database handle(s) opened in it, or committed to keep the database handles around for reuse in new transactions.
In addition, as long as a transaction is open, a consistent view of the database is kept alive, which requires storage. A read-only transaction that no longer requires this consistent view should be terminated (committed or aborted) when the view is no longer needed (but see below for an optimization).
There can be multiple simultaneously active read-only transactions but only one that can write. Once a single read-write transaction is opened, all further attempts to begin one will block until the first one is committed or aborted. This has no effect on read-only transactions, however, and they may continue to be opened at any time.
get and put respectively have no and only some support for multiple key/value pairs with identical keys. If there are multiple values for a key,
get will only return the first value.
When multiple values for one key are required, pass the DUPSORT flag to dbi_open. In an DUPSORT database, by default put will not replace the
value for a key if the key existed already. Instead it will add the new value to the key. In addition, del will pay attention to the value field
too, allowing for specific values of a key to be deleted.
Finally, additional cursor operations become available for traversing through and retrieving duplicate values.
If you frequently begin and abort read-only transactions, as an optimization, it is possible to only reset and renew a transaction.
txn_reset releases any old copies of data kept around for a read-only transaction. To reuse this reset transaction, call txn_renew on it. Any
cursors in this transaction must also be renewed using cursor_renew.
Note that txn_reset is similar to txn_abort and will close any databases you opened within the transaction.
To permanently free a transaction, reset or not, use txn_abort.
For read-only transactions, any cursors created within it must be closed using cursor_close.
It is very rarely necessary to close a database handle, and in general they should just be left open.
| Modifier and Type | Field and Description |
|---|---|
| public static final int | MDB_APPEND
Write flags. |
| public static final int | MDB_APPENDDUP
Write flags. |
| public static final int | MDB_BAD_DBI
Return codes. |
| public static final int | MDB_BAD_RSLOT
Return codes. |
| public static final int | MDB_BAD_TXN
Return codes. |
| public static final int | MDB_BAD_VALSIZE
Return codes. |
| public static final int | MDB_CORRUPTED
Return codes. |
| public static final int | MDB_CP_COMPACT
Copy flags. |
| public static final int | MDB_CREATE
Database flags. |
| public static final int | MDB_CURRENT
Write flags. |
| public static final int | MDB_CURSOR_FULL
Return codes. |
| public static final int | MDB_DBS_FULL
Return codes. |
| public static final int | MDB_DUPFIXED
Database flags. |
| public static final int | MDB_DUPSORT
Database flags. |
| public static final int | MDB_FIRST
MDB_cursor_op Enum values:
|
| public static final int | MDB_FIRST_DUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_FIXEDMAP
Environment flags. |
| public static final int | MDB_GET_BOTH
MDB_cursor_op Enum values:
|
| public static final int | MDB_GET_BOTH_RANGE
MDB_cursor_op Enum values:
|
| public static final int | MDB_GET_CURRENT
MDB_cursor_op Enum values:
|
| public static final int | MDB_GET_MULTIPLE
MDB_cursor_op Enum values:
|
| public static final int | MDB_INCOMPATIBLE
Return codes. |
| public static final int | MDB_INTEGERDUP
Database flags. |
| public static final int | MDB_INTEGERKEY
Database flags. |
| public static final int | MDB_INVALID
Return codes. |
| public static final int | MDB_KEYEXIST
Return codes. |
| public static final int | MDB_LAST
MDB_cursor_op Enum values:
|
| public static final int | MDB_LAST_DUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_LAST_ERRCODE
Return codes. |
| public static final int | MDB_MAP_FULL
Return codes. |
| public static final int | MDB_MAP_RESIZED
Return codes. |
| public static final int | MDB_MAPASYNC
Environment flags. |
| public static final int | MDB_MULTIPLE
Write flags. |
| public static final int | MDB_NEXT
MDB_cursor_op Enum values:
|
| public static final int | MDB_NEXT_DUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_NEXT_MULTIPLE
MDB_cursor_op Enum values:
|
| public static final int | MDB_NEXT_NODUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_NODUPDATA
Write flags. |
| public static final int | MDB_NOLOCK
Environment flags. |
| public static final int | MDB_NOMEMINIT
Environment flags. |
| public static final int | MDB_NOMETASYNC
Environment flags. |
| public static final int | MDB_NOOVERWRITE
Write flags. |
| public static final int | MDB_NORDAHEAD
Environment flags. |
| public static final int | MDB_NOSUBDIR
Environment flags. |
| public static final int | MDB_NOSYNC
Environment flags. |
| public static final int | MDB_NOTFOUND
Return codes. |
| public static final int | MDB_NOTLS
Environment flags. |
| public static final int | MDB_PAGE_FULL
Return codes. |
| public static final int | MDB_PAGE_NOTFOUND
Return codes. |
| public static final int | MDB_PANIC
Return codes. |
| public static final int | MDB_PREV
MDB_cursor_op Enum values:
|
| public static final int | MDB_PREV_DUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_PREV_MULTIPLE
MDB_cursor_op Enum values:
|
| public static final int | MDB_PREV_NODUP
MDB_cursor_op Enum values:
|
| public static final int | MDB_RDONLY
Environment flags. |
| public static final int | MDB_READERS_FULL
Return codes. |
| public static final int | MDB_RESERVE
Write flags. |
| public static final int | MDB_REVERSEDUP
Database flags. |
| public static final int | MDB_REVERSEKEY
Database flags. |
| public static final int | MDB_SET
MDB_cursor_op Enum values:
|
| public static final int | MDB_SET_KEY
MDB_cursor_op Enum values:
|
| public static final int | MDB_SET_RANGE
MDB_cursor_op Enum values:
|
| public static final int | MDB_SUCCESS
Return codes. |
| public static final int | MDB_TLS_FULL
Return codes. |
| public static final int | MDB_TXN_FULL
Return codes. |
| public static final String | MDB_VERSION_DATE
The release date of this library version. |
| public static final int | MDB_VERSION_FULL
The full library version as a single integer. |
| public static final int | MDB_VERSION_MAJOR
Library major version. |
| public static final int | MDB_VERSION_MINOR
Library minor version. |
| public static final int | MDB_VERSION_MISMATCH
Return codes. |
| public static final int | MDB_VERSION_PATCH
Library patch version. |
| public static final String | MDB_VERSION_STRING
The full library version as a string. |
| public static final int | MDB_WRITEMAP
Environment flags. |
| Access | Constructor and Description |
|---|---|
| protected |
| Modifier and Type | Method and Description | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| public static int | ||||||||||||||||||||
| public static void | ||||||||||||||||||||
| public static int | mdb_cursor_count(long
a cursor handle returned by cursor, PointerBuffer cursor_openaddress where the count will be stored countp)Returns count of duplicates for current key. | |||||||||||||||||||
| public static int | mdb_cursor_dbi(long
a cursor handle returned by cursor)cursor_openReturn the cursor's database handle. | |||||||||||||||||||
| public static int | mdb_cursor_del(long
a cursor handle returned by cursor, int flags)cursor_openDeletes current key/data pair. | |||||||||||||||||||
| public static int | mdb_cursor_get(long
a cursor handle returned by cursor, MDBVal cursor_openthe key for a retrieved item key, MDBVal the data of a retrieved item data, int a cursor operation op)MDB_cursor_op. One of:
Retrieves by cursor. | |||||||||||||||||||
| public static int | mdb_cursor_open(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, PointerBuffer dbi_openaddress where the new cursor)MDB_cursor handle will be storedCreates a cursor handle. | |||||||||||||||||||
| public static int | mdb_cursor_put(long
a cursor handle returned by cursor, MDBVal cursor_openthe key operated on key, MDBVal the data operated on data, int options for this operation. This parameter must be set to 0 or one of the values described here.
flags)
Stores by cursor. | |||||||||||||||||||
| public static int | mdb_cursor_renew(long
a transaction handle returned by txn, long txn_begin.a cursor handle returned by cursor)cursor_openRenews a cursor handle. | |||||||||||||||||||
| public static long | mdb_cursor_txn(long
a cursor handle returned by cursor)cursor_openReturns the cursor's transaction handle. | |||||||||||||||||||
| public static void | mdb_dbi_close(long
an environment handle returned by env, int env_createa database handle returned by dbi)dbi_openCloses a database handle. | |||||||||||||||||||
| public static int | mdb_dbi_flags(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, IntBuffer dbi_openaddress where the flags will be returned flags)Retrieve the DB flags for a database handle. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
a transaction handle returned by txn, ByteBuffer txn_begin.the name of the database to open. If only a single database is needed in the environment, this value may be name, int NULL.special options for this database. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags, IntBuffer
address where the new dbi)MDB_dbi handle will be storedOpens a database in the environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
a transaction handle returned by txn, CharSequence txn_begin.the name of the database to open. If only a single database is needed in the environment, this value may be name, int NULL.special options for this database. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags, IntBuffer
address where the new dbi)MDB_dbi handle will be storedOpens a database in the environment. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static void | mdb_env_close(long
an environment handle returned by env)env_createCloses the environment and releases the memory map. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, ByteBuffer env_create. It must have already been opened successfully.the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty. path)Copies an LMDB environment to the specified path. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, CharSequence env_create. It must have already been opened successfully.the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty. path)Copies an LMDB environment to the specified path. | |||||||||||||||||||
| public static int | mdb_env_copy2(long
an environment handle returned by env, ByteBuffer env_create. It must have already been opened successfully.the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty. path, int special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags)
Copies an LMDB environment to the specified path, with options. | |||||||||||||||||||
| public static int | mdb_env_copy2(long
an environment handle returned by env, CharSequence env_create. It must have already been opened successfully.the directory in which the copy will reside. This directory must already exist and be writable but must otherwise be empty. path, int special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags)
Copies an LMDB environment to the specified path, with options. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successthe address where the new handle will be stored env)Creates an LMDB environment handle. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, IntBuffer env_createthe address of an integer to store the flags flags)Gets environment flags. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | mdb_env_get_maxkeysize(long
an environment handle returned by env)env_createGets the maximum size of keys and | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, IntBuffer env_createaddress of an integer to store the number of readers readers)Gets the maximum number of threads/reader slots for the environment. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, PointerBuffer env_createaddress of a string pointer to contain the path. This is the actual string in the environment, not a copy. It should not be altered in any way. path)Returns the path that was used in | |||||||||||||||||||
| public static long | mdb_env_get_userctx(long
an environment handle returned by env)env_createGets the application information associated with the | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, MDBEnvInfo env_createthe address of an stat)MDBEnvInfo structure where the information will be copiedReturns information about the LMDB environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, ByteBuffer env_createthe directory in which the database files reside. This directory must already exist and be writable. path, int Special options for this environment. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here. Flags
set by flags, int env_set_flags are also used.
The UNIX permissions to set on created files and semaphores.
mode)This parameter is ignored on Windows. Opens an environment handle. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, CharSequence env_createthe directory in which the database files reside. This directory must already exist and be writable. path, int Special options for this environment. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here. Flags
set by flags, int env_set_flags are also used.
The UNIX permissions to set on created files and semaphores.
mode)This parameter is ignored on Windows. Opens an environment handle. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, int env_createthe flags to change, bitwise OR'ed together flags, boolean a non-zero value sets the flags, zero clears them. onoff)Sets environment flags. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, long env_createthe size in bytes size)Sets the size of the memory map to use for this environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, int env_createthe maximum number of databases dbs)Sets the maximum number of named databases for the environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, int env_createthe maximum number of reader lock table slots readers)Sets the maximum number of threads/reader slots for the environment. | |||||||||||||||||||
| public static int | mdb_env_set_userctx(long
an environment handle returned by env, long env_createan arbitrary pointer for whatever the application needs ctx)Set application information associated with the | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on successan environment handle returned by env, MDBStat env_createthe address of an stat)MDBStat structure where the statistics will be copiedReturns statistics about the LMDB environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, boolean force)env_createFlushes the data buffers to disk. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | mdb_put(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, MDBVal dbi_openthe key to store in the database key, MDBVal the data to store data, int special options for this operation. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags)
Stores items into a database. | |||||||||||||||||||
| public static int | mdb_reader_check(long
an environment handle returned by env, IntBuffer env_createnumber of stale slots that were cleared dead)Checks for stale entries in the reader lock table. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static int | mdb_reader_list(long
an environment handle returned by env, MDBMsgFuncI env_createan func, long MDBMsgFunc functionanything the message function needs ctx)Dumps the entries in the reader lock table. | |||||||||||||||||||
| public static int | mdb_set_compare(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, MDBCmpFuncI dbi_openan cmp)MDBCmpFunc functionSets a custom key comparison function for a database. | |||||||||||||||||||
| public static int | mdb_set_dupsort(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, MDBCmpFuncI dbi_openan cmp)MDBCmpFunc functionSets a custom data comparison function for a | |||||||||||||||||||
| public static int | mdb_set_relctx(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, long dbi_openan arbitrary pointer for whatever the application needs. It will be passed to the callback function set by ctx)MDBRelFunc as its relctx
parameter whenever the callback is invoked.Sets a context pointer for a | |||||||||||||||||||
| public static int | mdb_set_relfunc(long
a transaction handle returned by txn, int txn_begin.a database handle returned by dbi, MDBRelFuncI dbi_openan rel)MDBRelFunc functionSets a relocation function for a | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static String | Returns: the description of the errorthe error code err)Returns a string describing a given error code. | |||||||||||||||||||
| public static void | mdb_txn_abort(long
a transaction handle returned by txn)txn_begin.Abandons all the operations of the transaction instead of saving them. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
an environment handle returned by env, long env_createif this parameter is non- parent, int NULL, the new transaction will be a nested transaction, with the transaction indicated by parent as its parent.
Transactions may be nested to any level. A parent transaction and its cursors may not issue any other operations than txn_commit and
txn_abort while it has active child transactions.special options for this transaction. This parameter must be set to 0 or by bitwise OR'ing together one or more of the values described here.
flags, PointerBuffer
address where the new txn)MDB_txn handle will be storedCreates a transaction for use with the environment. | |||||||||||||||||||
| public static int | Returns: a non-zero error value on failure and 0 on success. Some possible errors are:
a transaction handle returned by txn)txn_begin.Commits all the operations of a transaction into the database. | |||||||||||||||||||
| public static long | ||||||||||||||||||||
| public static long | Returns: a transaction ID, valid if input is an active transactiona transaction handle returned by txn)txn_begin.Returns the transaction's ID. This returns the identifier associated with this transaction. | |||||||||||||||||||
| public static int | ||||||||||||||||||||
| public static void | ||||||||||||||||||||
| public static String | Returns: the library version as a stringif non- major, IntBuffer NULL, the library major version number is copied hereif non- minor, IntBuffer NULL, the library minor version number is copied hereif non- patch)NULL, the library patch version number is copied hereReturns the LMDB library version information. | |||||||||||||||||||
| public static String | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native void | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native void | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native void | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native void | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native int | ||||||||||||||||||||
| public static native void | ||||||||||||||||||||
| public static native long | ||||||||||||||||||||
| public static native long |