日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

JNI數(shù)組操作進(jìn)階:從拷貝機(jī)制到零拷貝與崩潰排查

JNI數(shù)組操作進(jìn)階:從拷貝機(jī)制到零拷貝與崩潰排查 JNI 數(shù)組操作這塊說實話是最容易讓人寫崩的地方。你說 JNI 難吧字符串操作、對象字段訪問這些頂多算繁瑣但數(shù)組一進(jìn)來模式就完全不一樣了——關(guān)鍵不是你會不會調(diào) Get 函數(shù)而是你知不知道每次調(diào)用背后發(fā)生了什么數(shù)據(jù)是被復(fù)制出來的還是拿到指針直接訪問釋放的時候用哪種模式這些決策直接決定程序是穩(wěn)如老狗還是時不時崩一下。這篇指南主要解決四個問題怎么正確讀取和修改 Java 傳入的數(shù)組、怎么優(yōu)雅地創(chuàng)建數(shù)組返回給 Java、怎么用直接緩沖區(qū)減少拷貝、以及那些真正生產(chǎn)環(huán)境里會把程序搞掛的坑。適合已經(jīng)能寫基礎(chǔ) JNI 函數(shù)、但想深入掌握數(shù)組場景的 Android NDK / JNI 開發(fā)者??赐昴隳苤苯佑眠@套思路重構(gòu)手里現(xiàn)有的數(shù)組相關(guān)代碼把內(nèi)存訪問和異常處理理順。1. JNI 數(shù)組操作的整體設(shè)計思路拆解1.1 為什么 JNI 數(shù)組操作是個“坑”先說個實際現(xiàn)象很多人在 Java 層寫了個 int[] 傳給 native 方法然后 Native 代碼里直接 GetIntArrayElements 拿指針悶頭改完再 Release感覺一切正常。但上線之后發(fā)現(xiàn)兩種詭異 Bug——第一數(shù)組內(nèi)容在某些設(shè)備上改了沒生效第二更常見的偶爾直接崩日志里只有一行a JNI error has occurred。大部分問題都出在一個最基礎(chǔ)的概念上JNI 并沒有保證你拿到的數(shù)組元素指針就是 Java 堆里那份數(shù)據(jù)的指針。JNI 規(guī)范說得非常直白返回的指針可能是原始數(shù)據(jù)的直接指針也可能是一份臨時拷貝。這取決于虛擬機(jī)實現(xiàn)、數(shù)組類型、垃圾收集器狀態(tài)。也就是說你以為你在“改原數(shù)組”其實可能改的只是一塊副本如果改完沒有正確 Release這副本的變動根本不會同步回 Java 層。所以整個 JNI 數(shù)組編程的第一原則就是把你拿到的任何指針都當(dāng)成“可能是一份拷貝”來看待。在這個前提下所有關(guān)于鎖定、釋放、提交commit、臨界區(qū) API 的設(shè)計邏輯就都說得通了。1.2 核心 API 體系三組函數(shù)各管一攤JNI 的數(shù)組操作 API 大體可以分成三類我建議你在腦子里建立這個劃分類別代表函數(shù)適用場景元素訪問類GetIntArrayElements / ReleaseIntArrayElements基本類型數(shù)組通用場景區(qū)域讀寫類GetIntArrayRegion / SetIntArrayRegion只操作數(shù)組某一段避免全量拷貝臨界區(qū)類GetPrimitiveArrayCritical / ReleasePrimitiveArrayCritical性能敏感超大數(shù)組能接受短暫停頓對象數(shù)組類GetObjectArrayElement / SetObjectArrayElementString[]、自定義對象數(shù)組直接緩沖區(qū)NewDirectByteBuffer / GetDirectBufferAddress大塊連續(xù)內(nèi)存零拷貝這五組不是說越多越好而是每一類都有不可替代的使用場景。我見過很多代碼全程只用GetIntArrayElements連區(qū)域操作都不知道這在大數(shù)組場景里是真的浪費。打個比方GetElements 就像你把整本書復(fù)印了一遍再讀GetArrayRegion則像只復(fù)印你需要的幾頁——當(dāng)數(shù)組很大而只需要處理其中一小段時性能差距非常直觀。2. 基本類型數(shù)組Get/Release 與臨界區(qū)的正確姿勢2.1 基礎(chǔ)用法GetIntArrayElements 和配套的 Release先看最標(biāo)準(zhǔn)的寫法。以本地方法接收一個 int[]求和并返回為例JNIEXPORT jint JNICALL Java_com_example_NativeBridge_sumArray( JNIEnv *env, jobject thiz, jintArray arr) { if (arr nullptr) { return -1; } jsize len env-GetArrayLength(arr); jboolean isCopy JNI_FALSE; jint *elems env-GetIntArrayElements(arr, isCopy); if (elems nullptr) { // OOM 或虛擬機(jī)上鎖失敗 return -1; } jint sum 0; for (jsize i 0; i len; i) { sum elems[i]; } env-ReleaseIntArrayElements(arr, elems, 0); return sum; }幾點容易被忽略的細(xì)節(jié)返回值判空GetIntArrayElements不是一定成功的當(dāng)內(nèi)存不足或底層鎖失敗時可能返回 null。不判空直接訪問就是崩潰這種崩潰還特別難定位因為錯誤信息可能不會指向你這行。jsize是長度類型它是帶符號的通常 32 位。不要跟 C/C 的 size_t 混用循環(huán)變量和數(shù)組索引都要注意符號匹配。每個 Get 必須配對 Release這個沒有例外。即使是提前 return也要先 Release 再 return否則就是內(nèi)存泄漏或鎖沒釋放。2.2 isCopy 參數(shù)到底在告訴你什么這個參數(shù)是我見過被忽略得最嚴(yán)重的一個。jboolean *isCopy是輸出參數(shù)虛擬機(jī)用它告訴你當(dāng)前拿到的指針到底是原始數(shù)據(jù)還是拷貝JNI_FALSE拿到的是原始內(nèi)存指針修改會直接反映到 Java 數(shù)組。JNI_TRUE拿到的是拷貝你改的是副本必須通過正確的 Release 模式把數(shù)據(jù)寫回去。但這里有個很實用的建議不要在業(yè)務(wù)邏輯里依賴 isCopy 做判斷。因為同一個數(shù)組、同一個虛擬機(jī)兩次調(diào)用可能返回不同的 isCopy 值——它受 GC 狀態(tài)影響。正確做法是無視它統(tǒng)一按“可能是拷貝”處理最后一定用 Release 把數(shù)據(jù)同步回去。2.3 Release 模式的三種選擇Release 函數(shù)的第三個參數(shù) mode 通常被草率地填 0但它其實有三種模式mode 值行為使用場景0將修改寫回 Java 數(shù)組釋放本地指針修改過數(shù)組內(nèi)容后JNI_COMMIT將修改寫回 Java 數(shù)組但不釋放本地指針需要多次修改、寫入一次性釋放JNI_ABORT不寫回修改僅釋放本地指針只讀數(shù)組或放棄修改說實話我日常寫代碼絕大多數(shù)時候就是 mode 0因為它語義最清楚修改寫回指針釋放。JNI_ABORT的典型場景是你拿數(shù)組指針只是為了做一次只讀計算比如統(tǒng)計總和、找最大值這類純讀邏輯根本不需要把內(nèi)容寫回此時用JNI_ABORT可以免掉一次可能的回寫拷貝。一個經(jīng)典的反面案例我在代碼審查里見過有人讀取數(shù)組算平均值Release 用的卻是 0。如果 isCopy 恰好是 JNI_TRUE那么 0 模式會把一份被改為原封不動的副本回寫一次——這就是無意義的一整塊內(nèi)存拷貝。改成 JNI_ABORT 后性能在那段代碼上能快不少。JNI_COMMIT則適合頻繁修改的場景。比如你要在循環(huán)里多次更新數(shù)組內(nèi)容又不想每次更新都 Get/Release 一遍可以這樣jint *elems env-GetIntArrayElements(arr, nullptr); for (int iter 0; iter 10; iter) { // 修改 elems 內(nèi)容 env-ReleaseIntArrayElements(arr, elems, JNI_COMMIT); // 寫回但保留指針 } // 最終釋放 env-ReleaseIntArrayElements(arr, elems, 0);當(dāng)然這個場景有更優(yōu)的替代方案比如區(qū)域操作但 JNI_COMMIT 在兼容老代碼時很實用。2.4 GetPrimitiveArrayCritical臨界區(qū)的性能利刃如果數(shù)組非常大比如幾 MB 甚至幾十 MB每次 Get 都拷貝一次會很難受。JNI 提供了GetPrimitiveArrayCritical它有兩個目標(biāo)一是盡可能返回直接指針零拷貝二是讓 GC 在臨界區(qū)內(nèi)暫停對象移動。JNIEXPORT jlong JNICALL Java_com_example_NativeBridge_sumLongArray( JNIEnv *env, jobject thiz, jlongArray arr) { jsize len env-GetArrayLength(arr); jboolean isCopy JNI_FALSE; jlong *elems env-GetPrimitiveArrayCritical(arr, isCopy); if (elems nullptr) return 0; jlong sum 0; for (jsize i 0; i len; i) sum elems[i]; env-ReleasePrimitiveArrayCritical(arr, elems, JNI_ABORT); return sum; }但這個名字里的 Critical 不是白叫的它對應(yīng)的使用約束極其嚴(yán)格在 Get 和 Release 之間不能調(diào)用任何可能阻塞的 JNI 函數(shù)——不能分配對象、不能調(diào)用 Java 方法、不能做文件 I/O、不能加鎖等待。這期間虛擬機(jī)為了復(fù)用內(nèi)存可能讓持有直接指針的調(diào)用線程住進(jìn)“GC 臨界區(qū)”如果你在里面 sleep 或調(diào) Java輕則死鎖重則崩。必須是配對使用不能跟 GetIntArrayElements 混用一個指針。只支持基本類型數(shù)組不支持對象數(shù)組。實踐經(jīng)驗這個 API 只適合“獲取指針 → 緊湊地處理 → 釋放”這種模式處理邏輯必須短小精悍。如果處理邏輯里面有日志輸出、回調(diào) Java、內(nèi)存分配那就老老實實用 GetIntArrayElements。3. 對象數(shù)組與二維數(shù)組的處理3.1 GetObjectArrayElement逐一持有對象數(shù)組比如 String[]沒有 GetElements 這種一次性拿全部指針的 API因為對象數(shù)組的元素本身是引用C 側(cè)無法直接用連續(xù)內(nèi)存表示。你只能逐個獲取。JNIEXPORT jstring JNICALL Java_com_example_NativeBridge_getFirstString( JNIEnv *env, jobject thiz, jobjectArray arr) { jsize len env-GetArrayLength(arr); if (len 1) return nullptr; jobject first env-GetObjectArrayElement(arr, 0); if (first nullptr) { // 元素可能為 null或下標(biāo)越界 if (env-ExceptionCheck()) env-ExceptionClear(); return nullptr; } return static_castjstring(first); // 謹(jǐn)慎需確認(rèn)元素確實是 String }這里有兩個非常容易踩的雷第一元素類型檢查。如果 Java 層傳進(jìn)來的 array 是 Object[]你在 C 側(cè)強(qiáng)轉(zhuǎn)成 jstring 然后傳給需要 jstring 的函數(shù)在多數(shù)實現(xiàn)上不會立刻崩但行為未定義。更穩(wěn)妥的方式是用env-IsInstanceOf檢查類型或者直接把數(shù)組類型定死在 Java 層方法簽名里就用 String[]。第二局部引用溢出。在循環(huán)里 GetObjectArrayElement 獲取大量對象每個得到的 jobject 都是局部引用。局部引用表在 JNI 里的容量有限舊版本默認(rèn)只支持幾百個循環(huán)里聚集不釋放函數(shù)返回時會檢測到局部引用溢出。典型的如for (int i 0; i len; i) { jobject element env-GetObjectArrayElement(arr, i); // 處理 element env-DeleteLocalRef(element); // 必須手動釋放 }至于為什么 GetObjectArrayElement 的索引越界會拋 ArrayIndexOutOfBoundsException而 GetArrayLength 不拋這得從 JNI 層對異常的處理說起。JNI 中絕大多數(shù)的 JNI 函數(shù)在出錯后不會取消本地代碼執(zhí)行而是讓異常掛起。如果掛起異常后你繼續(xù)調(diào)用其他 JNI 函數(shù)行為是未定義的。所以每當(dāng)涉及 JNI 調(diào)用都要有“異??赡苷趻炱稹钡木X。3.2 二維數(shù)組的“鋸齒”問題Java 的 int[][] 在 JNI 里其實是 jobjectArray每個元素又是一個 jintArray。很多新人以為可以直接拿到一個 int** 往下遍歷這是不可能的。JNIEXPORT jint JNICALL Java_com_example_NativeBridge_sum2DArray( JNIEnv *env, jobject thiz, jobjectArray outer) { jsize rows env-GetArrayLength(outer); jint total 0; for (jsize i 0; i rows; i) { jintArray inner static_castjintArray( env-GetObjectArrayElement(outer, i)); if (inner nullptr) continue; // 該行可能為 null jint *innerElems env-GetIntArrayElements(inner, nullptr); jsize cols env-GetArrayLength(inner); for (jsize j 0; j cols; j) { total innerElems[j]; } env-ReleaseIntArrayElements(inner, innerElems, JNI_ABORT); env-DeleteLocalRef(inner); } return total; }有一點要額外提醒二維數(shù)組每一行的長度完全可能不一樣——這就是 Java 的“鋸齒數(shù)組”特性。你必須在遍歷時對每一行單獨取 GetArrayLength不能假設(shè)每個 inner 都是相同大小。這也是二維數(shù)組性能優(yōu)化的難點外層是對象數(shù)組內(nèi)層才是基本類型數(shù)組如果你想一次性做批處理基本不可能只能一層層展開。如果性能真的很敏感建議不要用 jobjectArray 傳遞矩陣改用一維 int[] 加寬度高度參數(shù)C 側(cè)按行偏移計算。實戰(zhàn)中很多圖像處理庫都這樣設(shè)計接口不是為了省事而是避免每行一個對象引用的開銷和 GC 壓力。4. 直接緩沖區(qū)數(shù)組零拷貝的正確打開方式4.1 NewDirectByteBuffer從 Native 分配大塊內(nèi)存除了從 Java 數(shù)組復(fù)制數(shù)據(jù)JNI 還支持直接字節(jié)緩沖區(qū)DirectByteBuffer模式。這種模式下你可以在 native 側(cè)分配一塊內(nèi)存封裝成 ByteBuffer 返回給 Java或者接收 Java 層創(chuàng)建的 ByteBuffer直接拿到其內(nèi)存地址完全繞開拷貝。native 側(cè)分配并返回JNIEXPORT jobject JNICALL Java_com_example_NativeBridge_allocBuffer( JNIEnv *env, jobject thiz, jint size) { void *buf malloc(size); if (buf nullptr) return nullptr; // capacity 參數(shù)必須是正數(shù)long 類型的 address 在這里不傳而是用 buf return env-NewDirectByteBuffer(buf, size); }Java 側(cè)ByteBuffer buffer NativeBridge.allocBuffer(1024 * 1024);拿到這個 buffer 后的地址native 側(cè)要訪問它時用GetDirectBufferAddressJNIEXPORT jlong JNICALL Java_com_example_NativeBridge_bufferAddress( JNIEnv *env, jobject thiz, jobject buffer) { return reinterpret_castjlong(env-GetDirectBufferAddress(buffer)); }要求注意的地方NewDirectByteBuffer分配后這塊內(nèi)存的釋放由 native 側(cè)負(fù)責(zé)必須記得在某個時機(jī) free否則就是內(nèi)存泄漏。這跟普通 JNI 數(shù)組的自動回收完全不同。不是所有 JVM 都支持直接緩沖區(qū)Android 上支持但 API level 9 以下不支持現(xiàn)在基本不用考慮老版本。如果傳入的 jobject 不是 DirectByteBuffer 實例GetDirectBufferAddress返回 NULL。所以調(diào)用前先env-IsInstanceOf(buffer, clsDirectByteBuffer)判斷一下。直接緩沖區(qū)的使用場景很清晰音頻數(shù)據(jù)、圖像像素、協(xié)議包這類需要高頻讀寫的連續(xù)大塊數(shù)據(jù)用它就對了。Java 層持有一個ByteBuffernative 層直接內(nèi)存地址讀寫零拷貝性能最接近純 C 的水平。4.2 直接緩沖區(qū)與數(shù)組的配合什么時候不用它但直接緩沖區(qū)不適合所有場景。比如你需要頻繁隨機(jī)訪問小數(shù)組或者讀寫模式很離散那直接緩沖區(qū)的地址運算和 byte 級的位操作反而容易寫錯不如普通 JNI 數(shù)組方便。我一般這樣取舍數(shù)據(jù)量小64KB且讀寫模式簡單用 GetIntArrayElements 或 GetArrayRegion。數(shù)據(jù)量中等64KB ~ 幾 MB且處理邏輯不阻塞用 GetPrimitiveArrayCritical。數(shù)據(jù)量大、跨多次 JNI 調(diào)用、希望零拷貝直接用 DirectByteBuffer。注意不管選擇哪種方式JNI 數(shù)組操作中數(shù)據(jù)一致性始終是首要問題。你從 Java 拿一個數(shù)組在 native 改了必須確保 Java 層能看到改動或者明確知道自己看不到。在 Get/Release 的語境下Release 時用模式 0 或 JNI_COMMIT 就能保證寫回。在 DirectByteBuffer 語境下天然零拷貝但要注意多線程并發(fā)訪問同一塊緩沖區(qū)的同步問題JNI 不會幫你做任何內(nèi)存屏障。5. 數(shù)組的創(chuàng)建與區(qū)域讀寫5.1 NewIntArray 與 SetIntArrayRegion從 Native 構(gòu)造數(shù)組native 代碼不只是消費 Java 傳進(jìn)來的數(shù)組還經(jīng)常需要創(chuàng)建數(shù)組返回出去。最常用的一套組合是NewIntArray配上SetIntArrayRegionJNIEXPORT jintArray JNICALL Java_com_example_NativeBridge_generateIntArray( JNIEnv *env, jobject thiz, jint size) { jintArray result env-NewIntArray(size); if (result nullptr) { // 拋 OutOfMemoryError return nullptr; } std::vectorjint tmp(size); for (jint i 0; i size; i) { tmp[i] i * i; } env-SetIntArrayRegion(result, 0, size, tmp.data()); return result; }用SetIntArrayRegion而不是GetIntArrayElements寫數(shù)據(jù)最大的好處是你不需要請求整塊內(nèi)存的指針可以分多次往不同位置寫也避免了每次只改一個元素時獲取指針的開銷。底層實現(xiàn)是 memcpy速度快。NewXxxArray回來的數(shù)組初始值是全零而不是未定義內(nèi)容這一點值得確認(rèn)。如果業(yè)務(wù)邏輯依賴“先清零”的語義可以省掉一個 memset。5.2 GetIntArrayRegion局部讀的優(yōu)雅方案與 Set 對應(yīng)的是GetIntArrayRegion它專門用于只讀取數(shù)組的一部分。用法JNIEXPORT jint JNICALL Java_com_example_NativeBridge_readRange( JNIEnv *env, jobject thiz, jintArray arr, jsize start, jsize len) { std::vectorjint buf(len); env-GetIntArrayRegion(arr, start, len, buf.data()); if (env-ExceptionCheck()) { // 通常下標(biāo)越界 env-ExceptionDescribe(); env-ExceptionClear(); return -1; } jint maxVal buf[0]; for (jsize i 1; i len; i) maxVal std::max(maxVal, buf[i]); return maxVal; }這段代碼有個隱藏問題GetIntArrayRegion在越界時會拋出ArrayIndexOutOfBoundsExceptionJNI 函數(shù)掛起異常后返回。很多新手繼續(xù)往下走此時 buf 里的數(shù)據(jù)是未定義的可能算出一個錯的極值如果不處理異常直接 returnJava 層會收到這個掛起異常——在某些場景下會導(dǎo)致整個進(jìn)程異常。所以區(qū)域操作后一定要檢查ExceptionCheck。對比一下兩個 API 的定位GetArrayRegion適合只讀指定區(qū)間不需要先拿到整個數(shù)組的指針代碼更安全不存在“指針懸浮”的問題。GetArrayElements適合需要隨機(jī)反復(fù)訪問整個數(shù)組的場景一次拿指針多次訪問。釋放時寫回或放棄由你決定。5.3 用數(shù)組方法簽名時的一個細(xì)節(jié)如果你在 native 方法簽名里聲明jintArrayJava 側(cè)調(diào)用時傳的是int[]這個沒問題。但如果你想返回一個由 native 創(chuàng)建的數(shù)組別忘記返回類型必須匹配。我見過有人返回jobject然后 Java 層類型寫int[]編譯符號可以過但運行時是類型不匹配直接拋ArrayStoreException或更惡心的a JNI error has occurred。關(guān)于這個錯誤其實值得單獨展開。它在不同環(huán)境下的具體表現(xiàn)差異很大在 Android 上經(jīng)常是日志art::JNI相關(guān)的一個崩潰棧在桌面 JVM 上則是A fatal error has been detected by the Java Runtime Environment暗示是 native 代碼 bug。多數(shù)情況下不是數(shù)組類型匹配問題而是別的更深層問題下一部分詳細(xì)說。6. 常見問題排查與避坑實錄6.1error: a JNI error has occurred, please check your installation and try again的排查思路這個報錯是 JNI 新手最容易搜到的但它往往并不是指“JNI 環(huán)境裝錯了”。在桌面 JVM 上這個錯誤通常意味著native 方法名解析失敗也就是 Java 層聲明的native方法和 C 層函數(shù)對不上符號。native 函數(shù)拋出異常后沒處理JNI 調(diào)用鏈返回后直擊 JVM。更隱蔽的在數(shù)組操作中某個 JNI 函數(shù)調(diào)用后沒有檢查異常比如GetIntArrayRegion越界后異常掛起隨后又調(diào)用了其他 JNI 函數(shù)行為未定義——有的虛擬機(jī)干脆直接終止進(jìn)程報這個通用錯誤。排查步驟我建議按這個順序來先看完整堆棧別只看第一行。確認(rèn) native 庫加載路徑正確System.loadLibrary的庫名和實際 so/dll 名稱是否匹配。在 C 側(cè)每個 JNI 調(diào)用后加if (env-ExceptionCheck()) env-ExceptionDescribe();臨時定位異常源頭。檢查所有 Get 是否有對應(yīng)的 Release所有函數(shù)返回值是否判空。如果是數(shù)組操作后崩重點檢查索引是否越界以及GetArrayLength是否對空數(shù)組調(diào)用。6.2 GetArrayLength 與空數(shù)組的邊界GetArrayLength對 null 數(shù)組調(diào)用會返回 0 嗎不會。如果 arr 為 null調(diào)用GetArrayLength會拋出空指針異常。所以在 JNI 函數(shù)入口處先判空永遠(yuǎn)是第一件事。這一點在 C/C 側(cè)尤其容易被忽略因為 C 里傳 nullptr 很常見而 Java 側(cè)可能因為一些框架自動傳空數(shù)組過來。防御性編程在這里不是可選項而是必選項。另外要小心GetArrayLength返回的長度類型是jsize它是 int 類型。如果你把它賦值給size_t在 64 位平臺如果長度是負(fù)數(shù)不太可能但類型是帶符號的會發(fā)生符號擴(kuò)展的問題。穩(wěn)妥一點統(tǒng)一用jsize或用jsize len env-GetArrayLength(arr);。6.3 在 Clion 中配置 JNI 環(huán)境的幾個關(guān)鍵點CLion 是常用的 JNI 開發(fā) IDE但默認(rèn)它對 JNI 頭文件的支持并不好。網(wǎng)上搜到這個熱詞說明踩坑的人不少。簡易配置步驟安裝 JDK把JAVA_HOME環(huán)境變量設(shè)置好。在 CMakeLists.txt 中添加頭文件路徑和庫路徑find_package(JNI REQUIRED) include_directories(${JNI_INCLUDE_DIRS})或者手動指定include_directories( $ENV{JAVA_HOME}/include $ENV{JAVA_HOME}/include/darwin # macOS $ENV{JAVA_HOME}/include/linux # Linux $ENV{JAVA_HOME}/include/win32 # Windows )生成頭文件的命令一般是javac -h ./jnih NativeBridge.java這個命令在 JDK 8 之后是替代javah的標(biāo)準(zhǔn)方式。在 CLion 里如果你打開項目時頭文件爆紅確認(rèn)是 JDK 的 include 目錄沒加對。Linux 和 macOS 的 jni_md.h 路徑不同這是最常見的配置錯誤。6.4 數(shù)組相關(guān) JNI 異常速查表問題現(xiàn)象可能原因解決方案數(shù)組內(nèi)容修改后 Java 層沒變化Release 使用了 JNI_ABORT或忘記 Release改用 mode 0 / JNI_COMMIT修改數(shù)組時崩潰下標(biāo)越界嚴(yán)格用 GetArrayLength 約束循環(huán)尤其注意二維數(shù)組內(nèi)層長度大量循環(huán)處理對象數(shù)組后崩潰局部引用表溢出循環(huán)內(nèi)手動 DeleteLocalRefGetArrayRegion 后數(shù)據(jù)隨機(jī)越界后未處理異常調(diào)用后檢查 ExceptionCheckNewDirectByteBuffer 返回對象無法 get 地址不是 DirectByteBuffer或內(nèi)存申請失敗檢查類型判空桌面 JVM 報 a JNI error方法簽名不匹配 / 異常掛起核對 javah -h 生成的簽名檢查異常處理6.5 幾條實操心得最后分享幾個我自己寫 JNI 數(shù)組操作的固定習(xí)慣。第一能不拿指針就不拿指針。很多數(shù)組讀取用 GetArrayRegion 就夠了不要總是 GetArrayElements。指針拿得越少生命周期管理越簡單出錯可能性越低。代碼可讀性也更高。第二把寫入數(shù)據(jù)和釋放分開思考。釋放的 mode 取決于你是否修改了內(nèi)容而不是取決于你當(dāng)時的心情。修改了就用 0只讀就用 JNI_ABORT。這是最簡單的判斷標(biāo)準(zhǔn)。第三對象數(shù)組的局部引用一定是用完即刪。尤其在 Android 這樣的系統(tǒng)上JNI 局部引用表管理不好不是崩潰就是 GC 壓力大。我見過一個圖像標(biāo)注項目循環(huán)里讀了 2000 個 String 沒 DeleteLocalRef頻繁調(diào)用后 CPU 占用和內(nèi)存直接飆升最后就是逐行排查引用泄漏才定位到。第四性能調(diào)優(yōu)時先用 region 統(tǒng)計別急著上 Critical。先明確數(shù)組到底多大、每次操作頻率多高再用GetPrimitiveArrayCritical。這 API 屬于“高手向”一旦誤用會出現(xiàn)從死鎖到隨機(jī)崩潰等致命問題。第五JNI 數(shù)組操作的同步問題。默認(rèn)情況下Java 層對該數(shù)組的并發(fā)修改和 native 層對它的操作沒有同步保護(hù)。如果多線程同時操作同一個 JNI 數(shù)組最壞情況下是數(shù)據(jù)競態(tài)甚至虛擬機(jī)崩潰。建議在 Java 層通過 synchronized 或讓 native 層自己用 mutex雙保險。根據(jù)我這些年踩坑的經(jīng)驗JNI 數(shù)組操作最大的趨勢就是“盡可能減少跨邊界的數(shù)據(jù)搬運”。Java 與 C 之間本來就是一堵墻數(shù)組是數(shù)據(jù)量最大的跨界形式之一。理解拷貝機(jī)制、掌握臨界區(qū)和直接緩沖區(qū)、警惕局部引用和異常掛起——這四件事做好了數(shù)組這塊基本就穩(wěn)了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
天天日少妇逼AV| 欧美后入| 国产性感骚丝袜在线| 成人免费看吃奶视频网站| 好色美女九七第一页| 极品久久久久久久久久久久久久| 国产精品久久久视频| AV污污污污| 快灬快灬 一下爽蜜桃在线观看| 激情终合网| 天天日夜夜爽| 97色色色| 国产精品久久久三级无码| 亚瑟国产精品久久无码| 韩三级a视频在线观看| 99热在线观看| 91bbbbbb| 伊人网高清| 亚洲日韩97| 91N综合网在线| 亚洲日本男人天堂网| 天天爽天天操| 丁香五月天激情综合| 无码精品蜜桃一区二区三区ww| 日韩成人私密一级精品av| 亚洲少妇自拍中文字幕懂色| 9997se| 亚洲AV不卡在线观看尤物| 色色99| 五月婷婷综合激情| 四虎影库国产精品免费| 丰满搜索结果 -第18页- 久久高清无码| 天天摸,夜夜摸| 不卡啪啪视频| 五月色网| 亚洲第一二区另类图| 密臀在线免费观看| 欧美韩国你懂得在线 | 人人综合| 五月天综合网| 一区二区乱码福利| 丰满岳乱妇一区二区三区| a片自拍直播视频| 综合色一区三区二区| 国产白丝网站| 久久久97| 黄色区免费观看中文字幕| 一区不卡在线观看av| 色天使亚洲综合在线观看| av亚欧| 人人操人人舒服| 四虎午夜影院| 操逼不卡中文字幕| 欧美狠狠弄| 国产有码一区| 超碰午夜| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 97在线观看| 亚州综合| 视频黄色国产一级| 97色婷| 蜜臀少妇一区二区| 亚洲第一页欧美| 亚洲不卡av在线| 欧美一二三区四五区| 天天射夜夜| 三级色影综合网| 91操操操操| 乱伦AVxx| 丝袜AV一二三区| 久久精9| 五月天AV资源| 国产精品干干干| 人人爱人人操人人性| 色婷视频| 久久久久久国产手机AV| 98一区二区精品| 天天综合欧美综合| 久久av无码| 国产在线精品偷| 嗯嗯嗯,草死我| 久久久久久99999国产精品| 麻豆精品.欧美精品.日韩精品.| 欧美激情一区| 久久伊人大香蕉| 成人精品水蜜桃久久久久久久| 亚洲欧美国产精品久久久久久久| 亚州熟女乱伦| 五月天激情婷婷| 大干人妻| 老司机射| 亚洲欧美国产中文字幕| 一中国女人毛片水真多| 9l视频自拍9l九色成人| 超碰久草| 亚洲中文日韩欧美大香蕉视频| 97久久精品亚洲| 神马久久久久久久久| 亚洲成人黄色在线观看| 熟女精品一区二区三区| 九久久精| 欧美一级做a爰片免费视频| 亚洲日韩av一区二区三区百合| 久久久九九| 91香蕉视频在线观看免费| 日韩人妻精品久久久久| 中国熟女老妇仑乱一区二区三区| 91久久久久免| 97国产超碰| 免费黄色片子| 91人人| 99久久婷婷| 天天躁狠狠躁av| 小视频玖玖| 91精品人妻一区二区三区蜜桃臀| 亚洲无码国产探花在线观看| 伊人国产视频| 精品人妻av在线播放| 美美91成人国产精品欧美精品久久久久久久| 男人久久天堂| 成人熟女视频一区二区三区| 免费亚洲黄色视频在线观看| 2026国产精品视频| 国模吧 一区二区三区| 情色五月天就去干| 日本色婷婷| 婷婷性网| 大香蕉在线视频15| 在线免费观看日韩一区| 台湾佬中文娱乐网久久久久久久久久com | 狠狠婷婷亚洲中文综合久久| 欧美亚综合色图| 免费1级a做爰片观看| 成人热久久精品| 国产亚洲精品久久久久小| 欧美性爱一区| 国产a级午夜毛片| 色偷偷综合91久久噜噜| 欧美日韩国产中文超碰| 亚洲欧洲日本精品中文a∨| 亚洲人妻中文在线视频| 精品一区二区麻豆| 在免费jIzzjIzz在线视频| 色99久草| 熟女欧美日韩综合婷婷| 一区二区视频在线播放| 久久精品久久久久久久久| 97草草| 五月激情啪啪| 在线无码视频| 亚洲不雅视频1区二区| 九九精品美女高溯喷水| 久久亚洲AV成人精品无码| 欧美偷| 99.色网| 亚洲日韩美国人妻| 日日夜夜摸| 欧美aⅴ99久久黑人专区| 日韩欧美国产高清视频| 97香蕉网| 欧美综合综合| 色欲色香天天天综合网www-亚洲综合国| 日韩精品国产一区二区| 97在线视频免费看| 精品国产乱码久久久兰草影视| 欧美做爰无码A片视频| 酒色综合网| 欧洲精品一二三在线| 26uuu欧美| 精品无码久久久久久国产浪潮| 九九九九九九精品| 婷婷九月丁香| 一二三卡欧美日韩人妻免费精品| 国产盗摄美女如厕大神作品在线观看| 成人午夜无码视频| 婷婷五月天社区| 日韩卡一卡二卡三在线| 思思热一热婷婷热一热| 尤物网站91| 国产激情在线| 国产高清午夜成人在线观看| 天天操妹子| 亚洲精品 欧美精品| 精品.99999| 五月婷婷AV| 久久激情亚洲精品无码?V | 一本大道综合伊人精品热热| 亚洲情色第一页| 91人妻尻屄视频| 秋霞一级A片黄色视频| 91久久青青草原精品| 久久99久久99精品天美传媒棢·纸:. | 超碰是碰在线观看| 白 大 人妻 区 在线| 欧美性天天影视| 中文字幕成人| 人妻熟女一区在| 午夜福利成人免费视频| 精品久热| 国产免费一区二区三区最新不卡| 色播综合| 五月天婷婷欧美三区| 亚洲av无码成人精品国产| 国产精品色片一区二区| 强奸a片网| 国产视频不卡在线观看| 自偷自拍的亚洲视频| 日va操| 啪啪啪东京| 家庭乱伦国产精品| 亚洲欧洲精品视频发布| 黄片www.| 亚洲天堂另类| 99精品无码| 九月伊人中文字幕| 日本操逼视频在线| 家庭乱伦网站国产| 亚洲AV无码国产精品久久久久| 国产激情av女片自拍| 操逼www.| 天天添天天干电影| 日韩人妻无码精品系列| 国产成人五月天丁香花| av网站免费看| 亚洲免费成人精品电影| 天天插天天操| 强奸少妇AV导航网| 欧美天天综合站| 男人的天堂kva| 资源新线在线天堂| 日本一区二区三区午夜观看| 久久综合激情| 啊啊好多水| 亚洲性综合| 婷婷午夜清品久久久久久久性色视频观| 啊啊啊爽爽| 26uuu国产亚洲综合| 欧 美 自 拍 偷 拍| 国产午夜激片Av毛片不卡| 五月丁香婷婷综合网| 97干日韩| 97国产精品久久久久| 男人的天堂com| 影音先锋每日最新资源在线观看 | 91色综合激情| 久久99久久99精品天美传媒棢·纸:. | 欧美 亚洲 第一页 | 国内精品久久人妻性色av| 久久亚洲精品成人av| 啊啊啊啊嗯嗯嗯用力好爽| 中文字幕片| 天天在线91| 欧美组图日韩亚洲中文字幕| 艹少妇网站| 亚洲春色激情小说| 97日韩欧美亚洲| 高清国产无码av| 国产成人自拍视频在线| 91欧美性| 色网在线视频观看免费| 熟妇亚洲一区二区三区| 97在线免费看视频| 国产亚洲精品第一最新| 亚洲天堂情色| 密乳无码| 中文字幕乱碼在线| 国产精品白丝在线播放| 欧美黄页在线| 久热热| 家庭乱伦网站国产| 性高潮久久久| 在线看片国产精品每日更新| 天天舔天天日天天射| 男人的天堂 在线一区| 韩国午夜理伦三级好看| 五月开心久久AV官网| 久久久久国产精品久久久| 日本网色| 久草电影网| 欧美人妻精品一区二区| 91天天c| av激情亚洲五月天| www鬼畜国产男人的天堂| 天天拍夜夜| 欧美在线观看综合国产| 超碰在线1234区| 少妇无码av专区线| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 亚洲欧美国产中文视频| 九九无码视频| 国产欧美成人第一页在线观看 | 成人草草视频| 亚洲人码13| 精品久久久久久AV无码| 天天综合网1| 免费一级性爱久久| 96国产污污污丝袜| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 欧美黄色图片| 免费一级a毛片久久久久久鸭绿欲 国产精品亚洲天堂网址 | 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 美女裸体麻豆天美蜜桃91| 大学生美女口爆| 国产精品 亚洲情色| 百度百度日本操逼| 久久有碼| 中文字幕性感少妇av| 淫穴高潮色图| 97蜜桃综合| 欧美性爱日韩高清| 粉嫩av一区二区三区四季| 亚洲熟女中文字幕在线| 一区二区三区视频| 九九国产| 激情视频网址| 91精品久久久久五月天精品| 精品美女少妇一区二区| 国产精品熟女AV中文字幕在线播放| 在线视频亚洲无码| 中文日韩欧美熟| a网站免费观看| 天天躁日日躁狠狠躁| 熟女色图在线| 爽 好舒服 无码刺激久久| 久久婷婷成人综合色怡春院| 久久亚洲天天做| 在线一道啪| 蜜臀久久99精品久久久久久成人小说 | 在线观看视频91| 日韩九区| 亚洲日韩美国人妻| 91狠狠综| 日韩无码第3页| 骚乳在线| 丁香五月激情婷婷| 精品无码久久久久久国产浪潮| 天堂精品一区| 九九热五区| 亚洲欧洲网站免费观看| 亚洲春色一区二区三区| 欧美96在线|欧| 91殴美大片| 青青草丝袜在线视频| 亚洲中文字幕在现观看| 91熟女网| 亚洲极品| 嗯嗯啊啊好疼| 精品久久在线区一区| 殴美大黄片| 日日操免费视频| 夜夜夜夜久久久久| 久久偷偷色综合蜜桃| 国产最新AV| 中文字幕一区日韩精| 日韩免费av片高清无码| 久久久久夜夜夜夜| 啊啊啊啊无码| 久久国产精品视频| 动漫av中文| 800zy一区二区| 丁香六月啪啪| 91粉嫩萝控精品福利网站_精品影音先锋国 | 色就色综合| 97精品国产| 午夜美女诱惑电源网| 日韩精品国模| 97久久精品不卡| 亚洲一二三| 国产专区路线| 色九月综合| 亚洲AO在线| 美女在线H91| 日本免费中文一区二区三区四区| www.av在线观看| 国产乱码精品一区二区三区四川| 国产一区二区三区视频在线看| 东北少妇高潮zzzz| 曰韩人妻中文字幕在线| 日熟女| 亚洲国产欧美一区二区潘金莲| 亚洲中文字幕在现观看| 91性高朝久久久久久久久| 国产在线视频午夜精华在| 蜜臀99久久精品久久久久| 久久精品超碰| 91人妻在线视频| 亚洲欧美小说| 色呦呦国产精品免费看| 国产黄片精品在线| 国模精品娜娜一二三区| 亚洲色啪| 啊啊啊啊视频免费| 97操在线| 久久久999国产精品| 啊啊啊啊好疼| 亚洲无码偷拍| 日韩av不卡在线看| 国产99 中文字幕日韩小视频| 久久久久国产一区二| www.狠狠| 男人的天堂.com| 97精品国产手机| 成年人黄色小视频网站| 精品黑人一区二区| 日韩欧美成人大香蕉| 啊啊啊啊操死我了| 综合亚州欧美| 免费岛国一级片| 精品人妻中文字幕4399| www.五月天| 亚洲91亚洲| 超碰伊人在线| 亚洲综合欧美| av日韩在线观看电影| 激情综合五月婷婷| 搞中出视频在线观看| 亚洲丰满很很操| 97精品免费视频网站| 日韩无码三级影院| 国产福利影视| 一区二区三区四区久久视1| 天天干1区2区在线| 麻豆视频国产一区二区| 亚洲精品视频在线播放| 99色骚| 大香蕉久久| 草草影院最新网址| 德国一二三不卡| 91热色| 日本潮催一卡操| 日韩女模中文造逼| 媚薬在线视频麻豆| 亚洲无码com| 精品久久人妻成人网| 天天综合欧美综合| 欧美亚洲图片| 丁香五月天啪啪| 91精品婷婷国产综合久久竹菊| 精品无码少妇| 精品国产一级久久| 久久人妻无码毛片A片麻豆| 91 丝袜在线播放| 屌逼麻豆| 中文字幕免费在线观看| 国产精品嫩草影院免费| 99re9这里只有精品| 人妻91少妇| 九九九九欧美| 国产成年女人免费视频播放a| 久悠悠av| 久久高潮妇女视频| 激情AV| 加勒比色99999| 九九久久一区二区伦理| 久久女同性恋一二区| 亚洲电影中字一区二区| 国产不卡精品91| 好吊色青靑草| 口爆综合网| K8久久久久| 国内毛片免费h片在线| 久久色AV线| 国产精品欧美日韩久久| 久久久久久久久久久久九| 精品人妻一区二区视频| 国产美女精品| 国产毛片久久久久久久| 亚洲性综合| 中国东北熟女老太婆内谢| 欧美亚洲日韩16色| 成人亚欧免费视频| 亚洲欧美内射| www.婷婷六月天| 欧美色乱| 97 超碰 人人做 人人爱| 强奸乱伦免费网站| 大香蕉之青青草原| 99热在线观看| 大香蕉人妻久久| 久久久久久亚洲精品不卡人乳| 欧美资源| 嗯嗯啊好大| 日韩成人大片一区二区| 久久久久久久91| 高清不卡一二三区视频......| 欧美一二三级精品在线| 在线播放中文字幕| 五月天激情婷婷| 永久免费观看的毛片的网站| 免费看污网址| 五月婷久久| 久久专区| 四虎在线免费视频| 99无码精品| 免费家庭乱伦视频| 综合色久欲| 夜夜爽77777| 国产精品人妻一区二区| 后入式999| 色色色色色色色色色色色色色色综合| 国产 亚洲 一二三四| 91激情综合| 一本大道青青| 亚洲天堂另类小说男人| 在线强奷到舒服的无码视频 | 色999人与兽| 一级片在线观看高清无码| 91亚.色| 麻豆AV一区二区| 久久精品店| 91综合色噜噜| 日韩电影中文字幕| 午夜啊啊啊| 中文字幕一区二区三区视频播放| 国产精品国产亚洲区艳妇糸列| 97超碰中文| 乱日视频| 99热精品在线观看| 亚洲天堂人妻熟妇视频| 国产精品久久久啊| 激情小说激情视频| 亚洲性图91| 欧美 中文字幕 一区| www网站黄| 美国精品国产精品| 色牛aV| 啊啊啊轻点在线观看| 日韩成人午夜精品久久高潮| 殴美牲| 久久美女福利是上海美女| 九九精品99| 中文乱码字字幕在线第5页| 草B在线| 性爱欧美五月| 人妻无码后入| 色综合潮| 偷拍网站久久男女男| 色色婷婷五月天| 最新日产中文在线麻豆| 天天搞在线综合网| 26uuu性| 日韩欧洲操屄视频| www.99色| 午夜啪| 激情文学88| 97在线免费看视频| 999999精品| 台湾佬大香蕉| 九九亚洲视频| 无码少妇精品一区二区60岁老人| 国产懂色精品国产av| 狼狼色丁香久久婷婷综合五月| 欧美高清18A片| 精品91日日夜夜超清资源| 果冻传媒A片麻豆熟妇人妻| 天天久久久久久| 97欧美色| 97久久久久| 人人妻人人澡人人爽久久av| 97精品在线视频| 国产精品96久久久久久| 日韩欧无码一区二区三区免费不卡| 国产精品久久久久久久久久久久久久吹| 青草精品视频一日本久久久久网站| 我爱操| 久久久久国色αv免费观看| 亚洲天天自拍| 色姑娘综合网| 激情小说图片亚洲首页| 一区二区三区视频国产免费| 国产精品制服丝袜清纯唯美| 人人考人人摸人人干| 99色在线视频| 丰满少妇人妻久久久久久| 欧美性色综合网| 久久精品99久久久久久| 国产精品夜夜夜| 久久激情婷婷| 91亚洲色人| 欧美黑人精品一区二区| 婷婷五月天成人网| 在线视频一区二区传媒| 久久久久久少妇| 人人妻人人澡人人爽久久av| 在线有码中文字幕| 国产视频一区二区免费| 久久免费中文字幕在线观看| 自拍亚洲综合| 超碰97精品| 很黄很色的视频在线观看| 婷婷AV一区二区三区| 日韩在线视频1234| 欧亚日韩综合精品国产| 国产精品福利视频| 国产精品久久久久久 百度| 天天综合网~69| 日韩精品人妻中文字有码在线| 色97欧美| 超碰成人公开| 天美麻豆精品视频99| 久久宗合亚洲| 午夜国产综合视频在线观看| 国产尹人在线视频免费| 男插女青青影院| 欧美色91| 国产AV无码AV| 亚洲综合性感在线| 丝袜综合网| 欧洲一级性爱视频在线观看| 自拍丝袜美腿人妻| 男人的天堂va在线| 黄色高清无码无码破解免费暗网| 亚洲激情 欧美色图| 精品十八在线观看| 国产福利小视频高清在线观看| 亚洲青青青视频在线| 四虎影视国产精品| av无码精品久久久久| 97人人爱人人做人人乐| 神马午夜久久| 亚洲综合激情五月久久| 91激情国产| 尤物黄色在线观看网站| 欧美香蕉视xxx| 丁香九月婷婷| 久久一二三四五六七八九区区区| 欧美精品欧美精品系列| 欧美另类综合久久| 色超碰综合| 欧美一区二区三区互相| 成人熟女视频一区二区三区| 啊啊啊想要| 日本免费中文一区二区三区四区| 男生通女生屁股| 中文自拍欧美影视| 麻豆天美AV传媒第一页| 欧美系列在线一区二区| 是还免费视频1727我| 在线无码视频| 国产一区二区三区,在线观看观看| 久久天天艹| 美女裸体麻豆天美蜜桃91| 国产精品国产亚洲区艳妇糸列| 亚洲日韩肥臀视频在线观看| 亚洲色图91| 78综合网| WWW操逼| 亚洲AV不卡在线观看尤物| 九九热久久99精品re| 区二区亚洲婷| 欧亚乱色熟女一区二区| 色噜噜狠狠色综无码久久| 精品性爱无码在线播放| 中国熟妇| 日本天堂网| 久久这里是精品| 日日日色色色色色| 99日韩| 久操免费在线| 黄呦呦在线| 欧美成人一级免费电影| 伊人国产AV| 欧美亚洲玖玖玖| 2024年最新色情网站在线观看| 久久久久久久78| 国产精品激情久久久久久久| 91痴汉| 亚洲色图激情小说| 免费一级性爱久久| 精品少妇一区二区| 旡码电影特区| 亚洲AV无线| 人妻少妇精品久久久久久| 俺去久久| av日韩手机在线影视| 精品天堂| 成人在线视频一区| 69精品人人人人| 国产成人欧美精品在线| 九九热精彩视频| 婷婷五月天激情小说| 天天看精品动漫视频一区| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 欧美日韩国产色图在线| 欧美色图色综合| 欧美日韩美女精品久草一区二区三区| 欧美激情综合色综合啪啪五月| 免费国产电影一区二区| 一本一道久久综合久久| 91色噜噜狠狠| 极品尤物在线观看| 老司机深夜18禁污污网站| 人妻少妇无码| 东京热av男人的天堂| 色播五月婷婷| 亚一综合久久久久久久久久| 亚洲人妻久久| 久久久免费高清中文视频| 综合干干干av久久久综合网| 婷婷综合| 怡红院一区二区熟女人妻| av一区二区三区不卡| 床戏久久久av一区二区麻豆| 中文字幕78| 无码99| 色色五月天激情| 天天搞在线综合网| 最新国内自拍av免费| 欧美东京热青青草| 美国三级日本三级久久99| 欧洲Au麻豆| 丁香激情网| 天天色综合天天操| 99性爱在线观看| 国产一级137片内射麻豆| 精品人妻一区二区三区在| 国语精品av| 久久久精品一区二区| 精品小视频在线| 午夜男人天堂| 久久黄黄| av大香蕉| 99欧美| 丁香六月啪啪| 中文字幕一区二区三区视频播放| 免费簧片在线观看| 一区二区三区黄色片a| 欧美性生活男人的天堂| 免费人成毛片乱码| 欧美视频一| 国产精品一区二区a| 日本一区二区不卡| 天天草天天日| 久久性爱视频99| 综合伊人网12色| а√天堂资源官网在线资源| 国产又黄又粗又猛大片| 久久狠狠色噜噜狠狠狠狠97| 日本阿v天堂在线观看| 婷婷久久五月综合激情| 国产精品女aA片爽爽视频| 1769成人国产精品视频| 日韩免费簧片| 眼镜人妻101.com| 欧美一级久久久丰满| 欧美另类精品xxxx| 夜色AV无码手机在线影院 | 蜜桃传媒视频第一区入口在线看| 91激情国产| 91N综合网| 国产又粗又长视频| 日日夜夜摸| AV天堂国产| 久久一区二区高清免费| 人人透人人操| 精品一区二区三区蜜桃臀赵总 | 97在线免费看| 日本啊啊啊啊啊视频| 欧美激情色婷婷花野真衣一区二区| 超碰在97| 超碰美女97| 大香蕉乱级| 亚欧成人中文字幕一区| 色99色| 欧美 青青草| 天堂综合| 中文乱码字幕观看| 精品成人亚洲午夜电影| 亚洲中文字幕精品久久久久久直播| av中文在线| 天堂麻豆天美| 日日97| 99婷婷一区二区| 日韩欧美中文日韩欧美色| 国产精品老师| 青青草吊丝| 日韩无码服务区| 色综合av综合久久| 91天堂色男人的天堂| 亚洲天堂人妻一区二区| 中文字幕女同在线| 福利视频网站| 久热香蕉精品在线视频| 欧美精品成人亚洲| 玖玖爱伊人玖玖爱| 国产精品白领在线观看| 一级啊性爱在线视频| 欧美综合骚| 九七人妻在线| 午夜男女爽爽爽影院视频| 欧美成人性爱视频大全| 2019天天操天天爽天天拍| 亚洲狠狠入| 天天视频网站黄| 六月丁丁香| 精品国产乱码久久久兰草影视| sewuyueav| 在线视频免费播放一区| 夜夜高潮夜夜爽| 青青草一区二区高清无码视频| 人妻啪| 午夜精品99久久久久传媒| 色色毛片| 91在线|亚| wwwcaobibi| 久久久工口| 使劲用力艹少妇视频一区二区| 蜜桃臀av一区二区| AAAAAAAAA黄片| 男人的天堂.com| 天天欧美| 巨爆乳肉感一区二区三区竹菊影视 | 青青11操操操操操操操操| 久久久久久99999国产精品| 9丨亚洲一区二区在线| 看看小穴| 超碰97中文| 天天爱天天操| 91天美免费| 亚洲综合一区二区| 国产精品乱码久久久、久久| 噜噜噜在线视频| 精品然女一区二区| 黄片qw| 不卡人妻少妇精品毛片一区23区视频| 久久久久久久| 九九色热| juliaann丝袜| 国产玖玖| 超碰97亚洲| 97爱免费插| 亚洲欧洲激情卡通另类文学四射小说网站 | 琪琪精品免费一区二区三区| 日本精品国产视频| 亚洲男人久久综合天堂| 操学生天天| 黄片国产精品一区二区| 色网在线| 91三级理论片播放器| 97草草| 九九色精品| 中文字幕乱亚洲美女精品一区| 色五月亚洲| 1240青青草一区二区三区视频天爱| 天天干一干| 亚洲欧美日韩偷拍色图| 亚洲av总站| 蜜乳Av成人片网站| 亚洲清纯唯美| 9色在线| 五月丁香激情四射| 欧美第38页| 中文字幕在线观看永久| 土豪酒店各种姿势玩弄极品幼稚| 成人av动漫在线观看| 97chaopengongkai| 殴美日韩m| 操逼国产免费| 老熟女综合网| 日本免费不卡二区| 久久五月天婷婷丁香中文字幕| 91视频综合在线| 日本久久99| 麻豆国产精品午夜视频| 激情黄色五月天| 久久九九网| 在线视频免费观看午夜| 中文字幕超碰CAO| 一级免费啪啪片| 91亚洲色图| 欧美熟女丝袜| 嗯啊不要在线| 国产精品久久久久久无码红治院| 国产精品另类| 人妻大相焦在线| 久热九九| 为用户提供免费看黄网址在线观看| 欧美综合狠| 久久久久久大| 亚卅熟女乱色| 日韩偷拍一区二区三区| 中文字幕熟女人妻丝袜丝| 久久欧美1卡2卡3| 欧美劲爆视频一区二区| 神马久久久久久| 美女爽爽爽刺痛洞洞| 精品免费1| 久久男女激情视频网站| 日韩字幕一区| 后入国产| 夜夜免费视频| 男人天堂日日夜夜| 在线 制服丝袜中出 人妻| 淫荡少妇免费| 日本αv| 风韵犹存大大大大香蕉 | 超碰在线观看av不卡| 天天日天天干少妇日| 在线情色电影 91大 | 999久久久| 蜜桃香蕉久草精品在线| 99热精品国产| 99re这里只有精品中心播放| 黄色av一区二区在线| 黄色电影在线播放综合网站| 亚洲日韩国产精品| 老熟女综合网| 干美女人妻| 久久久久久久久久久久欧美日| 97资源制服丝袜| 久久久97| 亚洲一区二区精品福利| 岛国免费黄色网址| 亚洲码在线中文在线观看| 99av| 色香av| 亚洲综合嫩| 亚洲国产福利视频| 九一性生活免费视频| 精品亚洲俞拍视频一区| 9热9热综合网| 三上制服丝AV| 97色97好| 久久久婷| 亚州久久9| 今日头条成人一区二区三区四虎精品| 久久久久久久久久久97| 欧美亚洲综合色| 爽爽淫人网| 蜜桃色色网站视频三区| 亚洲欧美大香蕉| 99视频内射三四| 五月婷视频| 天天摸,夜夜摸| 国产乱码久久| 久久久久久中文字幕中文字幕最新| 免费观看欧美日韩操逼视频| 国产福利第一视频| 国产午夜无码片在线观看影视 | 欧美色图自拍| 黑丝制服中文字幕| 男人的天堂日韩| 欧美亚洲激情一二三| 欧美成人国产精品| 神马久久免费电影观看| 密臀在线视频| 亚洲丝袜诱惑| 国产兽交视频在线播放| 精品人妻1区| 国产乱码精品一区二区三区四川| 亚洲一本大道中文字幕无码在线| 免费一级毛片在线视频观看| 丁香婷婷色五月| 久久久久久久 九九九九九九九| 九九九久千久久激情蜜桃在线看| 鸥美插入视频| 亚洲自拍青操视频| 好爽视频在线观看| 囯产精品久久久久久久久久梁医生 | 上特色A在线| 国产一区二区成人av在线播放| 新久久AV| 日韩成人网址| 污到发麻的视频 国产| 九九九九免费高| 97ai亚洲| 丁香五六月啪啪| 亚洲国产一级精品毛一级精品看免费视频 | 99精品久久| 观看视频图片一区二区三区| 亚洲drav色图| 97免费视频在线| 伊人精品久久网站| 久久久久9| 神马午夜久久久| 欧美色图99| 黄人人操人人操| 色999五月色| 亚欧中文字幕在线视频| 日韩精品人妻中文字幕不卡乱码| 啪啪视频免费在线观看| 亚洲欧美在线观看2021| 啊啊啊啊啊啊啊国| 麻豆黄站| AV麻豆免费一区| 大香蕉久操| 久操大香蕉超碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰碰 | 人人爽天天爽| 97国产精品久久久久| 日本影视久久免费| 久久久久国产一区二| 成人网欧美风情| 清纯唯美综合| 亚洲va有码在线天堂| 中文伊人大香蕉视频| 熟妇高潮二区三区| 日韩激情毛片一级久久久| 色久综合| 国产AV天美传媒一区二区三区 | 色综合久久夜色精品国产天堂| 在线欧美亚洲| 亚洲最大AV网| 啊啊啊不要啊啊受不了了视频在线 | 久久久久久亚洲Av无码| www.91色综合| 97超碰公开| 精品亚洲国产成人精品| 色五月69夫妻| 国产传媒日韩| 丁香五月成人| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲欧美色综合| 人人妻人人爱人人玩| 激情九月婷婷| 欧美肥臀在线| 网页导航五月天免费一二三区| 色狠人在线99| 亚洲一区二区三区在线激情| 欧美男人一区| 精品国产乱码久久久| 精品国产一级久久| 欧美日韩另类字幕中文| 人人玩人人添人人澡免费| 中文一区二区婷婷视频| 无码人妻1727| 欧美日韩国产中文超碰| 超碰色老头| 香蕉在线一区二区三区| juliaann丝袜| 麻豆久久久一区二区| 欧美亚洲今日在线| 亚洲日本成人动漫| 久久久久久九九九| 夜夜操天| 欧美v日韩v亚洲v最新在线| 欧美天天拍| 精品国产乱码久久| 欧美人妻精品| 思思热在线视频免费| 色第一页| 欧美色视频在线| 自拍亚洲综合| 熟妇操花| 少妇熟女一区二区三区| www鬼畜国产男人的天堂| 午夜舔阴达高潮视频免费看| 久久国产精品,久久国产| 人人摸.人人色| 国产第二页| 精品人妻美妇91job| 欧美日韩狠狠爱| 久久五月份| 色综合一本| 亚洲男人的天堂在线看| 国语av最新自产拍在线观看| 欧美黑人与女人91| 欧美后进式| 久久日韩精品一区二区| 精品中文日韩字幕视频| 91色婷婷综合久久中文字幕二区| 91熟女在线| 欧美国产视频| 操比国产| 夜色综合| 91天射| 久久婷婷色| 97超碰磁| 亚洲人综合| 大香蕉操久久| 操逼www.| 天天干人人乐| 97视频620| 日本岛国黄色网址 | 五月开心久久AV官网| 亚洲精品亚洲人成人网| 天天影视色香欲综合网小说| 久久综合久色欧美综合狠狠| 丁香五月婷婷五月| 国产又黄又爽又刺激久久久久久| 日本天堂在线播放| 爆乳免费黄网站| 操逼逼福利视频| 精品综合久久久久久五月天| 欧美在线中M| 99热亚洲天堂| 久久久久国产精品片区无码直播| 91成人18| 美国三级日本三级久久99| 久久国产精品91| 最新啪啪视频| 国产乱伦搜索结果91P| 亚洲欧美内射| 久超超碰| 91oumei| 乱伦系列一区二区| 在线观看亚洲成人精品| 97 国产精品| 自拍视频大全亚洲专媒视频/一区二区三区 | 欧美性爱精品一区二区| 国产女s强制榨精视频| 极品极品色影院| 欧美综合中文| 91美女色视频亚洲| 九九天堂| 五月天色图| 青娱乐国产精品| 精品久久无码午夜福利| 欧洲亚洲少妇| 97超碰欧美手机在线| 国产精品2020| 97人肏| 99热66| 岛国成人av在线播放网址| 中文字幕亚洲永久精品| 久久国产AⅤ| 亚洲精品九九九| 中文三一区| rivers-china.com| 丝袜狠狠草尤物 91| 欧美中字二区| 亚洲熟妇熟在线电影视频| 97精品国产97久久久| 天天爱天天操| 午夜丁香| 六十路日本| 久久久久久AⅤ无码免费肉站| 麻花豆传媒剧国产MV出差| 国语对白露脸XXXXXX| 中文字幕丰满人妻日本| 久操97| 美女诱惑一区| 亚洲欧美色图片| 人妻久久一区二区三区 | 日韩 欧美 视频 在线 一区| 1级午夜影院费免区| 成人免费毛片| 国产精品爱欲| 亚洲h片在线免费观看| 午夜操逼不卡| 国产成年免费大片黄在线观看| 国产高清精品一区二区三区毛片| 欧美一级AAAAAAA| .精品人妻一区二区三| 以及麻豆国产入口在线观看免费| 白丝被操91| 69少妇一区二区| 中国一级操逼视频| 啊啊啊好湿久久| 久久色激情一区二区三区| 嗯嗯啊啊用力视频免费| 夜夜久久| 久久精品视频一区三区小泽玛利亚| 日韩天天本| 死我十八禁| 天躁夜夜躁2021| 性色A∨91| 中文AV制服乱伦| 亚洲小电影免费涩涩成人在线高清| 强奸乱伦大香蕉| 亚洲成人久久美女|