原生镜像 C API
原生镜像提供了一个 GraalVM 特定的 API 来管理来自 C/C++ 语言的 Java 对象,初始化隔离区并附加线程。当原生镜像构建为共享库时,C API 就会可用,其声明包含在原生镜像构建过程中生成的标头文件中。
/*
* Structure representing an isolate. A pointer to such a structure can be
* passed to an entry point as the execution context.
*/
struct __graal_isolate_t;
typedef struct _graal_isolate_t graal_isolate_t;
/*
* Structure representing a thread that is attached to an isolate. A pointer to
* such a structure can be passed to an entry point as the execution context,
* requiring that the calling thread has been attached to that isolate.
*/
struct __graal_isolatethread_t;
typedef struct __graal_isolatethread_t graal_isolatethread_t;
/* Parameters for the creation of a new isolate. */
struct __graal_create_isolate_params_t {
/* for future use */
};
typedef struct __graal_create_isolate_params_t graal_create_isolate_params_t;
/*
* Create a new isolate, considering the passed parameters (which may be NULL).
* Returns 0 on success, or a non-zero value on failure.
* On success, the current thread is attached to the created isolate, and the
* address of the isolate and the isolate thread structures is written to the
* passed pointers if they are not NULL.
*/
int graal_create_isolate(graal_create_isolate_params_t* params, graal_isolate_t** isolate, graal_isolatethread_t** thread);
/*
* Attaches the current thread to the passed isolate.
* On failure, returns a non-zero value. On success, writes the address of the
* created isolate thread structure to the passed pointer and returns 0.
* If the thread has already been attached, the call succeeds and also provides
* the thread's isolate thread structure.
*/
int graal_attach_thread(graal_isolate_t* isolate, graal_isolatethread_t** thread);
/*
* Given an isolate to which the current thread is attached, returns the address of
* the thread's associated isolate thread structure. If the current thread is not
* attached to the passed isolate or if another error occurs, returns NULL.
*/
graal_isolatethread_t* graal_get_current_thread(graal_isolate_t* isolate);
/*
* Given an isolate thread structure, determines to which isolate it belongs and
* returns the address of its isolate structure. If an error occurs, returns NULL
* instead.
*/
graal_isolate_t* graal_get_isolate(graal_isolatethread_t* thread);
/*
* Detaches the passed isolate thread from its isolate and discards any state or
* context that is associated with it. At the time of the call, no code may still
* be executing in the isolate thread's context.
* Returns 0 on success, or a non-zero value on failure.
*/
int graal_detach_thread(graal_isolatethread_t* thread);
/*
* Tears down the isolate of the passed (and still attached) isolate thread
* waiting for any attached threads to detach from it, then discards its objects,
* threads, and any other state or context that is associated with it.
* Returns 0 on success, or a non-zero value on failure.
*/
int graal_tear_down_isolate(graal_isolatethread_t* thread);
除了 C 级 API 外,您还可以使用 JNI 调用 API 从 Java 创建隔离区,公开和调用嵌入在原生共享库中的 Java 方法。