CAFE_VM

蚂蚁金服金融级容器引擎实践之路 小蚂蚁说: 在金融级分布式架构中使用容器,许多企业的开发者都面临许多挑战。在2018年ATEC蚂蚁金服技术探索大会上,蚂蚁金服高级技术专家盛延敏在演讲中分析了容器与云原生技术的本质,为容器在分布式架构上的使用带来了实用高效的解决方案。 关于蚂蚁金服科技开放其他的技术产品,你还可以参考阅读: 《独家 | 蚂蚁金服TRaaS技术风险防控平台解密》; 《深度|蚂蚁金服分布式金融核心套件:金融核心... 阅读详情

jni.h


class _Jv_JavaVM
{
public:
  const struct JNIInvokeInterface *functions;

  jint DestroyJavaVM ()
  { return functions->DestroyJavaVM (this); }

  jint AttachCurrentThread (void **penv, void *args)
  { return functions->AttachCurrentThread (this, penv, args); }

  jint DetachCurrentThread ()
  { return functions->DetachCurrentThread (this); }

  jint GetEnv (void **penv, jint version)
  { return functions->GetEnv (this, penv, version); }

  jint AttachCurrentThreadAsDaemon (void **penv, void *args)
  { return functions->AttachCurrentThreadAsDaemon (this, penv, args); }
};

typedef struct _Jv_JavaVM JavaVM;

struct JNINativeInterface{
    void  *reserved0; // 保留字0
 void  *reserved1; // 保留字1
 void  *reserved2; // 保留字2
 void  *reserved3; // 保留字3
 // function declaration
    jint   (JNICALL *GetVersion)   (JNIEnv *);
 jclass (JNICALL *DefineClass)  (JNIEnv *, const char *,
                              jobject,  const jbyte*, jsize); // typedef jint jsize
    jclass (JNICALL *FindClass)    (JNIEnv*, const char*);
    jmethodID(JNICALL *FromReflectedMethod) (JNIEnv*, jobject);
 jfieldID(JNICALL *FromReflectedField) (JNIEnv*, jobject);
 jobject(JNICALL *toReflectedMethod) (JNIEnv*, jclass, jmethodID, jboolean);
   
 jclass (JNICALL *GetSuperclass) (JNIEnv*, jclass);
 jboolean (JNICALL *IsAssignableFrom) (JNIEnv *, jclass, jclass);
    jobject (JNICALL *ToReflectedField )(JNIEnv*, jclass, jfieldID, jboolean);
 
 jint  (JNICALL *Throw) (JNIEnv *, jthrowable);
    jint  (JNICALL *ThrowaNew) (JNIEnv *, jclass, const char *);
   
 jthrowable (JNICALL *ExceptionOccurred) (JNIEnv*);
 void  (JNICALL *ExceptionDescribe)(JNIEnv *);
 void  (JNICALL *ExceptionClear)(JNIEnv *);
 void  (JNICALL *FatalError) (JNIEnv*, const char *);

 jint  (JNICALL *Throw)  (JNIEnv*, jclass, jfieldID, jboolean);
    jint  (JNICALL *ThrowNew) (JNIEnv*, jclass, const char*);
 
 //局部帧
    jint  (JNICALL *PushLocalFrame) (JNIEnv*,jint);
 jobject (JNICALL *PopLocalFrame)(JNIEnv*, jobject);
 
 jobject (JNICALL *NewGlobalRef) (JNIEnv*, jobject);
 void  (JNICALL *DeleteGlobalRef) (JNIEnv*, jobject);
 void  (JNICALL *DeleteLocalRef) (JNIEnv*, jobject);
 jboolean  (JNICALL *IsSameObject) (JNIEnv*, jobject, jobject); //函数指针
  
    jobject   (JNICALL *AllocObject) (JNIEnv*, jclass);
 jobject   (JNICALL *NewObject)(JNIEnv*, jclass, jmethodID, ...);
 jobject   (JNICALL *NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
 jobject   (JNICALL *NewObjectA)(JNIEnv *, jclass,jmethodID, jvalue*);

 jclass    (JNICALL *GetObjectClass)(JNIEnv *, jobject);
 jboolean  (JNICALL *IsInstanceOf)(JNIEnv*, jobject, jclass);
 jmethodID (JNICALL *GetMethodID) (JNIEnv*, jclass, const char*, const char*);

 jobject (JNICALL *CallObjectMethod) (JNIEnv*, jobject, jmethodID, ...);
 jobject (JNICALL *CallObjectMethodV) (JNIEnv*, jobject, jmethodID, va_list);
 jobject (JNICALL *CallObjectMethodA)    (JNIEnv *, jobject, jmethodID,  jvalue *);
  jboolean (JNICALL *CallBooleanMethod)    (JNIEnv *, jobject, jmethodID,  ...);
  jboolean (JNICALL *CallBooleanMethodV)   (JNIEnv *, jobject, jmethodID,
                                            va_list);
  jboolean (JNICALL *CallBooleanMethodA)   (JNIEnv *, jobject, jmethodID, jvalue *);
  jbyte (JNICALL *CallByteMethod)   (JNIEnv *, jobject, jmethodID, ...);
  jbyte (JNICALL *CallByteMethodV)    (JNIEnv *, jobject, jmethodID,  va_list);
  jbyte (JNICALL *CallByteMethodA)    (JNIEnv *, jobject, jmethodID,  jvalue *);
  jchar (JNICALL *CallCharMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jchar (JNICALL *CallCharMethodV)    (JNIEnv *, jobject, jmethodID, va_list);
  jchar (JNICALL *CallCharMethodA)    (JNIEnv *, jobject, jmethodID, jvalue *);
  jshort (JNICALL *CallShortMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jshort (JNICALL *CallShortMethodV)    (JNIEnv *, jobject, jmethodID, va_list);
  jshort (JNICALL *CallShortMethodA)    (JNIEnv *, jobject, jmethodID, jvalue *);
  jint  (JNICALL *CallIntMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jint  (JNICALL *CallIntMethodV)    (JNIEnv *, jobject, jmethodID,va_list);
  jint  (JNICALL *CallIntMethodA)    (JNIEnv *, jobject, jmethodID, jvalue *);
  jlong (JNICALL *CallLongMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jlong (JNICALL *CallLongMethodV)    (JNIEnv *, jobject, jmethodID, va_list);
  jlong (JNICALL *CallLongMethodA)    (JNIEnv *, jobject, jmethodID, jvalue *);
  jfloat (JNICALL *CallFloatMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jfloat (JNICALL *CallFloatMethodV)    (JNIEnv *, jobject, jmethodID, va_list);
  jfloat (JNICALL *CallFloatMethodA)    (JNIEnv *, jobject, jmethodID, jvalue *);
  jdouble (JNICALL *CallDoubleMethod)    (JNIEnv *, jobject, jmethodID, ...);
  jdouble (JNICALL *CallDoubleMethodV)    (JNIEnv *, jobject, jmethodID,   va_list);
  jdouble (JNICALL *CallDoubleMethodA)    (JNIEnv *, jobject, jmethodID,  jvalue *);
  void  (JNICALL *CallVoidMethod)    (JNIEnv *, jobject, jmethodID, ...);
  void  (JNICALL *CallVoidMethodV)    (JNIEnv *, jobject, jmethodID,  va_list);
  void  (JNICALL *CallVoidMethodA)    (JNIEnv *, jobject, jmethodID,  jvalue *);

  jobject   (JNICALL *CallNonvirtualObjectMethod)  (JNIEnv *, jobject, jclass,  jmethodID, ...);
  jobject   (JNICALL *CallNonvirtualObjectMethodV) (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jobject   (JNICALL *CallNonvirtualObjectMethodA) (JNIEnv *, jobject, jclass,jmethodID, jvalue *);
  jboolean  (JNICALL *CallNonvirtualBooleanMethod) (JNIEnv *, jobject, jclass, jmethodID, ...);
  jboolean  (JNICALL *CallNonvirtualBooleanMethodV) (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jboolean  (JNICALL *CallNonvirtualBooleanMethodA) (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jbyte     (JNICALL *CallNonvirtualByteMethod)    (JNIEnv *, jobject, jclass, jmethodID, ...);
  jbyte     (JNICALL *CallNonvirtualByteMethodV)   (JNIEnv *, jobject, jclass,  jmethodID, va_list);
  jbyte     (JNICALL *CallNonvirtualByteMethodA)   (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jchar     (JNICALL *CallNonvirtualCharMethod)    (JNIEnv *, jobject, jclass, jmethodID, ...);
  jchar     (JNICALL *CallNonvirtualCharMethodV)   (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jchar     (JNICALL *CallNonvirtualCharMethodA)   (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jshort    (JNICALL *CallNonvirtualShortMethod)   (JNIEnv *, jobject, jclass, jmethodID, ...);
  jshort    (JNICALL *CallNonvirtualShortMethodV)  (JNIEnv *, jobject, jclass,  jmethodID, va_list);
  jshort    (JNICALL *CallNonvirtualShortMethodA)  (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jint      (JNICALL *CallNonvirtualIntMethod)    (JNIEnv *, jobject, jclass, jmethodID, ...);
  jint      (JNICALL *CallNonvirtualIntMethodV)    (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jint      (JNICALL *CallNonvirtualIntMethodA)    (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jlong     (JNICALL *CallNonvirtualLongMethod)    (JNIEnv *, jobject, jclass,jmethodID, ...);
  jlong     (JNICALL *CallNonvirtualLongMethodV)   (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jlong     (JNICALL *CallNonvirtualLongMethodA)   (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jfloat    (JNICALL *CallNonvirtualFloatMethod)   (JNIEnv *, jobject, jclass,  jmethodID, ...);
  jfloat    (JNICALL *CallNonvirtualFloatMethodV)  (JNIEnv *, jobject, jclass, jmethodID, va_list);
  jfloat    (JNICALL *CallNonvirtualFloatMethodA)  (JNIEnv *, jobject, jclass, jmethodID, jvalue *);
  jdouble   (JNICALL *CallNonvirtualDoubleMethod)  (JNIEnv *, jobject, jclass,jmethodID, ...);
  jdouble   (JNICALL *CallNonvirtualDoubleMethodV) (JNIEnv *, jobject, jclass,jmethodID, va_list);
  jdouble   (JNICALL *CallNonvirtualDoubleMethodA) (JNIEnv *, jobject, jclass,jmethodID, jvalue *);
  void      (JNICALL *CallNonvirtualVoidMethod)    (JNIEnv *, jobject, jclass, jmethodID, ...);
  void      (JNICALL *CallNonvirtualVoidMethodV)   (JNIEnv *, jobject, jclass, jmethodID, va_list);
  void      (JNICALL *CallNonvirtualVoidMethodA)   (JNIEnv *, jobject, jclass, jmethodID, jvalue *);

  jfieldID  (JNICALL *GetFieldID)          (JNIEnv *, jclass, const char *, const char *);

  jobject  (JNICALL *GetObjectField)       (JNIEnv *, jobject, jfieldID);
  jboolean (JNICALL *GetBooleanField)      (JNIEnv *, jobject, jfieldID);
  jbyte    (JNICALL *GetByteField)         (JNIEnv *, jobject, jfieldID);
  jchar    (JNICALL *GetCharField)         (JNIEnv *, jobject, jfieldID);
  jshort   (JNICALL *GetShortField)        (JNIEnv *, jobject, jfieldID);
  jint     (JNICALL *GetIntField)          (JNIEnv *, jobject, jfieldID);
  jlong    (JNICALL *GetLongField)         (JNIEnv *, jobject, jfieldID);
  jfloat   (JNICALL *GetFloatField)        (JNIEnv *, jobject, jfieldID);
  jdouble  (JNICALL *GetDoubleField)       (JNIEnv *, jobject, jfieldID);

  void (JNICALL *SetObjectField)    (JNIEnv *, jobject, jfieldID, jobject);
  void (JNICALL *SetBooleanField)    (JNIEnv *, jobject, jfieldID, jboolean);
  void (JNICALL *SetByteField)     (JNIEnv *, jobject, jfieldID, jbyte);
  void (JNICALL *SetCharField)     (JNIEnv *, jobject, jfieldID, jchar);
  void (JNICALL *SetShortField)    (JNIEnv *, jobject, jfieldID, jshort);
  void (JNICALL *SetIntField)     (JNIEnv *, jobject, jfieldID, jint);
  void (JNICALL *SetLongField)     (JNIEnv *, jobject, jfieldID, jlong);
  void (JNICALL *SetFloatField)    (JNIEnv *, jobject, jfieldID, jfloat);
  void (JNICALL *SetDoubleField)    (JNIEnv *, jobject, jfieldID, jdouble);

  jmethodID (JNICALL *GetStaticMethodID)   (JNIEnv *, jclass, const char *, const char *);

  jobject  (JNICALL *CallStaticObjectMethod)  (JNIEnv *, jclass, jmethodID, ...);
  jobject  (JNICALL *CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID, va_list);
  jobject  (JNICALL *CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID, jvalue *);
  jboolean (JNICALL *CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,  ...);
  jboolean (JNICALL *CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID, va_list);
  jboolean (JNICALL *CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID, jvalue *);
  jbyte    (JNICALL *CallStaticByteMethod)    (JNIEnv *, jclass, jmethodID, ...);
  jbyte    (JNICALL *CallStaticByteMethodV)   (JNIEnv *, jclass, jmethodID,  va_list);
  jbyte    (JNICALL *CallStaticByteMethodA)   (JNIEnv *, jclass, jmethodID,  jvalue *);
  jchar    (JNICALL *CallStaticCharMethod)    (JNIEnv *, jclass, jmethodID, ...);
  jchar    (JNICALL *CallStaticCharMethodV)   (JNIEnv *, jclass, jmethodID,  va_list);
  jchar    (JNICALL *CallStaticCharMethodA)   (JNIEnv *, jclass, jmethodID, jvalue *);
  jshort   (JNICALL *CallStaticShortMethod)   (JNIEnv *, jclass, jmethodID, ...);
  jshort   (JNICALL *CallStaticShortMethodV)  (JNIEnv *, jclass, jmethodID, va_list);
  jshort   (JNICALL *CallStaticShortMethodA)  (JNIEnv *, jclass, jmethodID,  jvalue *);
  jint     (JNICALL *CallStaticIntMethod)     (JNIEnv *, jclass, jmethodID,  ...);
  jint     (JNICALL *CallStaticIntMethodV)    (JNIEnv *, jclass, jmethodID, va_list);
  jint     (JNICALL *CallStaticIntMethodA)    (JNIEnv *, jclass, jmethodID, jvalue *);
  jlong    (JNICALL *CallStaticLongMethod)    (JNIEnv *, jclass, jmethodID,  ...);
  jlong    (JNICALL *CallStaticLongMethodV)   (JNIEnv *, jclass, jmethodID, va_list);
  jlong    (JNICALL *CallStaticLongMethodA)   (JNIEnv *, jclass, jmethodID, jvalue *);
  jfloat   (JNICALL *CallStaticFloatMethod)   (JNIEnv *, jclass, jmethodID,  ...);
  jfloat   (JNICALL *CallStaticFloatMethodV)  (JNIEnv *, jclass, jmethodID, va_list);
  jfloat   (JNICALL *CallStaticFloatMethodA)  (JNIEnv *, jclass, jmethodID,jvalue *);
  jdouble  (JNICALL *CallStaticDoubleMethod)  (JNIEnv *, jclass, jmethodID, ...);
  jdouble  (JNICALL *CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID, va_list);
  jdouble  (JNICALL *CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID, jvalue *);
  void     (JNICALL *CallStaticVoidMethod)    (JNIEnv *, jclass, jmethodID, ...);
  void     (JNICALL *CallStaticVoidMethodV)   (JNIEnv *, jclass, jmethodID, va_list);
  void     (JNICALL *CallStaticVoidMethodA)   (JNIEnv *, jclass, jmethodID, jvalue *);

  jfieldID (JNICALL *GetStaticFieldID)        (JNIEnv *, jclass, const char *, const char *);

  jobject  (JNICALL *GetStaticObjectField)    (JNIEnv *, jclass, jfieldID);
  jboolean (JNICALL *GetStaticBooleanField)   (JNIEnv *, jclass, jfieldID);
  jbyte    (JNICALL *GetStaticByteField)      (JNIEnv *, jclass, jfieldID);
  jchar    (JNICALL *GetStaticCharField)      (JNIEnv *, jclass, jfieldID);
  jshort   (JNICALL *GetStaticShortField)     (JNIEnv *, jclass, jfieldID);
  jint    (JNICALL *GetStaticIntField)       (JNIEnv *, jclass, jfieldID);
  jlong    (JNICALL *GetStaticLongField)      (JNIEnv *, jclass, jfieldID);
  jfloat   (JNICALL *GetStaticFloatField)     (JNIEnv *, jclass, jfieldID);
  jdouble  (JNICALL *GetStaticDoubleField)    (JNIEnv *, jclass, jfieldID);

  void  (JNICALL *SetStaticObjectField)    (JNIEnv *, jclass,jfieldID, jobject);
  void  (JNICALL *SetStaticBooleanField)   (JNIEnv *, jclass,jfieldID, jboolean);
  void  (JNICALL *SetStaticByteField)    (JNIEnv *, jclass,jfieldID, jbyte);
  void  (JNICALL *SetStaticCharField)    (JNIEnv *, jclass,jfieldID, jchar);
  void  (JNICALL *SetStaticShortField)    (JNIEnv *, jclass,jfieldID, jshort);
  void  (JNICALL *SetStaticIntField)    (JNIEnv *, jclass,jfieldID, jint);
  void  (JNICALL *SetStaticLongField)    (JNIEnv *, jclass, jfieldID, jlong);
  void  (JNICALL *SetStaticFloatField)    (JNIEnv *, jclass, jfieldID, jfloat);
  void  (JNICALL *SetStaticDoubleField)    (JNIEnv *, jclass, jfieldID, jdouble);

  jstring  (JNICALL *NewString)            (JNIEnv *, const jchar *, jsize);
  jsize    (JNICALL *GetStringLength)      (JNIEnv *, jstring);
  const jchar * (JNICALL *GetStringChars)  (JNIEnv *, jstring, jboolean *);
  void     (JNICALL *ReleaseStringChars)   (JNIEnv *, jstring, const jchar *);
  jstring  (JNICALL *NewStringUTF)         (JNIEnv *, const char *);
  jsize    (JNICALL *GetStringUTFLength)   (JNIEnv *, jstring);
  const char * (JNICALL *GetStringUTFChars) (JNIEnv *, jstring, jboolean *);
  void     (JNICALL *ReleaseStringUTFChars) (JNIEnv *, jstring, const char *);
  jsize    (JNICALL *GetArrayLength)       (JNIEnv *, jarray);
  jobjectArray (JNICALL *NewObjectArray)    (JNIEnv *, jsize, jclass, jobject);
  jobject  (JNICALL *GetObjectArrayElement) (JNIEnv *, jobjectArray, jsize);
  void     (JNICALL *SetObjectArrayElement) (JNIEnv *, jobjectArray, jsize,
          jobject);

  jbooleanArray (JNICALL *NewBooleanArray)    (JNIEnv *, jsize);
  jbyteArray    (JNICALL *NewByteArray)     (JNIEnv *, jsize);
  jcharArray    (JNICALL *NewCharArray)     (JNIEnv *, jsize);
  jshortArray   (JNICALL *NewShortArray)    (JNIEnv *, jsize);
  jintArray     (JNICALL *NewIntArray)     (JNIEnv *, jsize);
  jlongArray    (JNICALL *NewLongArray)     (JNIEnv *, jsize);
  jfloatArray   (JNICALL *NewFloatArray)    (JNIEnv *, jsize);
  jdoubleArray  (JNICALL *NewDoubleArray)    (JNIEnv *, jsize);

  jboolean * (JNICALL *GetBooleanArrayElements) (JNIEnv *, jbooleanArray, jboolean *);
  jbyte * (JNICALL *GetByteArrayElements)    (JNIEnv *, jbyteArray, jboolean *);
  jchar * (JNICALL *GetCharArrayElements)    (JNIEnv *, jcharArray, jboolean *);
  jshort * (JNICALL *GetShortArrayElements)   (JNIEnv *, jshortArray, jboolean *);
  jint * (JNICALL *GetIntArrayElements)    (JNIEnv *, jintArray, jboolean *);
  jlong * (JNICALL *GetLongArrayElements)    (JNIEnv *, jlongArray, jboolean *);
  jfloat * (JNICALL *GetFloatArrayElements)   (JNIEnv *, jfloatArray, jboolean *);
  jdouble * (JNICALL *GetDoubleArrayElements)  (JNIEnv *, jdoubleArray,jboolean *);

  void  (JNICALL *ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray, jboolean *, jint);
  void  (JNICALL *ReleaseByteArrayElements)    (JNIEnv *, jbyteArray, jbyte *, jint);
  void  (JNICALL *ReleaseCharArrayElements)    (JNIEnv *, jcharArray, jchar *, jint);
  void  (JNICALL *ReleaseShortArrayElements)   (JNIEnv *, jshortArray,  jshort *, jint);
  void  (JNICALL *ReleaseIntArrayElements)     (JNIEnv *, jintArray,  jint *, jint);
  void  (JNICALL *ReleaseLongArrayElements)    (JNIEnv *, jlongArray, jlong *, jint);
  void  (JNICALL *ReleaseFloatArrayElements)   (JNIEnv *, jfloatArray, jfloat *, jint);
  void  (JNICALL *ReleaseDoubleArrayElements)  (JNIEnv *, jdoubleArray, jdouble *, jint);

  void   (JNICALL *GetBooleanArrayRegion)   (JNIEnv *, jbooleanArray, jsize, jsize, jboolean *);
  void   (JNICALL *GetByteArrayRegion)    (JNIEnv *, jbyteArray, jsize, jsize, jbyte *);
  void   (JNICALL *GetCharArrayRegion)    (JNIEnv *, jcharArray, jsize, jsize, jchar *);
  void   (JNICALL *GetShortArrayRegion)    (JNIEnv *, jshortArray, jsize, jsize, jshort *);
  void   (JNICALL *GetIntArrayRegion)    (JNIEnv *, jintArray, jsize, jsize, jint *);
  void   (JNICALL *GetLongArrayRegion)    (JNIEnv *, jlongArray, jsize, jsize, jlong *);
  void   (JNICALL *GetFloatArrayRegion)    (JNIEnv *, jfloatArray, jsize, jsize, jfloat *);
  void   (JNICALL *GetDoubleArrayRegion)    (JNIEnv *, jdoubleArray, jsize, jsize, jdouble *);

  void   (JNICALL *SetBooleanArrayRegion)   (JNIEnv *, jbooleanArray, jsize, jsize, jboolean *);
  void   (JNICALL *SetByteArrayRegion)    (JNIEnv *, jbyteArray,  jsize, jsize, jbyte *);
  void   (JNICALL *SetCharArrayRegion)    (JNIEnv *, jcharArray, jsize, jsize, jchar *);
  void   (JNICALL *SetShortArrayRegion)    (JNIEnv *, jshortArray, jsize, jsize, jshort *);
  void   (JNICALL *SetIntArrayRegion)    (JNIEnv *, jintArray,  jsize, jsize, jint *);
  void   (JNICALL *SetLongArrayRegion)    (JNIEnv *, jlongArray, jsize, jsize, jlong *);
  void   (JNICALL *SetFloatArrayRegion)    (JNIEnv *, jfloatArray, jsize, jsize, jfloat *);
  void   (JNICALL *SetDoubleArrayRegion)    (JNIEnv *, jdoubleArray, jsize, jsize, jdouble *);

  jint     (JNICALL *RegisterNatives)              (JNIEnv *, jclass, const JNINativeMethod *,  jint);
  jint     (JNICALL *UnregisterNatives)            (JNIEnv *, jclass);
  jint     (JNICALL *MonitorEnter)                 (JNIEnv *, jobject);
  jint     (JNICALL *MonitorExit)                  (JNIEnv *, jobject);
  jint     (JNICALL *GetJavaVM)                    (JNIEnv *, JavaVM **);

  /* ---- JNI 1.2 functions ---- */
  void    (JNICALL *GetStringRegion)            (JNIEnv *, jstring, jsize,  jsize, jchar *);
  void     (JNICALL *GetStringUTFRegion)    (JNIEnv *, jstring, jsize, jsize, char *);

  void * (JNICALL *GetPrimitiveArrayCritical)      (JNIEnv *, jarray,   jboolean *);
  void   (JNICALL *ReleasePrimitiveArrayCritical)  (JNIEnv *, jarray, void *,    jint);

  const jchar * (JNICALL *GetStringCritical)       (JNIEnv *, jstring,   jboolean *);
  void          (JNICALL *ReleaseStringCritical)   (JNIEnv *, jstring,    const jchar *);

  jweak  (JNICALL *NewWeakGlobalRef)               (JNIEnv *, jobject);
  void   (JNICALL *DeleteWeakGlobalRef)            (JNIEnv *, jweak);

  jboolean (JNICALL *ExceptionCheck)    (JNIEnv *);


  jobject (JNICALL *NewDirectByteBuffer)           (JNIEnv *, void *, jlong);
  void *  (JNICALL *GetDirectBufferAddress)        (JNIEnv *, jobject);
  jlong   (JNICALL *GetDirectBufferCapacity)       (JNIEnv *, jobject);
};

typedef struct _Jv_JNIEnv JNIEnv;

android 初识JVM 1 JVM概念 JVM是Java Virtual Machine的简称。意味Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 有哪些虚拟机 VMWare Visual Box JVM VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM使用软件模拟Java 字节码的指令集 2 初识JVM-Java和JVM的历史 19... 阅读详情

相关推荐

图信号处理中的多尺度分析:图小波变换与图傅里叶变换的对比与应用

本文深入探讨了图信号处理中的多尺度分析方法,重点对比了图小波变换(GWT)与图傅里叶变换(GFT)的技术特点与应用场景。通过分析图的拓扑结构,GWT展现出强大的局部洞察力,适用于异常检测和社区发现;而GFT则擅长全局频率分析,适合趋势分析和信号去噪。文章结合实战案例,为读者提供了方法选型指南和前沿进展,帮助开发者在生物信息学、社交网络分析等领域高效应用这些技术。

weixin_30369041的博客 408

Android 录制回放原理

录制回放的方法大概了解了下,一般实现原理有: 1.基于坐标的实现,monkeyrunner为主要代表.通过截屏获取屏幕,进行缩放解析动作点,monkeyrunner使用的截图方法效率较低,对于root的手机可以使用类似gsnap之类的截图模式进行改进,另外采用的python脚本,对于java开发的android额外增加了语言复杂度.还有不同的手机设备响应时间不固定,导致脚本可执行行也较差.但是可

yunbin_7的专栏 3328

ROS 2 Slam Toolbox实战:从零跑通2D激光建图

SLAM(同步定位与地图构建)是移动机器人实现自主导航的基础技术,其核心在于通过传感器数据实时估计位姿并构建环境栅格地图。slam_toolbox作为ROS 2 Humble及后续LTS版本官方主推的2D SLAM后端,采用图优化+闭环检测架构,兼顾实时性、鲁棒性与工程可维护性。相比cartographer和hector_slam,它原生支持ROS 2、参数精简、诊断友好,特别适合硬件资源有限、缺乏IMU或深度相机的差速机器人平台。本文聚焦真实部署场景,覆盖RPLIDAR等常见2D激光雷达与TurtleBo

weixin_30596165的博客 358

音速神童创始人赵鹏王旭加入蚂蚁金服,剑指Kata Containers

据InfoQ独家消息,技术创业公司音速神童创始人赵鹏王旭加入蚂蚁金服,打造虚拟机级别的安全容器技术。\n音速神童成立于2015年,由两位中国开发者赵鹏和王旭创建。经过两年的发展,成长为全球容器行业的的重要技术和力量,并积极参与2017年托管于OpenStack基金会的Kata Containers项目,并作为创始成员拥有一个架构委员会(Architecture Committee)的席位,同时拥...

测试0901-1 343

一文搞定3D卷积

在讨论卷积核的时候,是不把channel维加进去的 核 = 一个可以滑动的窗口 窗口内不同位置数据之间的权值共享 3D卷积,卷积核会在3个方向上运动,那么卷积核的运动需要有三个自由度(一小块立方体,在一个大面包块内3个方向上滑动 2D卷积,卷积核只在2个方向上运动,因此只有两个自由度(一小片纸,在一大张纸内2个方向上滑动 1D卷积,卷积核只在1个方向上运动,因此只有一个自由度(一条滑窗,在一大长线上1个方向上滑动 一个卷积核运算一次 得到一个输出值 以上讨论了单个卷积核,接下来考虑多通道,一个卷积核对应一

njuptalex的博客 3万+

ComfyUI工作流换脸节点报错ReActorFaceSwap

找到自己ComfyUI安装目录的custom_nodes下是否有这个comfyui-reactor-node-main。大家在借鉴别人工作流进行AI换脸的时候,如果遇到ReActorFaceSwap报错提示,莫慌,看我的,两步解决问题。这里千万注意不要嵌套文件夹,保证点击去这个文件就可以看到内置的配置文件!找到自己ComfyUI安装目录的facerestore_models。如果有这个文件,直接跳过,去下一步。如果没有,可以去Git官网下载。

qq_70810809的博客 9018

黑龙江省文化经营技术监管系统“读网吧名“的逆向路径:从 SOUI 死路到内存 szTip 直达,以及 rust-cafe-tune 的自动化落地

本文探讨了在黑龙江网吧统一安装的文化经营监管系统(cclt.exe)中获取网吧名称的技术挑战与解决方案。由于该程序采用SOUI自绘界面、VMProtect加壳和流量混淆三重保护,传统方法(窗口文本获取、静态字符串搜索、配置文件解析)均告失败。研究发现虽然代码被加密,但系统API调用参数必须保持明文特性,特别是托盘图标提示文本(szTip)会以Unicode形式存在于内存中。通过内存扫描成功获取到"甘南县飞宇网吧"的明文名称,验证了"壳不保护API参数"的理论。实际应用

2601_96158891的博客 386

【多目标跟踪】ByteTrack复现(有yolov5例子)

1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML>=5.3 scipy>=1.4.1 tensorboard>=2.2 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 seaborn>=0.11.0 easydic

聿默的博客 1万+

解析 | 蚂蚁金服金融级容器引擎实践之路

小蚂蚁说: 在金融级分布式架构中使用容器,许多企业的开发者都面临许多挑战。在2018年ATEC蚂蚁金服技术探索大会上,蚂蚁金服高级技术专家盛延敏在演讲中分析了容器与云原生技术的本质,为容器在分布式架构上的使用带来了实用高效的解决方案。 关于蚂蚁金服科技开放其他的技术产品,你还可以参考阅读: 《独家 | 蚂蚁金服TRaaS技术风险防控平台解密》; 《深度|...

weixin_34375251的博客 408

MobileFusion:基于结构重参数化的移动端红外可见光图像融合方法

MobileFusion提出了一种轻量化的红外与可见光图像融合框架,通过结构重参数化技术实现移动端实时部署。该方法包含可重参数多分支卷积(RepMBConv)、轻量化上下文感知注意力(LCAA)和重参数前馈网络(RepFFN)三大模块,在训练时保留多分支结构增强特征学习,推理时合并为单路算子提升效率。实验表明,MobileFusion在MSRS、FMB等数据集上实现了融合质量与推理速度的平衡,参数量仅4000,在边缘设备上也能高效运行,为资源受限场景提供了实用解决方案。代码已开源。

毕竟是Shy哥 140

在时间轴上联动多张内表:ABAP 的 PROVIDE ... ENDPROVIDE 区间联动迭代实战

PROVIDE 是 ABAP 中处理有效期区间数据的强大工具,它能自动将多张内表按时间维度切片并联合处理。其核心功能包括:指定区间边界字段(BOUNDS),定义外部总区间(BETWEEN),并通过工作区和标志位(VALID)标识每张表在当前子区间是否生效。该语法特别适合 HR 信息类型等有效期数据,能避免手动处理区间重叠、排序和空档等问题。使用时需注意字段投影(FIELDS)限制、工作区只读原则,以及异常处理(如区间重叠或未排序)。典型应用场景包括员工调岗记录、价格有效期管理等需要时间轴联动的业务逻辑。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1675

深入JVM内核---原理,诊断与优化

JVM的概念 JAM是Java Virtual Machine的简称。意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的,运行在一种完整隔离环境中的完整计算机系统 有哪些虚拟机 -VMWare -Visual Box -JVM VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM使用软件模拟Java字节码的指令集 JVM发展史 初始...

weixin_34256074的博客 118

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JVM

初识JVMJVM的概念​ JVM是Java Virtual Machine的简称。意为Java虚拟机 ​ 虚拟机:指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。 ​ 有哪些虚拟: ​ VMWare ​ Visual Box ​ JVM ​ VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 ​ JVM使用软件模拟Jav...

weixin_30699235的博客 431

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

antivmdetection高级配置:自定义硬件指纹与系统特征伪装

antivmdetection是一款强大的VirtualBox虚拟机反检测工具,能够帮助用户通过自定义硬件指纹和系统特征伪装,有效规避各类虚拟机检测机制。本文将详细介绍如何进行高级配置,让你的虚拟机更接近真实物理机环境。 ## 为什么需要自定义硬件指纹与系统特征伪装? 在进行安全测试、软件兼容性验证或隐私保护时,虚拟机常常因为独特的硬件指纹和系统特征被目标程序识别,导致测试结果不准确或功能受限

gitblog_00100的博客 527

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

jvm专题系列-1、初识jvm

一、JVM的概念 JVM是Java Virtual Machine的简称。意为Java虚拟机 虚拟机 指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统 有哪些虚拟机 VMWare Visual Box JVM VMWare或者Visual Box都是使用软件模拟物理CPU的指令集 JVM使用软件模拟Java字节码的指令集 二、JVM发展历史 1996年 SUN JDK 1.0 Classic VM 纯解释运行,

q287573145的博客 202

C++ 入门笔记(十七):list 入门 —— 为什么 list 不能 sort?

第17课:用大白话讲清 list 的双向链表结构、哨兵头、push_back 四步、迭代器封装、merge 与 splice 的区别,以及 vector 排序为什么常比 list 快。

wo_jack的博客 260
上一篇: classfile的数据结构
下一篇: nj motorola
raphaelxia
博客等级 码龄22年 6粉丝 112原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值