首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏difcareer的技术笔记

    JNI实现源码分析【二 数据结构】正文0x01: 虚拟机中的对象0x02: Dex相关的结构0x03: 实现JNI需要的数据结构0x04: JNI参数传递的数据结构

    (*DestroyJavaVM)(JavaVM*); jint (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*); jint (*DetachCurrentThread)(JavaVM*); jint (*GetEnv)(JavaVM*, void**, jint); ); void (*ReleaseIntArrayElements)(JNIEnv*, jintArray, jint*, jint jint (*UnregisterNatives)(JNIEnv*, jclass); jint (*MonitorEnter)(JNIEnv*, jobject); jint (*MonitorExit)(JNIEnv*, jobject); jint (*GetJavaVM)(JNIEnv*, JavaVM**);

    2K30发布于 2018-08-23
  • 来自专栏历史专栏

    【愚公系列】2022年11月 .NET CORE工具案例-.NET Core执行JavaScript

    文章目录 前言 一、.NET Core执行JavaScript 1.nuget安装Jint 2.Jint的相关操作 2.1 执行表达式 2.2 函数映射 2.3 类赋值 2.4 函数执行 2.5 对象转换 备注 ---- 前言 Jint 是适用于 .NET 的 开源 Javascript 解释器,功能强大,它可以在任何现代 .NET 平台上运行,因为它支持 .NET Standard 2.0 和 .NET 因为 Jint 既不生成任何 .NET 字节码也不使用 DLR,所以在执行比较少的代码时,它的运行效率很快。 在 Nuget 包管理器中搜索并安装 Jint 即可,它没有其他的一些依赖。 Jint官网:https://github.com/sebastienros/jint#readme 一、.NET Core执行JavaScript 本例以.NET 7为例,因为.NET 7今天刚刚正式发布 1.nuget安装Jint 2.Jint的相关操作 2.1 执行表达式 using Jint; var engine = new Jint.Engine(); var result = engine.Execute

    48220编辑于 2022-11-18
  • 来自专栏Android 研究

    Android JNI学习(五)——Demo演示

    如下: jint addNumber(JNIEnv *env,jclass clazz,jint a,jint b); jint subNumber(JNIEnv *env,jclass clazz, jint a,jint b); jint mulNumber(JNIEnv *env,jclass clazz,jint a,jint b); jint divNumber(JNIEnv *env, clazz,jint a,jint b){ return a+b; } jint subNumber(JNIEnv *env,jclass clazz,jint a,jint b){ addNumber(JNIEnv *env,jclass clazz,jint a,jint b); jint subNumber(JNIEnv *env,jclass clazz,jint a,jint clazz,jint a,jint b){ return a-b; } jint mulNumber(JNIEnv *env,jclass clazz,jint a,jint b){

    1.5K20发布于 2018-08-30
  • 来自专栏刘晓杰

    JNI编程demo

    width, jint height, jint threshold) { jint *cbuf = env->GetIntArrayElements(buffer, JNI_FALSE ); if (cbuf == NULL) { return 0; /* exception occurred */ } jint alpha = 0xFF << 24; for (jint i = 0; i < height; i++) { for (jint j = 0; j < width; j++) { // 获得像素的颜色 jint color = cbuf[width * i + j]; jint red = ((color & 0x00FF0000) > > 16); jint green = ((color & 0x0000FF00) >> 8); jint blue = color & 0x000000FF

    47340发布于 2019-02-21
  • 来自专栏Android开发经验分享

    NDK开发(四) :JNI操作Java数组

    length) { //创建一个指定大小的数组 jintArray array = env->NewIntArray(length); jint *elementsP = env ->GetIntArrayElements(array, nullptr); //设置 0-100的随机元素 jint *startP = elementsP; for (; startP < elementsP + length; startP++) { *startP = static_cast<jint>(random() % max); } *arr = env->GetIntArrayElements(arr_, nullptr); //获取数组长度 jint len = env->GetArrayLength(arr_ ); //排序 qsort(arr, len, sizeof(jint), compare); //第三个参数 同步 //0:Java数组进行更新,并且释放C/C++数组

    42920编辑于 2022-12-19
  • 来自专栏字节流动

    深入 Android 系统 - Android 的 JNI

    jint* GetIntArrayElements(jintArray array, jboolean* isCopy){} //...... void ReleaseIntArrayElements(jintArray array, jint* elems,jint mode){} } typedef _JNIEnv JNIEnv; 复制代码 , jint version) { return functions->GetEnv(this, env, version); } jint AttachCurrentThreadAsDaemon jint (*DetachCurrentThread)(JavaVM*); jint (*GetEnv)(JavaVM*, void**, jint); ) { //......省略实现 } static jint GetEnv(JavaVM* vm, void** env, jint version) { //......省略实现

    2.4K40编辑于 2022-09-26
  • 来自专栏爬蜥的学习之旅

    CAS(compareAndSwap)原理

    compareAndSwapInt 核心代码如下 return (jint)(Atomic::cmpxchg(x, addr, e)) == e; compareAndSwapLong 核心代码如下 cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value); static jlong Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { eax, compare_value LOCK_IF_MP(mp) cmpxchg dword ptr [edx], ecx } } linux_x86中,实现如下 inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) {

    1.7K31发布于 2019-07-09
  • 来自专栏韩曙亮的移动开发专栏

    【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )

    jint 数组首元素地址 ; jint 本质就是 int 类型 , GetIntArrayElements 函数作用就是将 jintArray 转为 int* 指针 ; 2 . ; typedef jint jsize; 4 . 使用指针遍历 jint 数组 : jint *intArray ; intArray 是数组首元素地址 intArray + 1 是第 1 个元素的首地址 intArray + k 是第 k 个元素的首地址 数组 , 返回一个指针指向 jint 数组首元素地址 函数原型 : jint* GetIntArrayElements(jintArray array, jboolean* isCopy 释放 jint * 类型的指针变量 /* 函数原型 : void ReleaseIntArrayElements(jintArray array, jint* elems,

    2.9K10编辑于 2023-03-27
  • 来自专栏韩曙亮的移动开发专栏

    【Android 系统开发】Android JNI 之 JNIEnv 解析

    (*DestroyJavaVM)(JavaVM*); /* 创建 JNIEnv , 每个线程创建一个 */ jint (*AttachCurrentThread )(JavaVM*, JNIEnv**, void*); /* 释放本线程的 JNIEnv */ jint (*DetachCurrentThread)(JavaVM*); jint (*GetEnv)(JavaVM*, void**, jint); jint (*AttachCurrentThreadAsDaemon)(JavaVM*, DetachCurrentThread() { return functions->DetachCurrentThread(this); } jint GetEnv(void** env , jint version) { return functions->GetEnv(this, env, version); } jint AttachCurrentThreadAsDaemon

    51831编辑于 2023-03-27
  • 来自专栏JavaEdge

    探究CAS原理(基于JAVA8源码分析)define LOCK_IF_MP(mp) "cmp $0, " #mp "; je 1f; lock; 1: "define LOCK_IF_MP(mp) _

    e, jint x)) UnsafeWrapper("Unsafe_CompareAndSwapInt"); oop p = JNIHandles::resolve(obj); jint addr = (jint *) index_oop_from_field_offset_long(p, offset); return (jint)(Atomic::cmpxchg(x, addr, e)) 如果是Linux的x86,Atomic::cmpxchg方法的实现如下: inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::is_MP(); asm volatile (LOCK_IF_MP(%4) "cmpxchgl %1,(%3)" Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::isMP(

    2.1K60发布于 2018-05-16
  • Java调用C/C++那些事(JNI)

    _1tests_FourOperations_add(JNIEnv *env, jobject obj, jint a, jint b){ return a + b;}JNIEXPORT jint obj, jint a, jint b){ return a * b;}JNIEXPORT jint JNICALL Java_ltd_dujiabao_jni_1tests_FourOperations_div jint: 将strlen的返回值(size_t类型)转换为jint类型。 jobject obj, jint a, jint b) { return subtract(a, b);}JNIEXPORT jint JNICALL Java_ltd_dujiabao_jni jint JNICALL Java_ltd_dujiabao_jni_1tests_FourOperations_div(JNIEnv *env, jobject obj, jint a, jint

    4.1K00编辑于 2025-01-19
  • 来自专栏进击的多媒体开发

    使用libyuv对YUV数据进行缩放,旋转,镜像,裁剪等操作

    jint dst_width, jint dst_height, jint mode, jint degree, width, jint height, jbyteArray dst_, jint dst_width, jint dst_height 缩放的方法 void scaleI420(jbyte *src_i420_data, jint width, jint height, jbyte *dst_i420_data, jint dst_width , jint dst_height, jint mode) { jint src_i420_y_size = width * height; jint src_i420 void rotateI420(jbyte *src_i420_data, jint width, jint height, jbyte *dst_i420_data, jint degree) {

    5.5K20发布于 2020-07-15
  • 来自专栏java架构1+1

    深入浅出CAS

    e, jint x)) UnsafeWrapper("Unsafe_CompareAndSwapInt"); oop p = JNIHandles::resolve(obj); jint* addr = (jint *) index_oop_from_field_offset_long(p, offset); return (jint)(Atomic::cmpxchg(x, addr, e)) 如果是Linux的x86,Atomic::cmpxchg方法的实现如下: inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::is_MP(); __asm__ volatile (LOCK_IF_MP(%4) "cmpxchgl %1,(% Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { int mp = os::isMP(

    66220发布于 2019-06-28
  • 来自专栏网络安全技术点滴分享

    Java调用JNI(C/C++)动态链接库dll流程

    JNICALL Java_com_test_jni_Java2cpp_add (JNIEnv *, jobject, jint num1, jint num2){ jint result } /* * Class: com_test_jni_Java2cpp * Method: sub * Signature: (II)I */ //减法 JNIEXPORT jint JNICALL Java_com_test_jni_Java2cpp_sub (JNIEnv *, jobject, jint num1, jint num2){ jint result JNICALL Java_com_test_jni_Java2cpp_mul (JNIEnv *, jobject, jint num1, jint num2){ jint result JNICALL Java_com_test_jni_Java2cpp_div (JNIEnv *, jobject, jint num1, jint num2){ jint result

    1.3K10编辑于 2025-06-16
  • 来自专栏高并发

    jdk1.8 Unsafe类初探

    , Int);    用DEFINE_GETSETOOP定义了jdk1.4到1.8同名的函数,最终转换为 typedef int jint; extern "C" { jint Unsafe_GetInt *) dst, size / sizeof(jint)); for (uintptr_t off = 0; off < size; off += sizeof(jint)) { *( jboolean Unsafe_CompareAndSwapInt(JNIEnv *env, jobject unsafe, jobject obj, jlong offset, jint e, jint * addr = (jint *) index_oop_from_field_offset_long(p, offset);//获取偏移地址 return (jint)(Atomic::cmpxchg Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) {

    86420编辑于 2022-06-23
  • 来自专栏coolblog.xyz技术专栏

    Java CAS 原理分析

    下面的 jboolean、jlong 和 jint 等是一些类型定义(typedef): * * jni.h * typedef unsigned char jboolean; * 这里的 offset 就是 AtomaicInteger 中的 valueOffset jint* addr = (jint *) index_oop_from_field_offset_long( )exchange_value, (volatile jint*)dest, (jint)compare_value); } Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { // alternative for 如下: inline jint Atomic::cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value) { //

    2.2K220发布于 2018-05-15
  • 来自专栏IT大咖说

    什么是可见性?为什么会出现”不可见“?Java并发

    e, jint x)) UnsafeWrapper("Unsafe_CompareAndSwapInt"); oop p = JNIHandles::resolve(obj); jint* addr = (jint *) index_oop_from_field_offset_long(p, offset); return (jint)(Atomic::cmpxchg(x, addr, ); volatile jint* dest_int = (volatile jint*)(dest_addr - offset); jint cur = *dest_int; jbyte* cmpxchg (jint exchange_value, volatile jint* dest, jint compare_value);// See comment _Atomic_cmpxchg(jint exchange_value, volatile jint* dest, jint compare_value, int mp) { __asm__ volatile

    45710编辑于 2022-06-14
  • 来自专栏云计算与大数据

    虚拟机|OpenJDK架构

    ; } static bool layout_helper_needs_slow_path(jint lh) { assert(lh > (jint)_lh_neutral_value, = 0; } static bool layout_helper_is_instance(jint lh) { return (jint)lh > (jint)_lh_neutral_value ; } static bool layout_helper_is_array(jint lh) { return (jint)lh < (jint)_lh_neutral_value; lh) { // _lh_array_tag_obj_value == (lh >> _lh_array_tag_shift); return (jint)lh < (jint)(_lh_array_tag_type_value << _lh_array_tag_shift); } static int layout_helper_header_size(jint lh) { assert(lh < (jint

    41810编辑于 2022-04-18
  • 来自专栏程序技术知识

    android中Fatal signal 11 (SIGSEGV)的问题

    JNI调用函数为: JNIEXPORT jint JNICALL MainActivity_test(JNIEnv *env, jobject thiz, jintArray Image, jintArray ThresholdFlag) { jint i; LOGE("here"); jint length = (*env)->GetArrayLength(env, Image); jint temp[ length], tempthreshold[length]; jint* arr = (*env)->GetIntArrayElements(env, Image, NULL); jint* threshold

    1.8K10编辑于 2022-05-06
  • 来自专栏AnRFDev

    Android NDK 示例-返回字符串,数组,Java对象;兼容性问题

    JNICALL Java_com_rustfisher_ndkproj_SmartAlgorithm_add (JNIEnv *, jobject, jint, jint); #ifdef __ JNICALL Java_com_rustfisher_ndkproj_SmartAlgorithm_add(JNIEnv *env, jobject obj, jint a, jint b); }; JNICALL Java_com_rustfisher_ndkproj_SmartAlgorithm_add(JNIEnv *env, jobject obj, jint a, jint b) { start, jint length, Xxx elems[]) 将C数组的元素复制到Java数组中。 in_arr_len, jbyteArray target_arr, jint nv21_size, jint y_size, jint yuv_gap) { jbyte *in_ptr

    2.1K20发布于 2021-02-01
领券