亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

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| 国产精品久久久亚洲第一牛牛_在线观看 | 欧色综合| 啊v在线观看视频| 精品国产无码中文| 日本在线一二| 加勒比av官网在线| 久久久97| 麻豆久久久一区二区| 91大胆欧美| 久9久精品视频| 青娱乐黄色录像| 日本操逼视频在线| 色婷婷在线视频| 亚州综合AⅤ| com 首页 18岁 禁区 女优 免费 精选 同城| 精品无码久久久久久久久果冻糖心| 韩国一级AAA| 人妻AV在线| 日韩八十路老熟女| 一区三区啪啪| 丝袜色综合| 18禁中文字幕| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 天综合网欧美| 亚洲欧洲综合成人av一区| 激情综合五月天| 日韩亚洲中文有码视频| 999狠狠综合| 男人天堂资源| 日韩人妻一区二区精品| 男人天堂免费| 亚洲一区日韩| 国产97在线视频| 天美传媒一二三区永久网站| 97在线免费视频观看| 亚洲免费看片| 97色在线视频| 99热综合在线| 综合第一页| 在线 制服丝袜中出 人妻| 久久久新亚洲AV| 91九九九逼| 日韩操逼HD| 日日黄色三级网站| 欧美大香蕉专区网| 亚洲第一页色网| 99精品热| 亚洲精品无码久久AV| 久久久久无码一妻区| 啪啪资源网| 欧美视频一区二区三区| 五月丁香成人网| 熟妇色99| 日1区2区3区2020| 999狠狠综合| 在线观看无码三级少妇| 欧美色图99| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 国产精品探花视频| 中国熟妇| 人妻色情天天操| 日韩AV片| 三级AV入口| 久久久免费高清中文视频| xxx亚洲午夜天堂| 国产高清精品一区二区三区毛片| 亚洲熟女av中文字幕| 老熟女区| 久热这里| 蜜臀av一区二区三区免费观看| xxxx网站亚洲精品| 欧美影院一区二区三区| 就去色综合| 九九九九日本| 亚洲无限观看| 久草精品一区 | 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 曰韩人妻中文字幕在线| 蜜臀久久久99久久久久 | 俺去也婷婷| 中文字幕精品一区二区精| 欧美+日产+中文| 人妻黑丝袜电影| 磁力99AV| 另类欧美| 91观看 国产白丝| 啊啊啊不要嗯嗯在线观看| 夂久色| 久久久久久AⅤ无码免费肉站 | 67914在线兔费成人视频| 色娱乐色呦呦夜夜夜夜av| 热天堂一区二区| 精品国产污一区二区三区| 亚洲婷婷五月天| 五月婷婷深深爱| 综合影视国产无码| 国产精品婬乱一级毛片彝族| 亚欧韩av| 屌色在线97视频| 久久国产精品一级二级三级| 二对二中文字幕。| 久久精品99久久久久久| 久草草一二三四区久久| 伊人网一本| 超碰97亚洲区| 大干人妻| 69XX一中文字幕人妻91| 亚洲激情综合另类男同| 国产18精品亚洲精品| 久久肏大逼| 中文字幕亚洲永久精品| 久久人妻办公室视频| 99国内精品| 久久久久密臀视频| 熟女91网站| 亚洲阿v天堂在线| 性爱Av免费| 国产精品一区二区黄片| 国产av白丝| 97超碰中文字幕| 亚洲欧美另类图片| 最近2019中文字幕国语免费版| 五月丁香网站| 国产成人精品一区| 国产一区二区三区高清视频| 五月婷婷啪啪| 激情小说亚洲视频| 久久日韩精品一区二区| 69精品少妇一区二区三区蜜桃| 欧洲亚洲人妻无码中字久久三区四区| 天堂性色| 国产精品久久久久久久久AV大片 | 美女久久久久久久久久久| 久久久亚洲Av| 欧美激情久| 亚洲视频中文一区| 国产精品青青草| 国产日产欧产美韩系列麻豆免费| 国产女人与拘做受视频免费| 色九九九综合| 91东京热男人的天堂| 情侣开房子拍 日韩无码 女的很漂亮| 一本大道青青| 日本在线激情一区二区三区| 国产人人干| 国产日韩在线播放av| 观看免费区二区三区二| 欧美成熟性爱精品| 91新在线欧美| 在线播放免费av福利片| 色拍偷亚洲| 日本不卡二区| 日韩AV片| 欧美啪啪啪91| 国产成人亚洲精品无| 日韩一级特黄av毛片| 人妻 欧美 中文| 一级做a爰片性色毛片久久| 91丝袜| 一区二区日韩欧美久久| 久这精品中文在线观看视频| 91丝袜美腿网站| 欧美日韩国产一区二区小黄片大全| 91黑人无码激情在线| 乱人乱色一区二区三区免费 | 青女偷拍网| 能看的AV| 这里只有精品视频在线观看麻豆| 欧美肥臀在线| 欧美性,色九九| av网站在线观看了| 热G综合热G中文| 久久草草欧美精品| 逼操网站| 青青草公开在线免费不卡视频| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 天天视频黄| 高清肉丝中文无码| 亚州色交| 天天干天天操天天干天天操| 激情小说亚洲色图| 麻豆精品三区视频| 欧美在线色图| 91色综| 翔田千里AⅤHD无码| 久久99久久99精品天美传媒棢·纸:.| 性感女人网页在线观看视频| 黑人精品成人一区二区三区| 色综合一本| 国产天美传媒精品| 国产欧美伊人| 成人午夜视频免费播放| 人人潮人人摸| 91精品久久久久五月天精品| 黄骗免费网站| 东北女人性交| 91美女視頻| 99国内精品| 色色色99| 日本五十路熟女一区二区| 精品三级在线专区| 亚洲欧美色图| 人人操 欧美| 免费人成毛片乱码| 亚洲天堂精品日韩电影| 小说区 图片区色 综合区| 欧美成人精品欧美一级乱黄一区二…| 国偷自 一区二区| 久草线上视频免费看| 91在线丝袜视频| 91麻豆天美国产| 亚洲熟妇丝袜在线观看| 成人欧美日超碰| 成人精品视频| 天天性射网| 国产蜜臀精品一区二区尤物| 国产97av| 明星性猛交ⅹxxx乱大交| 试看日韩黄片| 免费精品中文字幕| 日本久久天堂| 天操天操夜操夜月操月年年操| 亚洲麻豆精品二区三区| 欧美天天综| 久久久久日本视| 伊人久久大香线综合无码| 91 刺激在线| 久草精品热视| 国内成人圈中文字幕无码视频| 超碰综合97在线| 天天摸天天操视频| 国产精品久久久久久亚洲色欲| 久久黄色性爱视频| 五月天精品| 成人精品视频一区二区| 久九九九九九九九热| 人妻少妇精品视频一区二区三区| 伊人网免费视频| 亚洲黄片免费在线播放| 欧美久久人人网| 午夜精品久久久久久久99蜜桃一| 大香蕉免| 亚洲另类春色| 中国一区二区亚洲人妻| 日本三级人妻a人妻一在线| 综合网,亚洲,欧美| 伊人国产AV| 精品人妻一区二区三区四区不卡在| 欧美性爱第一页久久| 欧美日韩香蕉| 蜜桃精品一区二区三区久在线| 校园春色综合网| 人人操人人狠狠操| 亚洲图片在线| 无遮挡一级毛片视频免费的| 久久久草成人网站久久久草成人久久久草久久久 | se吧提供国产乱老熟视频胖女人| 嗯嗯啊中文字幕| 亚洲十八禁止| 亚洲97久久精品亚洲| 天天日日日射| 国产精品人妻免费精品| 一区二区你上我| 久热99999| 国产一级137片内射麻豆| 九九九午夜| 久久色精品视频在线| 91社区拍啪人妻| 久久99草| 偷窥自拍A片| 精品9999| 在线欧美69V免费观看视频| 狠狠操天天干| 天堂无码| 97热视频在线观看| 日韩欧美国产高清视频| 日本性一区| 国产18精品亚洲精品| 人妻精品一区一区三区蜜桃91| 欧美偷拍区| 久久久久久9999| 国产一进一出视频网站| 91爱看| 日韩精品永久在线观看| 国产suv精品一区| 污啪啪啪视频| 中国AV美女| 精品人妻一区二区免费蜜桃| 2017av无码免费无线播| 中文字幕视频免费| 激情丁香五月婷婷| 91视频综合| 久久久99久9| 国产精品视频内谢女人| 超碰超碰95| 国产精品爽爽v| 四虎精品一区| 啊啊啊啊在线观看网址| 18禁超污无遮挡无码免费网| 日本一级真人黄色性爱视频| 国产九区| 色噜噜国产在线| 婷婷操视频| 青草精品视频一日本久久久久网站| 少妇无码太爽| 91人妻做a观看视频| 天美传媒AV在线| 久久熟女久| 刺激性视频黄页| 国产人伦a片信息免费片| 91亚洲狠狠色| 伊人国产av| 五月婷婷丁香六月| 无遮挡h肉动漫在线观看| 日本精品一级二级三级| 色色九区| 后入人妻无码| 997色在线| 天天看综合网| 国产高潮AA片免费看| 日本人妻伦在线中文字幕| 激情另类激情| 欧美综合自拍亚洲综合图| 香蕉免费一区二区三区不读 | 日韩性爱免费观看视频| 少妇熟女1区2区3区| 亚洲天堂男人天堂| 9999久久久| 亚洲人码13| 97精品97| 色悠久久久av| 超碰精品97| 亚洲精品九九九九九九| 日本幼女18+| 67914在线兔费成人视频| 色哟哟1区2区| 久9爱精品| 天天天堂影视日韩亚洲91| 九九九久久久久| 插老姨肥穴| 97香焦色区| 成人五月香网在线| 男人的天堂欧美| 久久久久久大| 天天综合网久久ww| 色情亚洲日本成人| 久久久久13| **一级毛片国产| 国产久久久久久久久一区二区| 五月婷婷丁香六月丁香| 亚洲九月丁香| 五月天婷婷成人网| 天天流夜夜操| 久草男人天堂| 亚洲加勒比| 日本1区2区不卡视频| 欧美gv在线观看| 手机在线播放国产福利| 国产精品老熟女一区二区| 私色综合网| 亚洲春色欧美激情自拍| 欧美日韩国产黄色片| 日韩一级片在线看| 黑丝少妇麻豆| 色噜噜日韩精品| 欧美日韩性爱电影在线| 开心激情婷婷| 60秒免费视频| 91性色| 人妻日日干| 91色综| 综合97久久| 欧美片第一页| 亚州国产精品乱| 97网站在线观看| 丝袜人妻av一区二区| 五十路六十路七十路熟婆| 美国一区二区免费视频| 亚洲欧美另类少妇精品| 超碰九7| 超碰av在线| 成熟熟女国产精品一区二区| 精品久久久久久无码| 成人在线视频网| 亚洲综合情色| 97中文热色| 日韩成人大片在线观看| 欧美精品久久| 无套内射人妻在线播放| 91九九九小逼| 一区二区三区高清天码| 欧美精品丝袜久久久中文字幕| 亚洲图片偷拍欧美| 日本久久天堂| 国产精品成人午夜福利| 欧美1727免费观看视频| 情色大香蕉| 国产成人一级av88| 人妻无码一区二区三区久久99| 手机在线中文字幕国产| 黑人精品欧美一区二区蜜桃| 很黄很色的视频在线观看| 欧美亚洲20p| 91视频精品| 91处女视频在线观看| 日本黄色大片一级视频免费麻豆| 媚薬在线视频麻豆| AV网站高清无码在线观看| 裸体美女久久久| 日韩乱中文| 夜夜嗨绯色| 在线中文字幕极品av| 色偷偷综合91久久噜噜| 97色欧洲| 色五月AV在线| 中国农村熟妇毛片视频| 久久人妻丝袜一区二区三| 亚洲 欧美 另类 综合 偷拍| 人妻丝袜二区| 色色色999| 青青操97| 97久久超碰| 99久久综合网| 9ⅰ久久久天天| 亚洲图片欧美色| 国模精品一区二区三区苹果色戒| 狠狠躁天天躁日日躁| 青娱乐国产剧情av一区| 色情综合网| 亚洲加勒比色图| 26uuu性| 97综合国产精品高潮久久| 人人操人人肉久久精品| 小情侣高清国产在线视频| 性色av一区二区| 精品国产一区探花在线观看| 秋霞视频一区二区| 大但人体久久久久| 亚卅熟女乱色| 精品少妇一区二区三区| 色99999| juliaann欧美丝袜办公室| 97视频在线观看播放与子乱对白在线……| 亚洲综合113页| 美女网站91| 午夜婷婷| 婷婷五月天激情四射| 欧美亚洲日本视频久久久| 欧美v亚洲v综合v国产v妖精| 被窝影院午夜看片无码| 麻豆天美国美国产AV| 自拍偷拍国产欧美日韩韩| 欧美成人免费在线观看| 一二三区操逼国产91| 九九九久久久| 超碰在线人人射| 欧差乱伦二三| 少妇一区二区三区高速| 偷拍偷窥与盗摄视频专区| 啪啪视频免费在线观看| 国产精品4p在线观看| 91搞逼视频| 久久av一级av少妇av高潮| 久热香蕉精品在线视频| 性爱1区| 中文字幕中文字幕一区二区| 婷婷丁香五月天亚洲天堂网| 狠狠爱夜夜| 成人欧美日超碰| 99国内熟女露脸视频| 97爱啪| 天天射天天色成人| 色99999| 一本色道无码DVD中文字幕| 国产女主播视频在线观看| 日韩免费簧片| 97任你吞精| 淫色网综合| 久久国模av| 婷婷丁香久久| 91久操| 丁香五月色| 激情另类激情| 一本精品日本在线视频精品 | 精品大久久| 久久九九网| 日本一区二区亚洲综合| 日韩av性爱在线播放| 日韩欧无码一区二区三区免费不卡| 91欧美 | 亚洲久久久久| 1024亚洲中文字幕久在线看片你懂的| 午夜影美女日鸡鸡天天视频国产| 亚洲天天操| 日本网色| 中文字幕一区二区三区四五区| 久久精品国产亚洲AV高清演员表 | 久久久久久少妇| 中文一区二区婷婷视频| 日韩精品99久久久久久中文字幕| 日本熟女不卡视频| 园内精品自拍视频在线播放| 久久精品国产96精品亚洲拳交| 欧美福利视频啊啊啊啊| 人妻出轨一区二区三区| 欧美色偷偷| 老女人爆菊| 91av熟女人妻| 亚州AV无码国产精品| 欧美精品四区| 青青草字幕AV| 美女诱惑一区| 一区二区三区精品视频| 美女久久久久久久| 久久久亚洲熟妇资源| 欧差乱伦二三| 久久xxxx| 九九九精品一区二区无码| 亚洲91射| 91av一区二区在线观看| 成人情色一区二区| 爱妻综合网| 亚洲男人天堂av| 国产亚州精品美女久久久免费| 97国产精品国| 超碰精品97| 911av网站免费观看| 成人无码在线视频网站| 久久久久久亚洲精品不卡人乳| 99国产精品久久久久久久成人热| www.acm成人黄色毛片| 九久久精| 9999亚洲电影| 五月丁香六月| 欧美日韩国产成人高清| 亚洲在钱| 97天天爽| 久久性爱网站| 中文字幕人妻资源在线| 在线电影亚洲色图| 高清不卡一二三区视频......| 人人看欧美性爱| 91美女視頻| 激情小说亚洲| 伊人天天久久动态图| 欧美色网| 97天堂| 四虎精品一区| 日本人妻最新在线中| 成人无码欧美一级A片狼牙直播| 久久综合精品一区二区三区| 色性综合| 超碰九色| 亚洲成人免费电影| 老熟女乱伦一区| 强奸乱伦AV一天堂网| 美女刺激久久国产欧美| 2020天天色综合| 免费啪啪一级视频| 久久综合av| 人人操,人人插| julia在线观看久久| 久伊人网78| 中文字幕av乱伦| 久9久9久9久9久9久9| 亚洲图片日本AⅤ欧美在线| 午夜呻吟欧美| 试看60秒 爽| 性色一线| 国产在线播放成人免费| 天堂种子在线www网资源| 黑人粗大V S日韩女优视频| 亚洲精品人妻在线| 欧美国产操逼| 国产18精品亚洲精品| 国产欧美日产一区二区三区 - 国产欧美日| 激情小说成人日本无码一| www.男人天堂| 日本黄色大片一级视频免费麻豆| 偷拍在线观看视频| 欧美成人四级在线播放| 久久夜精品一区二区三区| 国产精品嫩草影院免费| 97精品在线| 5278欧美一区二区三区| 九九九九热只有精品| 国产女人和拘做爰视频| 日韩中文9| 国产综合网站在线播放| 伊人网在线观看| 综合激情二| 操死我了嗯嗯嗯| 午夜影美女日鸡鸡天天视频国产| 人妻激情视频| 色精品极品| 可免费观看的av毛片中日美韩| 少妇天堂网络| 操逼1区| 九九九九九九九九九五码| 亚洲无码国产精品久久| 91国精产品| 日韩精品1区2区中文字幕| 欧美后入式| 日韩国语字幕| 射丝袜高跟鞋99| 亚洲熟女精品| www.91理论| 久久精品无码不卡| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 大香蕉免| 国内精品久久人妻性色av| 偷拍综合亚洲| 丁香五月天社区| 国内偷拍精品一区二区| 亚洲天堂人人妻| 无码操逼网| 日日日日做夜夜夜夜做无码97| 中文字幕精品一区二区精品| a片 xxxx受爽视频| 激情婷婷丁香| 久都青青视频| 伊人网综合在线视频| 亚洲欧洲综合| 超碰综合色| 国产又操| 无码高清操逼| 亚洲人精品久久久| 六月丁操逼| 高清国产av无码| 国产深夜福利| 日本一级不卡一二区| 久久黄黄| 国人欧美精品一区二区| 另类天堂| 97精品国产精品免费观看| www.婷婷| 免费在线黄片视频| 精品人妻中文字幕高清| 伊人嫩草| 99xav| 五月天综合| 性久久| 97爱爱爱| 亚洲一区制服诱惑| 三级片大波波| 欧洲色色| 人妻精品一区二区在线| 日韩特级毛片免费观看全集| 91美女视频直播| 亚码激情| 超碰美女97| 天天看天天综合成人网| 性色av网站| 亚洲欧美一区二区网址| 97鸡把在线视频| 长长久久88视频| 97 国产精品| 成人午夜小视频手机在线看| 综合欧美日韩在线| 久久一级无码精品毛片6| 九9热伊人| 婷婷五月天av| 超碰色综合| 欧亚韩国999| 91美女视屏| 欧美少妇色图| 好吊色一区| 中文字幕一区二区韩| 十八禁一区二区无码观看| 99日精品欧美国产| 天美传媒AV在线播放| 尻女朋友一夜| 先锋色眉乱伦资源| 941超碰| 国产三级多多影院2022国产AA一级毛片无码 | 嗯嗯啊啊视频在线看| 黄页网站免费高清在线观看| 久草尤物| 九九碰九九爱97超碰| 91久久婷婷| 亚洲九九视频在线观看| 在线观看一卡二卡| 成人小说另类在线| 日韩资源网| 成人精品在线观看| 国产一区二区三区视频在线看| 在线看的av| 日韩激情毛片一级久久久| 亚洲色图欧美一区二区不卡| q2午夜理论片夜色av| 伊人久久亚洲中文字幕不卡| 97 超碰 人人做 人人爱| 青青操97| 99国产天美| 欧美一区二区观看在线| 老司机射| 婷婷亚洲五月***久久| 色在线综合| 亚洲密乳AV| 乱伦a片视频| 香蕉久久AⅤ...| 国产成人综合在线播放| 免费啪啪一级视频| 亚欧高清在线| 九九色图| 亚洲一区二区麻豆影院| 欧美极品女人的天堂| 亚洲AV无码黄色强奸| 日本一区二区三区四区免费观看| 日韩黄色片子| 久九九九九九九九热| 上床啊啊啊| 久久午夜色播影院免费高清| 久操视频在线观看| 综合色好色| 色婷婷国产精品一区在线观看| 亚洲无992tv| 免费视频在线一区二区不卡| 国产又黄又粗的视频| 午夜a成v人电影| 久久东京伊人一本到鬼色| 成人亚欧免费视频| 激情av| 欧美丰满熟妇XXXX性ppX人交| 手机看片1024你懂的国产| 色婷婷视频| 久久女人视频| 国产熟妇一区二区| 看看日B真人视频| 蜜屁Av| 国产午夜福利合集| 射久久| 91精品久久久| 爽 好舒服 无码刺激久久| 成人av动漫在线观看| 激情六月天| 亚洲色图20p| av久日| 欧成人精品一区二区三区| 久久AV无码AV| 黄色区免费观看中文字幕| 激情九月婷婷| 欧美性暴力猛交XXXX | 国产吹潮女在线观看| 男人天堂导航| 国产熟女少妇一区| 91久久精品蜜臀| 97在线国产精品| 97人人爱人人做人人乐| 天堂资源站| www.成人无码| 国产老太乱伦一区| 无码丰满熟妇一区二区浪潮AV| 中文字幕一区二区韩| 91社操逼| 中日无幕一二三四区| 9久热| www黄片免费看com| 黄片qw| 91爆操视频| 日本三级韩国三级美三级91| 激情六月婷婷| 亚洲综合99999| 俞拍自拍| 日韩字幕一区| 粉嫩在线一区二区懂色| 国产一区二区三三视频| 久久久久9999| AV99热18这里只有精品| 日韩欧美三级| henhen91| 国产熟女乱论| 成 人 影视 一区 二区 三区 四区 | 偷拍伦理视频| 亚洲一区二区专区-国产丝袜精品丝袜-成人AV| 青青久日| 性爱视频啪啪啪啪| 激情综合二| 美腿色图| 9精品久久久久| 欧美αv.com| 99视频在线| 97操在线| 成人毛片免费| 婷婷丁香成人| 激情文学 亚洲图片| 香蕉欧美| 伊人久久88国产女| 97少妇人妻中文字幕久久| 高清国产无码av| 婷婷五月影院| 亚洲另类色综合网站| 18啪啪手机免费性爱| 精品久久久久久亚洲| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 国产精品久久久久中文字幕| 日本免费不卡二区| 超碰97亚洲| 色婷婷电影网| 亚洲丨在线| 国产小视频91| 亚洲精品久久一区二区三区蜜桃臀| 69少妇一区二区| 日韩性色b| 日日黄色三级网站| 国产农村妇女毛片精品久久| 国模不卡| 亚洲涩图欧美| 久热久一区二区三区| 另类小色呦| 美女AV一区二区| 国产无码精品成人| 日本三级久| 91亚洲图片| 久青草影院| 91色爽欧美| 91天天| 日韩国产品视频中文字| 久这精品中文在线观看视频| 91女在线观看| 欧美特大AA级黄片| 97精品在线| 乱抡国产91| 精品国产乱码久久久久久久久1 | 老女人综合网| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 狠狠色婷婷7777久| 欧美日韩青操| 做爱A级亚欧| 精品美女久久一二三| 国产一区二区三区久久久精品| 91嫩草欧美| 欧美日韩另类在线播放| 97在线欧洲| 国产精品爽爽v| 小骚逼被操的爽不爽| h4610国产人妻| 偷拍五区| 亚洲免费人妻在| 99少妇内射| 夜夜爽33333| 人妻夜夜爽天天爽三区麻豆AV网站| 大香蕉色十月| 99无码| 欧亚乱色熟一区二区三四区| 尤物av网站免费在线播放| 夜夜高潮夜夜爽高清视频一| 三男一女不戴套的A片| 色欧洲| 97国产色图 | 亚洲欧美91√| 成人av动漫在线观看| 日韩无码极品| 干妹子| 天天舔九色婷婷| 久久99久久99久久99人受| 日本黄色精品专区网站| 亚州图片第一页| 精品国产嫩穴视频| 国产偷拍网站| 99xav| 久久社区一区二区三区| 熟妇色99| 97久久综合网| 美欧老女人97| 亚洲学生妹高清av| 超碰人妻中文在线| 大香蕉一线视频| 天天干人人乐| 中文字幕少妇色| 亚洲天堂AV在线播放| 日本男人插女人的逼黄色| 亚洲不卡AV在线| 色婷婷丁香五月天| 色999;丁香五月| 人人贴人人摸| 天天视频网站黄| 亚洲综人网| 一区二区三区探花在线观看| 色妺妺在线视频| 国产亚洲日韩欧| 亚洲女人毛茸茸91| 大鸡吧尹人在线| 日韩精品免费高清视频在线| com 首页 18岁 禁区 女优 免费 精选 同城| 色九区| 搡老熟女免费视频 | 亚洲国产美女久久久久| 九九九九九用不成了| 26uuu国产免费观看| 亚洲欧美高清| 69久久久久久久久久久久久| 色区久久| 伊人黄色片| 亚洲三级。日韩三级| 亚州再线| 国产又粗又长又爽又色| 啊啊啊好大好深| 六月丁操逼| 岛园激情| 777琪琪午夜免费A片| 中韩中文字幕在线观看| 青青草原综合久久大伊人精品| 国产精品一级片在线看| 明星性猛交ⅹxxx乱大交| 亚洲素人综合| 97干色天堂| 无码色| 人人操人人搞人人草| 亚欧美色| 黑人综合色| 91丝袜美女| 久久久久成人亚洲国产| 色九九九九久| 亚洲情色一区综合| 裸体1区| 亚洲欧美在线丝袜| J?P?NESEHD熟女熟妇伦| 极品尤物自安慰| 亚洲色啪| 久久一留热品黄| 色拍偷亚洲| 美女久久久久久久久久久| 九九综合九九综合| 亚洲九月丁香| 混色激情av| 日韩欧美中文字| 台湾佬中文娱乐网久久久久久久久久com| 美女高潮视频91| 美女淫穴| 9精品久久久久| 黑人黄片在线免费观看| 91精品国| 人妻中文在线| 秋霞无码av鲁丝片一区| 清纯唯美综合| 免费97视频| 亚洲视频一二区| 欧美色图片91| 人人妻人人爽一区二区三区| 亚洲国产精品有声| 男人的天堂啪啪啪啪啪蜜桃不卡| 嗯嗯啊好大| 97欧美| 大色综合网| 超碰天天操你比| 中文字幕制服诱惑| 91狠狠色丁香婷婷综合久久| 欧美日韩中文亚洲v在线综合| 久久久久久久九九九九九九| 大香蕉中文| 亚洲影视高清三级-草1024榴社区入口-品爱AV| 91路www| 欧美精品双插| 怡红院怡春院| 亚洲人成色9999精品久久| 色爱综合网| 3p国产色噜噜一区| 欧洲在线性爱视频| 欧美色网| 东京热一区二区中文字幕| 超碰97综合| 嗯嗯啊啊啊好爽| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 日韩不卡在线一区二区| 久久久久久69国产一区二区| 久久久久久久久久久免费精品| 国产偷拍网站| 91精品91久久久中77777| 无套后入双马尾| 亚洲Av诱惑| www.久久久久| 无码视频黄色网战| 另类 日韩 熟女| 国产家庭乱伦网址| 国产真实野战在线视频| wwwcaobibi| 亚洲偷拍自拍在线视频| 国产AV久久久蜜爱影集| 日韩人妻制服丝袜av| 操逼视频国产无套| 人人干人人操人人爱| 91男同| 嫖老熟女A片一二三区| 欧美桃色网| 婷婷五月天激情小说| 九九九色| 蜜臀99999| 人人摸人人添人人操 | 加勒比无码毛片| 超碰99在线观看| 东京太热男人的天堂久久久| 九色97| 国产免费一区2区3区| 色天使大香蕉| 太久视频| 国产精品第二页| 色香欲影| 欧美综合97www| 久久亚洲欧美中文字幕国语| 欧美综合亚洲| 天躁夜夜躁2021| 久久透逼视频| 天天激清| 丁香六月激情| 久久久久久久九九九九九九| 成人无码在线超碰网| 国产传媒操逼视频| 人妻99p| av天天在线观看| 丝袜狠狠草尤物人妻av91| 97WW精品| 天天干夜夜一操| 亚洲无码精品AV久久久| 操淫穴亚洲五月丁香| 亚洲精品视频二区| 日本不卡高清视频| 伊人宅男大香蕉 | 亚洲国产97| 欧美天天综| 98超碰日本| 大香蕉一人在线| 夜夜国自区| 天美精品原创av片国产| 九九精品无码专区免费| 日韩中文字幕国产| 亚洲一区中文字幕一区| 国模一区二区三区| 伦在线97| 久操视频这里只有精品| 欧美成年人性爱视频免费观看| 超碰九7免费| 亚洲精品一区二区精品| 无码操逼视频一下| 人人插人人摸人人| 亚洲情色中文字幕一区| 超碰成人国产| 亚洲色图殴美色图激情乱伦| 午夜免费视频1000| 色月天AV导航| 涩涩五月天| 亚洲一区二区性爱电影| 欧美成人一区二区三区在线播放| 天堂无码精品国产久| 精品国产Av无码久久久伦古装| 人人澡人人澡人人| 久久伦理视频久久大香蕉视频| 激情五月综合网| 中文字幕日韩人妻视频一区二区三区 | 特级大荫道BBwBBwBBW| 国产欧美第五页| 久久在肏| 啊啊啊好大好湿| 97视频在线观看高清资源| 精品国产污一区二区三区| 亚洲精品久久久久久久蜜桃臀| 一区AV| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 国产99999| 久久久久久久91| 日韩精品人妻| 试看60秒 爽| 亚洲一区中文精品| 欧美日韩国产中文精品字幕自在自线 | 不卡中文字幕aⅴ在线| 99久久99九九99九九九| 国产白丝网站| AV麻豆免费一区| 综合国产97| 成年人黄色视频免费| 9久精品视频在线观看| 88在线一区二区三区| 欧美A片中文字幕| 天天干天天拍| 亚洲日本天堂| 国产无码高清操逼视频| 欧美黄色片AAAAA| 91处女视频在线观看| 中文久久久| 大香交| 果冻传媒A片麻豆熟妇人妻| 搡老女人老91二区| 日韩在线一区高清在线| 免费一级毛片在线视频观看| 人妻少妇久久久| 欧美中文字幕一区| 国产传媒一区日韩| 精品九九九九九九九九九| 性爱AV天堂| 亚洲AV无码乱码| 2020中文字幕在线观看| 91黑人无码激情在线| 啊啊啊在线观看免费视频| 亚洲a色| 日韩av在线免费网站| 日本999精品| 眼镜人妻101.com| 色哟哟国产精品免费网址| 欧美自拍网| 天天躁日日躁XXXXYY| 粉嫩小泬久久久一区二区| 久久性爱精品一区| 黑人天8A∨高清网站| 亚洲欧美电影| 精品区9| 亚洲色图A| 九九热精品| 亚洲狠狠入| 色色色五月婷婷| 加勒比无码毛片| 性爱av在线免费观看| 国产后入式在线观看| 亚洲第一无码播放立川理惠| 碰人碰碰人人开房人肉| 91精品久久久久五月天精品| 少妇一区二区三区在线观看| 欧洲黄色网| 99国产天美| 欧美一区二区三区不卡高清视频| 六六久久日韩不卡| 夜夜夜夜久久久久| 天天爱天天韩国日本牛牛牛牛| 青青草大香蕉视频| 麻豆人妻精品一区二区| 伊人超碰97| 亚洲操逼视频网站| 日本五区不卡| 亚洲AV成人无码一区二区三区在线观看| 热G综合热G中文| 97久久久| 欧美九九九九九| www.大香| 99爱爱| 黑人操一区二区| 激情四射婷婷六月天| 一区在线国产播放| 天天干18禁| 亚洲综合激情五月久久| 欧美少妇人妻| 美腿色图| 襙一襙| 99精品丰满人妻| 日韩成人精品视频自拍| 国产又大又粗又长视频| 欧美日韩999| 搡老女人老熟女91| 国产人妻一区二区三区欧美毛片| 97日韩|