{"id":30366,"date":"2026-10-04T20:30:53","date_gmt":"2026-10-04T20:30:53","guid":{"rendered":"https:\/\/umang.pk\/2026\/10\/04\/%d9%85%d9%82%d8%a7%d9%85%db%8c-%d8%a7%d9%88%d8%b1-%d8%b9%d8%a7%d9%84%d9%85%db%8c-%d8%ad%d9%88%d8%a7%d9%84%d9%88%da%ba-%da%a9%d9%88-%d9%85%d9%86%d8%a7%d8%b3%d8%a8-%d8%b7%d8%b1%db%8c%d9%82%db%92-%d8%b3\/"},"modified":"2026-10-04T20:30:53","modified_gmt":"2026-10-04T20:30:53","slug":"%d9%85%d9%82%d8%a7%d9%85%db%8c-%d8%a7%d9%88%d8%b1-%d8%b9%d8%a7%d9%84%d9%85%db%8c-%d8%ad%d9%88%d8%a7%d9%84%d9%88%da%ba-%da%a9%d9%88-%d9%85%d9%86%d8%a7%d8%b3%d8%a8-%d8%b7%d8%b1%db%8c%d9%82%db%92-%d8%b3","status":"publish","type":"post","link":"https:\/\/umang.pk\/en_us\/2026\/10\/04\/%d9%85%d9%82%d8%a7%d9%85%db%8c-%d8%a7%d9%88%d8%b1-%d8%b9%d8%a7%d9%84%d9%85%db%8c-%d8%ad%d9%88%d8%a7%d9%84%d9%88%da%ba-%da%a9%d9%88-%d9%85%d9%86%d8%a7%d8%b3%d8%a8-%d8%b7%d8%b1%db%8c%d9%82%db%92-%d8%b3\/","title":{"rendered":"\u0645\u0642\u0627\u0645\u06cc \u0627\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0645\u0646\u0627\u0633\u0628 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0645\u0646\u0638\u0645 \u06a9\u0631\u06a9\u06d2 JNI \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0633\u06d2 \u06a9\u06cc\u0633\u06d2 \u0628\u0686\u0627 \u062c\u0627\u0626\u06d2\u06d4"},"content":{"rendered":"<div id=\"\">\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0645\u0646\u0637\u0642 \u0633\u06d2 \u067e\u06cc\u062f\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0686\u06be\u0648\u0679\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06a9\u0633\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u063a\u0644\u0637 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627\u060c \u0627\u0633 \u06a9\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u0646\u0627\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0627\u06cc\u0633\u06d2 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u0646\u0627 \u062c\u0633 \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0646 \u06a9\u06cc\u0691\u0648\u06ba \u06a9\u0648 \u0679\u0631\u06cc\u06a9 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0627\u06a9\u062b\u0631 \u0627\u0633 \u0644\u0627\u0626\u0646 \u0633\u06d2 \u0628\u06c1\u062a \u062f\u0648\u0631 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u062d\u0627\u062f\u062b\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0628\u0639\u0636 \u0627\u0648\u0642\u0627\u062a \u06a9\u0686\u06be \u0645\u0646\u0679 \u0628\u0639\u062f\u060c \u06a9\u0686\u0631\u0627 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u06d2 \u0627\u0646\u062f\u0631\u06d4<\/p>\n<p>\u062c\u0627\u0648\u0627 \u0645\u0642\u0627\u0645\u06cc \u0627\u0646\u0679\u0631\u0641\u06cc\u0633 C \u0627\u0648\u0631 C++ \u06a9\u0648\u0688 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0645\u06cc\u06ba JVM \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0648\u0627 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0645 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u06c1\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u06a9\u0648 \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0645 \u0627\u0634\u0627\u0631\u06d2 \u0646\u06c1\u06cc\u06ba \u0645\u0644\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062d\u0648\u0627\u0644\u06c1 \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f\u060c \u06c1\u0631 \u0642\u0633\u0645 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u0627\u067e\u0646\u06d2 \u0627\u0635\u0648\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0628 \u062a\u06a9 \u062f\u0631\u0633\u062a \u06c1\u06d2\u060c \u0627\u0633\u06d2 \u06a9\u0646 \u062f\u06be\u0627\u06af\u0648\u06ba \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0630\u0645\u06c1 \u062f\u0627\u0631 \u06a9\u0648\u0646 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u06cc\u06c1 \u0627\u0635\u0648\u0644 \u0648\u0627\u0636\u062d \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u06a9\u0648 \u0631\u0648\u06a9\u0646\u0627 \u0627\u0648\u0631 \u062a\u0634\u062e\u06cc\u0635 \u06a9\u0631\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u06cc\u06c1 \u0645\u0636\u0645\u0648\u0646 \u0628\u062a\u0627\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc\u060c \u0639\u0627\u0644\u0645\u06cc \u0627\u0648\u0631 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u0648\u0679\u06d2 \u06c1\u0648\u0626\u06d2 \u06cc\u0627 \u062a\u0628\u062f\u06cc\u0644 \u0634\u062f\u06c1 \u06a9\u0648\u0688 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0648 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06cc\u062f\u0627\u0648\u0627\u0631 \u062a\u06a9 \u067e\u06c1\u0646\u0686\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0646 \u0645\u0633\u0627\u0626\u0644 \u06a9\u0648 \u067e\u06a9\u0691\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0679\u0648\u0644\u0632 \u0627\u0648\u0631 \u067e\u06cc\u0679\u0631\u0646 (CheckJNI \u0627\u0648\u0631 RAII \u0631\u06cc\u067e\u0631\u0632) \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u062e\u062a\u062a\u0627\u0645 \u067e\u0630\u06cc\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0645\u062b\u0627\u0644\u06cc\u06ba C++ \u0627\u0648\u0631 Android \u06a9\u0646\u0648\u0646\u0634\u0646\u0632 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0646\u0648\u0646\u0634\u0646 JNI \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0633\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 JVMs \u067e\u0631 \u0644\u0627\u06af\u0648 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-table-of-contents\">\u0627\u0646\u0688\u06cc\u06a9\u0633<\/h2>\n<h2 id=\"heading-prerequisites\">\u0634\u0631\u0637\u06cc\u06ba<\/h2>\n<p>\u0622\u067e \u06a9\u0648 C++ \u0627\u0648\u0631 Java \u06a9\u0648 \u067e\u0691\u06be\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u0627\u06c1\u0631 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0627\u0648\u0631 JNI \u06a9\u06d2 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0641\u0646\u06a9\u0634\u0646\u0632 \u0644\u06a9\u06be\u0646\u0627 \u06cc\u0627 \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u067e\u0691\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 (\u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>extern \"C\" JNIEXPORT<\/code> \u062c\u0627\u0648\u0627 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u06cc \u06af\u0626\u06cc\u06d4 <code>native<\/code> \u0637\u0631\u06cc\u0642\u06c1)\u06d4<\/p>\n<p>Android NDK \u0633\u06d2 \u0648\u0627\u0642\u0641\u06cc\u062a \u0633\u06d2 Android \u06a9\u06d2 \u0645\u062e\u0635\u0648\u0635 \u062d\u0635\u0648\u06ba \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc\u060c \u0644\u06cc\u06a9\u0646 \u0622\u067e \u06a9\u0648 \u0628\u0646\u06cc\u0627\u062f\u06cc \u062e\u06cc\u0627\u0644\u0627\u062a \u067e\u0631 \u0639\u0645\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-jni-references-work\">JNI \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u06cc\u0633\u06d2 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/h2>\n<p>\u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u06cc\u06a9 \u0645\u0646\u0638\u0645 \u0688\u06be\u06cc\u0631 \u067e\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u062c\u0628 \u0628\u06be\u06cc \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0648 \u06a9\u0645\u067e\u06cc\u06a9\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0622\u0632\u0627\u062f\u0627\u0646\u06c1 \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0627\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062e\u0627\u0645 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u0627\u06af\u0644\u06d2 \u06a9\u0645\u067e\u0631\u06cc\u0634\u0646 \u06a9\u06d2 \u0628\u0639\u062f \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0628\u0627\u0633\u06cc \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 JNI \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0645\u0628\u06c1\u0645 \u06c1\u06cc\u0646\u0688\u0644 \u067e\u0627\u0633 \u06a9\u0631\u06a9\u06d2 \u0627\u0633\u06d2 \u0631\u0648\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u062f\u0631\u062c \u0630\u06cc\u0644 \u0627\u0642\u0633\u0627\u0645 <code>jobject<\/code>, <code>jclass<\/code>, <code>jstring<\/code>\u0627\u0648\u0631 <code>jobjectArray<\/code> \u062a\u0645\u0627\u0645 \u06c1\u06cc\u0646\u0688\u0644 \u0627\u0633 \u0642\u0633\u0645 \u06a9\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-plaintext\"> Native code                 JVM reference tables             Managed heap\n +-------------+            +----------------------+         +------------+\n | jobject h   + -------->  | slot 17 : ptr        + ------> |  User obj  |\n +-------------+            +----------------------+         +------------+\n                              (GC updates the ptr\n                               when the object moves)\n<\/code><\/pre>\n<p>\u0645\u0646\u062f\u0631\u062c\u06c1 \u0628\u0627\u0644\u0627 \u062e\u0627\u06a9\u06c1 \u0627\u0646 \u0688\u0627\u0626\u0631\u06cc\u06a9\u0634\u0646 \u06a9\u0648 \u0638\u0627\u06c1\u0631 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 JNI \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u06c1\u06cc\u0646\u0688\u0644 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba (<code>h<\/code>)\u060c \u062c\u0648 JVM \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u0645\u06cc\u06ba \u062a\u0644\u0627\u0634 \u06a9\u06cc \u0645\u06cc\u0632 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0644\u0627\u0679 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0633\u0644\u0627\u0679 \u0645\u06cc\u06ba \u0646\u0638\u0645 \u0634\u062f\u06c1 \u0688\u06be\u06cc\u0631 \u067e\u0631 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u062c\u0633\u0645\u0627\u0646\u06cc \u067e\u062a\u06c1 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062c\u0628 \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0645\u0646\u062a\u0642\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0633\u0644\u0627\u0679 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u06a9\u0648 \u0627\u067e \u0688\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0645\u0648\u062c\u0648\u062f \u06c1\u06cc\u0646\u0688\u0644 \u062f\u0631\u0633\u062a \u0631\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0633\u0644\u0627\u0679 \u0627\u06cc\u06a9 GC \u062c\u0691 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0628\u06be\u06cc \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u06a9\u0627 \u0645\u0637\u0644\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u0628 \u062a\u06a9 \u0633\u0644\u0627\u0679 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u060c \u0648\u06c1 \u062c\u0633 \u0686\u06cc\u0632 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633\u06d2 \u062c\u0645\u0639 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u0646\u06d2 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062a\u0645\u0627\u0645 \u0627\u0635\u0648\u0644 \u0627\u06cc\u06a9 \u0633\u0648\u0627\u0644 \u067e\u0631 \u0627\u0628\u0644\u062a\u06d2 \u06c1\u06cc\u06ba: \u0648\u06c1 \u0633\u0644\u0627\u0679 \u06a9\u0628 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba \u06af\u06d2\u061f<\/p>\n<p>JNI \u0645\u06cc\u06ba \u062a\u06cc\u0646 \u0642\u0633\u0645 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u0648\u06c1 \u0628\u0627\u0644\u06a9\u0644 \u0627\u0633\u06cc \u0644\u062d\u0627\u0638 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba: \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0645\u06cc\u06ba \u0633\u0644\u0627\u0679 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0622\u0632\u0627\u062f \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0645\u06cc\u06ba \u0633\u0644\u0627\u0679\u0633 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0627\u0646\u06c1\u06cc\u06ba \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u062d\u0630\u0641 \u0646\u06c1 \u06a9\u0631 \u062f\u06d2\u06d4 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0628\u06be\u06cc \u062d\u0630\u0641 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0648\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0632\u0646\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0646 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0645\u0648\u062c\u0648\u062f \u0634\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0642\u062a \u063a\u0627\u0626\u0628 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-local-references\">\u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a<\/h2>\n<p>\u062a\u0642\u0631\u06cc\u0628\u0627\u064b \u062a\u0645\u0627\u0645 JNI \u0641\u0646\u06a9\u0634\u0646\u0632 \u062c\u0648 \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0644\u0648\u0679\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>FindClass<\/code>, <code>NewStringUTF<\/code>, <code>GetObjectArrayElement<\/code>, <code>CallObjectMethod<\/code>\u0627\u0648\u0631 <code>GetObjectClass<\/code> \u06cc\u06c1 \u0633\u0628 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u062f\u0644\u0627\u0626\u0644 \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u0648\u06ba \u067e\u0631 \u0645\u0646\u062a\u0642\u0644 \u06c1\u0648\u0626\u06d2 (\u0628\u0634\u0645\u0648\u0644 <code>thiz<\/code> \u06cc\u0627 <code>jclass<\/code> (\u062c\u0627\u0645\u062f \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2) \u0628\u06be\u06cc \u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0635\u0631\u0641 \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0644 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u062f\u0631\u0633\u062a \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0627\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0635\u0631\u0641 \u0627\u0633 \u062a\u06be\u0631\u06cc\u0688 \u067e\u0631 \u062c\u0633 \u0646\u06d2 \u0627\u0633\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0645\u0631\u06a9\u0632\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u062c\u0627\u0648\u0627 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c JVM \u0627\u0633 \u06a9\u0627\u0644 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u062a\u0645\u0627\u0645 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u0627\u06cc\u06a9 \u0642\u062f\u0645 \u0645\u06cc\u06ba \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0645\u062e\u062a\u0635\u0631 \u0627\u0641\u0639\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0622\u0633\u0627\u0646 \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1\u06cc \u0648\u062c\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u06a9\u0648\u0688 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u06a9\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>DeleteLocalRef<\/code> \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc<\/p>\n<p>\u0633\u06c1\u0648\u0644\u062a \u06a9\u06cc \u0627\u067e\u0646\u06cc \u062d\u062f \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u06d4 \u0645\u0642\u0627\u0645\u06cc \u062a\u0644\u0627\u0634 \u06a9\u06cc \u0645\u06cc\u0632 \u0641\u06cc \u06a9\u0627\u0644 \u0641\u0631\u06cc\u0645 \u0627\u06cc\u06a9 \u0645\u0642\u0631\u0631\u06c1 \u0635\u0644\u0627\u062d\u06cc\u062a \u06c1\u06d2. JNI \u062a\u0641\u0635\u06cc\u0644\u0627\u062a \u0635\u0631\u0641 16 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u06af\u06c1 \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2: <code>EnsureLocalCapacity<\/code> \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0645\u0632\u06cc\u062f \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u0631\u062d\u0642\u06cc\u0642\u062a\u060c JVM \u0627\u0633 \u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u0686\u06be\u0644\u06d2 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u0648\u0631\u0698\u0646\u0632 \u0645\u06cc\u06ba\u060c \u0679\u06cc\u0628\u0644\u0632 \u06a9\u0648 512 \u0627\u0646\u062f\u0631\u0627\u062c\u0627\u062a \u062a\u06a9 \u0645\u062d\u062f\u0648\u062f \u0631\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627\u060c \u0627\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0639\u0645\u0644 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>local reference table overflow (max=512)<\/code>. \u0627\u06af\u0631\u0686\u06c1 ART \u06a9\u06d2 \u0646\u0626\u06d2 \u0648\u0631\u0698\u0646\u0632 \u0645\u06cc\u06ba \u062d\u062f \u06a9\u0648 \u0646\u0645\u0627\u06cc\u0627\u06ba \u0637\u0648\u0631 \u067e\u0631 \u0628\u0691\u06be\u0627 \u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u06a9\u0648\u0688 \u062c\u0648 \u0644\u0627\u0645\u062d\u062f\u0648\u062f \u0644\u0648\u067e \u0645\u06cc\u06ba \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0633 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<h2 id=\"heading-pitfall-1-leaking-local-references-in-a-loop\">\u0646\u0642\u0635\u0627\u0646 1: \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0644\u0648\u067e\u0633 \u0645\u06cc\u06ba \u0644\u06cc\u06a9 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0633\u0628 \u0633\u06d2 \u0639\u0627\u0645 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc\u0691\u06d2 \u0627\u06cc\u0633\u06d2 \u0644\u0648\u067e\u0633 \u06c1\u06cc\u06ba \u062c\u0648 \u06c1\u0631 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0628\u06be\u06cc \u062c\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-cpp\">extern \"C\" JNIEXPORT void JNICALL\nJava_com_example_NameProcessor_processNames(JNIEnv* env, jobject thiz,\n                                            jobjectArray names) {\n  jsize count = env->GetArrayLength(names);\n  for (jsize i = 0; i < count; i++) {\n    jstring name = static_cast<jstring>(env->GetObjectArrayElement(names, i));\n    const char* utf = env->GetStringUTFChars(name, nullptr);\n    if (utf == nullptr) return;\n    LogName(utf);\n    env->ReleaseStringUTFChars(name, utf);\n  }\n}\n<\/jstring><\/code><\/pre>\n<p>\u06cc\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u062c\u0627\u0648\u0627 \u0645\u06cc\u06ba \u062f\u06c1\u0631\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>String[]<\/code> \u06c1\u0631 \u0622\u0626\u0679\u0645 \u06a9\u0648 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u06cc\u06ba\u06d4 \u06c1\u0631 \u06a9\u0627\u0644 \u06c1\u06d2\u06d4 <code>GetObjectArrayElement<\/code> \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0679\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0622\u067e \u06a9\u0627 \u06a9\u0648\u0688 UTF-8 \u0628\u0641\u0631 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0622\u0632\u0627\u062f \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>ReleaseStringUTFChars<\/code>\u062a\u0627\u06c1\u0645\u060c \u06cc\u06c1 \u0635\u0631\u0641 \u06a9\u0631\u06cc\u06a9\u0679\u0631 \u0688\u06cc\u0679\u0627 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u06a9\u0686\u06be \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 <code>jstring<\/code> \u062d\u0648\u0627\u0644\u06c1 \u062e\u0648\u062f\u06d4<\/p>\n<p>10 \u0646\u0627\u0645 \u0679\u06be\u06cc\u06a9 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 100,000 \u0646\u0627\u0645 \u06c1\u06cc\u06ba \u062a\u0648 \u0679\u06cc\u0628\u0644 \u0628\u06be\u0631 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0639\u0645\u0644 \u0631\u06a9 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u0648\u0646\u0679 \u0679\u06cc\u0633\u0679 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u0686\u06be\u0648\u0679\u06cc \u0635\u0641\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u06cc\u0691\u06d2 \u06a9\u0648 \u0686\u06be\u0648\u0679\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0633\u06cc\u062f\u06be\u0627 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06c1\u0631 \u0627\u0633 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062c\u0633 \u06a9\u06cc \u0627\u0628 \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">for (jsize i = 0; i < count; i++) {\n  jstring name = static_cast<jstring>(env->GetObjectArrayElement(names, i));\n  const char* utf = env->GetStringUTFChars(name, nullptr);\n  if (utf == nullptr) {\n    env->DeleteLocalRef(name);\n    return;\n  }\n  LogName(utf);\n  env->ReleaseStringUTFChars(name, utf);\n  env->DeleteLocalRef(name);\n}\n<\/jstring><\/code><\/pre>\n<p>\u0627\u0628 \u0644\u0648\u067e \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2. <code>DeleteLocalRef<\/code> \u06c1\u0631 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645 \u067e\u0631 \u0627\u0648\u0631 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631\u060c \u0679\u06cc\u0628\u0644 \u0627\u06cc\u06a9 \u0648\u0642\u062a \u0645\u06cc\u06ba \u0627\u0633 \u0644\u0648\u067e \u06a9\u0627 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0648\u0627\u067e\u0633\u06cc \u0627\u06c1\u0645 \u06c1\u06d2\u06d4 <code>GetStringUTFChars<\/code> \u0631\u067e\u0648\u0631\u0679 <code>nullptr<\/code> \u0627\u06af\u0631 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u06cc\u0644\u0648\u06a9\u06cc\u0634\u0646 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2 \u062a\u0648\u060c \u0645\u06cc\u0645\u0648\u0631\u06cc \u0627\u06cc\u0644\u0648\u06a9\u06cc\u0634\u0646 \u0628\u06be\u06cc \u067e\u06cc\u0686\u06be\u06d2 \u0631\u06c1 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4 <code>OutOfMemoryError<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u060c \u062f\u0631\u0633\u062a \u062c\u0648\u0627\u0628 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062c\u0627\u0648\u0627 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u0627\u06cc\u06a9 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a (\u06a9\u0644\u0627\u0633\u0632\u060c \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u06d2 \u0646\u062a\u0627\u0626\u062c\u060c \u062a\u0627\u0631) \u062a\u06a9\u0631\u0627\u0631 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u06c1\u0631 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u062f\u0633\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062d\u0630\u0641 \u06a9\u0631\u0646\u0627 \u0645\u0634\u06a9\u0644 \u0627\u0648\u0631 \u063a\u0644\u0637\u06cc \u06a9\u0627 \u0634\u06a9\u0627\u0631 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>PushLocalFrame<\/code> \u0627\u0648\u0631 <code>PopLocalFrame<\/code> \u06a9\u06cc\u0633 \u06a9\u0648 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-cpp\">for (jsize i = 0; i < count; i++) {\n  if (env->PushLocalFrame(8) != 0) return;\n  jobject user = env->GetObjectArrayElement(users, i);\n  jstring name = static_cast<jstring>(env->CallObjectMethod(user, gGetName));\n  jstring email = static_cast<jstring>(env->CallObjectMethod(user, gGetEmail));\n  SaveUser(env, name, email);\n  env->PopLocalFrame(nullptr);\n}\n<\/jstring><\/jstring><\/code><\/pre>\n<p><code>PushLocalFrame(8)<\/code>    \u06a9\u0645 \u0627\u0632 \u06a9\u0645 \u0622\u0679\u06be \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u06af\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0642\u0627\u0645\u06cc \u0631\u06cc\u0641\u0631\u0646\u0633 \u0679\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u06be\u0648\u0644\u06cc\u06ba\u06d4 \u0627\u0633 \u0646\u0642\u0637\u06c1 \u06a9\u06d2 \u0628\u0639\u062f \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06a9\u0648\u0626\u06cc \u0628\u06be\u06cc \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0646\u0626\u06d2 \u0641\u0631\u06cc\u0645 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>PopLocalFrame(nullptr)<\/code> \u0627\u0646 \u0633\u0628 \u06a9\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u0686\u06be\u0648\u0691 \u062f\u0648 <code>user<\/code>, <code>name<\/code>\u0627\u0648\u0631 <code>email<\/code> \u0648\u06c1 \u06c1\u0631 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645 \u067e\u0631 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0627\u06af\u0631 <code>PushLocalFrame<\/code> \u0627\u06af\u0631 \u0622\u067e \u0627\u06cc\u06a9 \u063a\u06cc\u0631 \u0635\u0641\u0631 \u0642\u062f\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 JVM \u0627\u06cc\u06a9 \u0641\u0631\u06cc\u0645 \u0645\u062e\u062a\u0635 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u0627\u0648\u0631 <code>OutOfMemoryError<\/code> \u0686\u0648\u0646\u06a9\u06c1 \u06cc\u06c1 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u060c \u0641\u0646\u06a9\u0634\u0646 \u0641\u0648\u0631\u0627\u064b \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u0641\u0631\u06cc\u0645 \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062d\u0648\u0627\u0644\u06c1 \u062f\u0631\u06a9\u0627\u0631 \u06c1\u06d2 \u062a\u0648 \u0627\u0633 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba\u06d4 <code>PopLocalFrame<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 <code>nullptr<\/code>\u0641\u0646\u06a9\u0634\u0646 \u0628\u06cc\u0631\u0648\u0646\u06cc \u0641\u0631\u06cc\u0645 \u0645\u06cc\u06ba \u0627\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-pitfall-2-caching-a-local-reference-in-a-static-variable\">\u0646\u0642\u0635\u0627\u0646 2: \u062c\u0627\u0645\u062f \u0645\u062a\u063a\u06cc\u0631 \u0645\u06cc\u06ba \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u06a9\u06cc\u0634 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u06a9\u0644\u0627\u0633 \u0627\u0648\u0631 \u0637\u0631\u06cc\u0642\u06c1 IDs \u062a\u0644\u0627\u0634 \u06a9\u0631\u0646\u0627 \u0646\u0633\u0628\u062a\u0627\u064b \u0633\u0633\u062a \u06c1\u06d2\u060c \u0645\u0642\u0627\u0645\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0627\u06ba \u0627\u06a9\u062b\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0634 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4 \u063a\u0644\u0637\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u06cc\u0634 \u06a9\u0631 \u0631\u06c1\u06cc \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">static jclass gUserClass;\nstatic jmethodID gGetName;\n\nJNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {\n  JNIEnv* env = nullptr;\n  if (vm->GetEnv(reinterpret_cast<void>(&env), JNI_VERSION_1_6) != JNI_OK) {\n    return JNI_ERR;\n  }\n  gUserClass = env->FindClass(\"com\/example\/User\");  \/\/ Bug: local reference\n  gGetName = env->GetMethodID(gUserClass, \"getName\", \"()Ljava\/lang\/String;\");\n  return JNI_VERSION_1_6;\n}\n<\/void><\/code><\/pre>\n<p><code>JNI_OnLoad<\/code>    \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc \u0644\u0648\u0688 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u06cc\u06c1 \u0648\u0631\u0698\u0646 \u0646\u062a\u0627\u0626\u062c \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>FindClass<\/code> \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633\u06d2 \u0627\u06cc\u06a9 \u062c\u0627\u0645\u062f \u0645\u062a\u063a\u06cc\u0631 \u0645\u06cc\u06ba \u0631\u06a9\u06be\u06cc\u06ba\u06d4 \u0645\u0633\u0626\u0644\u06c1 \u06cc\u06c1 \u06c1\u06d2\u06d4 <code>FindClass<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u0627\u0633 \u0637\u0631\u062d \u0622\u0632\u0627\u062f \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>JNI_OnLoad<\/code> \u0631\u067e\u0648\u0631\u0679 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u0622\u067e \u0627\u0633\u06d2 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4 <code>gUserClass<\/code> \u06cc\u06c1 \u0627\u0646 \u0633\u0644\u0627\u0679\u0648\u06ba \u0633\u06d2 \u06af\u0632\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0634\u0627\u06cc\u062f \u067e\u06c1\u0644\u06d2 \u06c1\u06cc \u0622\u0632\u0627\u062f \u06c1\u0648 \u0686\u06a9\u06d2 \u06c1\u0648\u06ba \u0627\u0648\u0631 \u06a9\u0633\u06cc \u0628\u0627\u0644\u06a9\u0644 \u0645\u062e\u062a\u0644\u0641 \u0634\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u06d2 \u062c\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<p>\u0645\u0627\u06cc\u0648\u0633 \u06a9\u0646 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0648\u0688 \u0627\u06a9\u062b\u0631 \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u062f\u06a9\u06be\u0627\u0626\u06cc \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0686\u06be JVMs \u0645\u06cc\u06ba\u060c \u0627\u06cc\u0633\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u067e\u0631\u0627\u0646\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u0627\u0628 \u0628\u06be\u06cc \u06a9\u0686\u06be \u0648\u0642\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0635\u062d\u06cc\u062d \u06a9\u0644\u0627\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0686\u06cc\u06a9 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be ART \u0645\u06cc\u06ba\u060c \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u062e\u0631\u0627\u0628\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0639\u0645\u0644 \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>accessed stale local reference<\/code>. \u0686\u06cc\u06a9 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0622\u067e \u06a9\u0648 \u0628\u06d2 \u062a\u0631\u062a\u06cc\u0628 \u06a9\u0631\u06cc\u0634 \u06cc\u0627 \u063a\u0644\u0637 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u067e\u0691\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0633\u06d2 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06d2 \u0633\u06d2 \u0641\u0631\u0648\u063a \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">jclass localClass = env->FindClass(\"com\/example\/User\");\nif (localClass == nullptr) return JNI_ERR;\ngUserClass = static_cast<jclass>(env->NewGlobalRef(localClass));\nenv->DeleteLocalRef(localClass);\nif (gUserClass == nullptr) return JNI_ERR;\n\ngGetName = env->GetMethodID(gUserClass, \"getName\", \"()Ljava\/lang\/String;\");\nif (gGetName == nullptr) return JNI_ERR;\n<\/jclass><\/code><\/pre>\n<p><code>NewGlobalRef<\/code>    \u0627\u0633\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u0627 \u062f\u0648\u0633\u0631\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>JNI_OnLoad<\/code> \u0631\u067e\u0648\u0631\u0679 \u0627\u0635\u0644 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0645\u0632\u06cc\u062f \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06a9\u0648\u0688 \u0627\u0633\u06d2 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0645\u0627\u0645 \u06a9\u0627\u0644\u0632 \u062a\u0635\u062f\u06cc\u0642 \u0634\u062f\u06c1 \u06c1\u06cc\u06ba\u06d4 <code>nullptr<\/code>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 <code>FindClass<\/code> \u0627\u0648\u0631 <code>GetMethodID<\/code> \u0648\u0627\u067e\u0633\u06cc <code>nullptr<\/code> \u0627\u06af\u0631 \u06a9\u0644\u0627\u0633 \u06cc\u0627 \u0637\u0631\u06cc\u0642\u06c1 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u062a\u0648 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0631\u0639\u0627\u06cc\u062a \u06a9\u0648 \u062a\u0646\u06c1\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba (\u0645\u062b\u0644\u0627\u064b \u06a9\u0633\u06cc \u0645\u0628\u06c1\u0645 \u0679\u0648\u0644 \u0645\u06cc\u06ba \u0646\u0627\u0645 \u062a\u0628\u062f\u06cc\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f)\u06d4<\/p>\n<p>\u06a9\u06c1 <code>jmethodID<\/code> \u0627\u0646\u06c1\u06cc\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u0639\u0644\u0627\u062c \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0637\u0631\u06cc\u0642\u06c1 IDs \u0627\u0648\u0631 \u0641\u06cc\u0644\u0688 IDs \u0622\u0628\u062c\u06cc\u06a9\u0679 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633 \u0648\u062c\u06c1 \u0633\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u0679\u0631\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062f\u0631\u0633\u062a \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0627\u0633 \u06a9\u0627 \u062a\u0639\u0644\u0642 \u062c\u0633 \u06a9\u0644\u0627\u0633 \u0633\u06d2 \u06c1\u06d2 \u0627\u0633\u06d2 \u0644\u0648\u0688 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 \u06a9\u0633\u06cc \u06a9\u0644\u0627\u0633 \u06a9\u0627 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0631\u06a9\u06be\u0646\u0627 \u0627\u0633 \u0628\u0627\u062a \u06a9\u06cc \u0636\u0645\u0627\u0646\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0633\u06d2 \u06a9\u0628\u06be\u06cc \u0646\u06c1\u06cc\u06ba \u0627\u062a\u0627\u0631\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u06cc\u06c1 \u0639\u0627\u0644\u0645\u06cc \u0633\u0637\u062d \u067e\u0631 \u06a9\u0644\u0627\u0633\u0632 \u06a9\u0648 \u0627\u0646 \u06a9\u06cc \u0634\u0646\u0627\u062e\u062a \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc\u0634 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u06cc\u06a9 \u0627\u0648\u0631 \u0648\u062c\u06c1 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-global-references\">\u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1<\/h2>\n<p>\u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u06c1\u06cc\u06ba: <code>NewGlobalRef<\/code> \u06cc\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0627\u062b\u0631 \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0646\u06c1\u06cc\u06ba \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627\u06d4 <code>DeleteGlobalRef<\/code>. \u06cc\u06c1 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2 \u0627\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u0634\u062f\u06c1 \u0634\u06d2 \u06a9\u0648 \u067e\u0648\u0631\u06cc \u0632\u0646\u062f\u06af\u06cc \u0632\u0646\u062f\u06c1 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0627\u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u0627\u0686\u06be\u0627 \u0679\u0648\u0644 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0633\u06d2 \u06a9\u0627\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u06a9\u06cc\u0634\u0688 \u06a9\u0644\u0627\u0633\u0632\u060c \u06a9\u0627\u0644 \u0628\u06cc\u06a9 \u0622\u0628\u062c\u06cc\u06a9\u0679\u060c \u06cc\u0627 \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u062c\u0648 \u0645\u0642\u0627\u0645\u06cc \u0648\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0645\u0627\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4<\/p>\n<p>\u0644\u0627\u06af\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062c\u06d2 \u0648\u06cc \u0627\u06cc\u0645 \u0627\u067e\u0646\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u062c\u0627\u0631\u06cc \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u06d2 \u062c\u0691 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0633\u0645\u062c\u06be\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062c\u0633 \u0686\u06cc\u0632 \u0627\u0648\u0631 \u0627\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062c\u0648 \u06a9\u0686\u06be \u0628\u06be\u06cc \u0645\u0646\u0633\u0644\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u0648\u06c1 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0645\u06cc\u06ba \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u062d\u0630\u0641 \u0646\u06c1 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<p>\u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0628\u06be\u06cc \u0645\u0642\u0631\u0631\u06c1 \u0633\u0627\u0626\u0632 \u06a9\u06d2 \u062c\u062f\u0648\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631\u060c \u06cc\u06c1 \u062d\u062f 51,200 \u0622\u0626\u0679\u0645\u0632 \u06c1\u06d2\u060c \u062c\u0633 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0639\u0645\u0644 \u062e\u062a\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>global reference table overflow<\/code>.<\/p>\n<h2 id=\"heading-pitfall-3-leaking-global-references\">\u0646\u0642\u0635\u0627\u0646 3: \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0631\u0633\u0627\u0648<\/h2>\n<p>\u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0627 \u0644\u06cc\u06a9 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u06c1\u0631 \u0628\u0627\u0631 \u062c\u0628 \u06a9\u0648\u0626\u06cc \u0634\u06d2 \u067e\u0631\u0627\u0646\u06cc \u06a9\u0648 \u0622\u0632\u0627\u062f \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0631\u062c\u0633\u0679\u0631\u0688 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062a\u0648 \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">static jobject gListener;\n\nextern \"C\" JNIEXPORT void JNICALL\nJava_com_example_Sensor_setListener(JNIEnv* env, jobject thiz, jobject listener) {\n  gListener = env->NewGlobalRef(listener);\n}\n<\/code><\/pre>\n<p>\u062a\u0645\u0627\u0645 \u06a9\u0631\u0646\u0633\u06cc\u0648\u06ba <code>setListener<\/code> \u0627\u06cc\u06a9 \u0646\u06cc\u0627 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06af\u0644\u06d2 \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u067e\u0686\u06be\u0644\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>gListener<\/code>. \u067e\u0631\u0627\u0646\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0627\u0628\u06be\u06cc \u0628\u06be\u06cc \u062c\u062f\u0648\u0644 \u0645\u06cc\u06ba \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0633\u06d2 \u062d\u0630\u0641 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0628 \u0627\u0633 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0648\u0626\u06cc \u0686\u06cc\u0632 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06c1\u0631 \u0644\u06cc\u06a9 \u0634\u062f\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u0633\u0627\u0645\u0639\u06cc\u0646 \u06a9\u06cc \u0686\u06cc\u0632 \u06a9\u0648 \u0628\u06be\u06cc \u067e\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0627\u06a9\u062b\u0631 \u0627\u0646\u062f\u0631\u0648\u0646\u06cc \u0637\u0628\u0642\u06d2 \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u067e\u0648\u0631\u06cc \u0633\u0631\u06af\u0631\u0645\u06cc \u06cc\u0627 \u0679\u06a9\u0691\u06d2 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0631\u06a9\u06be\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0646\u062a\u06cc\u062c\u06d2 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631\u060c \u062c\u0628 \u0628\u06be\u06cc \u0627\u0633\u06a9\u0631\u06cc\u0646 \u06af\u06be\u0648\u0645\u062a\u06cc \u06c1\u06d2 \u062a\u0648 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0627 \u0644\u06cc\u06a9 \u0628\u0691\u06be \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0622\u062e\u0631 \u06a9\u0627\u0631 \u06a9\u0631\u06cc\u0634 \u0627\u0633 \u0648\u0642\u062a \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0628 \u0679\u06cc\u0628\u0644 \u0627\u0648\u0648\u0631 \u0641\u0644\u0648 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u0631\u0645\u06cc\u0645 \u0634\u062f\u06c1 \u0648\u0631\u0698\u0646 \u067e\u0631\u0627\u0646\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u062c\u0627\u0631\u06cc \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062c\u0627\u0648\u0627 \u06a9\u0648 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">static std::mutex gListenerMutex;\nstatic jobject gListener = nullptr;\n\nextern \"C\" JNIEXPORT void JNICALL\nJava_com_example_Sensor_setListener(JNIEnv* env, jobject thiz, jobject listener) {\n  std::lock_guard<:mutex> lock(gListenerMutex);\n  if (gListener != nullptr) {\n    env->DeleteGlobalRef(gListener);\n    gListener = nullptr;\n  }\n  if (listener != nullptr) {\n    gListener = env->NewGlobalRef(listener);\n  }\n}\n<\/:mutex><\/code><\/pre>\n<p>\u06cc\u06c1 \u0648\u0631\u0698\u0646 \u0646\u0626\u06d2 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0628\u0646\u0627\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0645\u0648\u062c\u0648\u062f\u06c1 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0648\u0642\u062a \u0632\u06cc\u0627\u062f\u06c1 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u0627\u06cc\u06a9 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u06af\u0632\u0631\u0646\u0627 <code>null<\/code> \u06cc\u06c1 \u062c\u0627\u0648\u0627 \u0645\u06cc\u06ba \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0645\u06a9\u0645\u0644 \u0637\u0648\u0631 \u067e\u0631 \u0635\u0627\u0641 \u06a9\u0631\u0646\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u062c\u0627\u0648\u0627 \u06a9\u06cc \u0637\u0631\u0641 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u0627 \u0627\u06cc\u06a9 \u0635\u0627\u0641 \u0637\u0631\u06cc\u0642\u06c1 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>onDestroy<\/code> \u06cc\u0627 <code>close()<\/code>. Mutex \u062d\u0641\u0627\u0638\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>gListener<\/code> \u0627\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0633\u0646\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u06a9\u0648 \u0645\u06cc\u0646 \u0648\u0631\u06a9\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0633\u06d2 \u067e\u0691\u06be\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2 \u062c\u0628\u06a9\u06c1 \u062c\u0627\u0648\u0627 \u0627\u0633\u06d2 \u0645\u06cc\u0646 \u062a\u06be\u0631\u06cc\u0688 \u0633\u06d2 \u0627\u0648\u0648\u0631 \u0631\u0627\u0626\u06cc\u0688 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u06d4 \u062a\u0627\u0644\u06d2 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u06a9\u0627\u0631\u06a9\u0646 \u06c1\u06cc\u0646\u0688\u0644\u0632 \u06a9\u0648 \u067e\u0691\u06be \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0648 \u06a9\u0686\u06be \u0644\u0645\u062d\u06d2 \u067e\u06c1\u0644\u06d2 \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u06d2 \u06af\u0626\u06d2 \u062a\u06be\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0627\u0686\u06be\u06cc \u0639\u0627\u062f\u062a \u06c1\u0631 \u0628\u0627\u0631 \u0627\u0646 \u06a9\u0648 \u062c\u0648\u0691\u0646\u0627 \u06c1\u06d2\u06d4 <code>NewGlobalRef<\/code> \u062c\u0628 \u0645\u0645\u0627\u062b\u0644 \u0645\u0642\u0627\u0645 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u067e\u06c1\u0686\u0627\u0646\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>DeleteGlobalRef<\/code> \u0627\u06cc\u0633\u0627 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633 \u0645\u0642\u0627\u0645 \u06a9\u06cc \u0637\u0631\u0641 \u0627\u0634\u0627\u0631\u06c1 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u062a\u0648 \u0622\u067e \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0644\u06cc\u06a9 \u06c1\u0648 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-weak-global-references\">\u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a<\/h2>\n<p>\u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062a\u06cc\u0627\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>NewWeakGlobalRef<\/code>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0637\u0631\u062d \u06a9\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u06a9\u0627\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 \u062a\u06be\u0631\u06cc\u0688\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4 \u0641\u0631\u0642 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u06cc\u06c1 \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u0648 \u0632\u0646\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u0627\u06d4 \u062c\u0627\u0648\u0627 \u0645\u06cc\u06ba\u060c \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0648\u0631 \u0686\u06cc\u0632 \u06a9\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0646\u06c1\u06cc\u06ba \u062f\u06cc\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u06a9\u0686\u0631\u0627 \u062c\u0645\u0639 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u06d2 \u062c\u0645\u0639 \u06a9\u0631\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u0633\u06d2 \u0645\u0631\u0627\u062f: <code>null<\/code>.<\/p>\n<p>\u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0627\u0633 \u0648\u0642\u062a \u06a9\u0627\u0631\u0622\u0645\u062f \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0627\u0633 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u06cc \u0632\u0646\u062f\u06af\u06cc \u067e\u0631 \u06a9\u0646\u0679\u0631\u0648\u0644 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0648\u0627\u067e\u0633 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u0645\u062b\u0627\u0644 \u0645\u0642\u0627\u0645\u06cc \u0622\u0688\u06cc\u0648 \u0627\u0646\u062c\u0646 \u06c1\u06d2 \u062c\u0648 UI \u0627\u062c\u0632\u0627\u0621 \u06a9\u0648 \u0645\u0637\u0644\u0639 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0635\u0627\u0631\u0641 \u06a9\u06d2 \u0627\u0633\u06a9\u0631\u06cc\u0646 \u0686\u06be\u0648\u0691\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0646\u062c\u0646 \u06a9\u0648 UI \u06a9\u0648 \u0641\u0639\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0646\u062c\u0646 \u06a9\u0648 UI \u062a\u06a9 \u0631\u0633\u0627\u0626\u06cc \u06a9\u06d2 \u0642\u0627\u0628\u0644 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u062c\u0628 \u062a\u06a9 \u06cc\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u0648\u06d4<\/p>\n<h2 id=\"heading-pitfall-4-using-a-weak-global-reference-directly\">\u0646\u0642\u0635\u0627\u0646 4: \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u0648 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u063a\u0644\u0637\u06cc \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0627\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0627\u0633 \u0637\u0631\u062d \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062c\u06cc\u0633\u06d2 \u0648\u06c1 \u0645\u0636\u0628\u0648\u0637 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06c1\u0648\u06ba\u06d4<\/p>\n<pre><code class=\"language-cpp\">static jweak gCallback;\n\nvoid NotifyProgress(JNIEnv* env, jint percent) {\n  if (!env->IsSameObject(gCallback, nullptr)) {\n    env->CallVoidMethod(gCallback, gOnProgress, percent);  \/\/ Bug: race with GC\n  }\n}\n<\/code><\/pre>\n<p>\u06a9\u0648\u0688 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u0627\u0633 \u06a9\u06d2 \u067e\u06cc\u0686\u06be\u06d2 \u0645\u0648\u062c\u0648\u062f \u0686\u06cc\u0632 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2\u06d4 <code>gCallback<\/code> \u06cc\u06c1 \u062c\u0645\u0639 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u0627\u06af\u0631 \u06cc\u06c1 \u062c\u0645\u0639 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06c1\u0645 \u0627\u0633 \u067e\u0631 \u0627\u06cc\u06a9 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba. \u062a\u0635\u062f\u06cc\u0642 \u0627\u0648\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u062f\u0648 \u0627\u0644\u06af \u0627\u0644\u06af \u0645\u0631\u0627\u062d\u0644 \u06c1\u06cc\u06ba\u060c \u0627\u0648\u0631 \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0646 \u06a9\u06d2 \u062f\u0631\u0645\u06cc\u0627\u0646 \u0686\u0644 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u067e\u06be\u0631 <code>CallVoidMethod<\/code> \u0622\u067e \u06a9\u0648 \u0627\u06cc\u06a9 \u0627\u06cc\u0633\u06cc \u0686\u06cc\u0632 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u0645\u0644\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0628 \u0645\u0648\u062c\u0648\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u06cc\u06c1 \u0648\u0642\u062a \u06a9\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0646\u0635\u0627\u0628\u06cc \u06a9\u062a\u0627\u0628 \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u06a9\u0627 \u0648\u0642\u062a \u06c1\u06d2 \u0627\u0648\u0631 \u06cc\u06c1 \u0635\u0631\u0641 \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u06d2 \u062f\u0628\u0627\u0624 \u0645\u06cc\u06ba \u0646\u0638\u0631 \u0622\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u06a9 \u0645\u062d\u0641\u0648\u0638 \u0646\u0642\u0637\u06c1 \u0646\u0638\u0631 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u067e\u06c1\u0644\u06d2 \u06a9\u0633\u06cc \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u0641\u0631\u0648\u063a \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">void NotifyProgress(JNIEnv* env, jint percent) {\n  jobject callback = env->NewLocalRef(gCallback);\n  if (callback == nullptr) return;\n  env->CallVoidMethod(callback, gOnProgress, percent);\n  env->DeleteLocalRef(callback);\n}\n<\/code><\/pre>\n<p><code>NewLocalRef<\/code>    \u062f\u0648 \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u0648\u0627\u067e\u0633\u06cc <code>nullptr<\/code> (\u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u062c\u0645\u0639 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2) \u06cc\u0627 \u0627\u06cc\u06a9 \u0645\u0636\u0628\u0648\u0637 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0648\u0627\u067e\u0633 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u06d2 \u06a9\u0648\u0688 \u0645\u06cc\u06ba \u0648\u06c1 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0645\u0648\u062c\u0648\u062f \u06c1\u06d2 \u062a\u0648\u060c \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633 \u0634\u06d2 \u06a9\u0648 \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u062c\u0645\u0639 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u062a\u0627 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u062e\u062a\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u062c\u0627\u062a\u0627\u060c \u062c\u0633 \u0633\u06d2 \u06a9\u0627\u0644 \u0645\u062d\u0641\u0648\u0638 \u06c1\u0648 \u062c\u0627\u062a\u06cc \u06c1\u06d2\u06d4<\/p>\n<p><code>NewLocalRef<\/code>    \u0627\u0633\u06d2 JNI 1.2 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627 \u062a\u06be\u0627 \u0627\u0648\u0631 \u06cc\u06c1 \u062a\u0645\u0627\u0645 \u062d\u0627\u0644\u06cc\u06c1 JVMs \u0627\u0648\u0631 \u062a\u0645\u0627\u0645 Android \u0648\u0631\u0698\u0646\u0632 \u067e\u0631 \u062f\u0633\u062a\u06cc\u0627\u0628 \u06c1\u06d2\u06d4 \u062c\u0628 \u062e\u0648\u062f \u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u0646\u06c1 \u0631\u06c1\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06a9\u06d2 \u0622\u0632\u0627\u062f \u06a9\u0631\u06cc\u06ba: <code>DeleteWeakGlobalRef<\/code>\u0646\u06c1\u06cc\u06ba <code>DeleteGlobalRef<\/code>.<\/p>\n<h2 id=\"heading-pitfall-5-sharing-jnienv-across-threads\">\u0646\u0642\u0635\u0627\u0646 5: JNIEnv \u06a9\u0648 \u062a\u06be\u0631\u06cc\u0688\u0632 \u0645\u06cc\u06ba \u0634\u06cc\u0626\u0631 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u06a9\u06c1 <code>JNIEnv*<\/code> \u062a\u0645\u0627\u0645 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0631\u06cc\u0642\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u06cc\u06d2 \u06af\u0626\u06d2 \u067e\u0648\u0627\u0626\u0646\u0679\u0631\u0632 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062f\u06be\u0627\u06af\u06d2 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06cc\u06ba\u06d4 \u0641\u06cc \u062a\u06be\u0631\u06cc\u0688 \u062d\u0627\u0644\u062a \u06a9\u06cc \u0637\u0631\u0641 \u067e\u0648\u0627\u0626\u0646\u0679\u0633\u060c \u062c\u06cc\u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u062a\u0644\u0627\u0634 \u06a9\u06cc \u0645\u06cc\u0632\u06cc\u06ba \u0627\u0648\u0631 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0639\u0627\u0644\u0645\u06cc \u0633\u0637\u062d \u067e\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u0633\u06cc \u0627\u0648\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0648\u06c1 \u062d\u0627\u0644\u062a \u062e\u0631\u0627\u0628 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc\u06d4<\/p>\n<pre><code class=\"language-cpp\">static JNIEnv* gEnv;  \/\/ Bug: JNIEnv is per thread\n\nextern \"C\" JNIEXPORT void JNICALL\nJava_com_example_Downloader_start(JNIEnv* env, jobject thiz) {\n  gEnv = env;\n  std::thread([] {\n    DownloadFile();\n    gEnv->CallStaticVoidMethod(gDownloaderClass, gOnComplete);\n  }).detach();\n}\n<\/code><\/pre>\n<p>\u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0637\u0631\u06cc\u0642\u06c1 \u0627\u0633 \u06a9\u06d2 \u0645\u0648\u0627\u062f \u06a9\u0648 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>JNIEnv*<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u06cc\u06a9 \u0648\u0631\u06a9\u0631 \u062a\u06be\u0631\u06cc\u0688 \u0634\u0631\u0648\u0639 \u06c1\u0648\u062a\u0627 \u06c1\u06d2 \u062c\u0648 \u0627\u0633\u06d2 \u0688\u0627\u0624\u0646 \u0644\u0648\u0688 \u0645\u06a9\u0645\u0644 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633 \u0648\u0642\u062a \u0630\u062e\u06cc\u0631\u06c1 \u0634\u062f\u06c1 \u067e\u0648\u0627\u0626\u0646\u0679\u0631 \u062f\u0648\u0633\u0631\u06d2 \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2 (\u062c\u0633\u06d2 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u06c1\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2)\u06d4 <code>start<\/code>)\u060c \u0648\u06c1 \u062a\u06be\u0631\u06cc\u0688 \u0627\u06cc\u06a9 \u06c1\u06cc \u0648\u0642\u062a \u0645\u06cc\u06ba \u062f\u0648\u0633\u0631\u06d2 JNI \u06a9\u0648\u0688 \u067e\u0631 \u0639\u0645\u0644 \u062f\u0631\u0622\u0645\u062f \u06a9\u0631 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 CheckJNI \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 ART \u0645\u0646\u062f\u0631\u062c\u06c1 \u0630\u06cc\u0644 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>JNIEnv<\/code> \u063a\u0644\u0637 \u062a\u06be\u0631\u06cc\u0688 \u067e\u0631 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 \u0686\u06cc\u06a9 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u063a\u06cc\u0631 \u0645\u062a\u0648\u0642\u0639 \u06a9\u0631\u067e\u0634\u0646 \u06c1\u0648 \u06af\u06cc\u06d4<\/p>\n<p>\u0635\u062d\u06cc\u062d \u0646\u0645\u0648\u0646\u06c1 \u06c1\u06d2\u06d4 <code>JavaVM*<\/code>\u06cc\u06c1 \u062a\u0645\u0627\u0645 \u062a\u06be\u0631\u06cc\u0688\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0634\u06cc\u0626\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u062a\u06be\u0631\u06cc\u0688 \u062e\u0648\u062f \u0633\u06d2 \u062c\u0691\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u067e\u0646\u0627 \u062a\u06be\u0631\u06cc\u0688 \u062d\u0627\u0635\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>JNIEnv*<\/code>.<\/p>\n<pre><code class=\"language-cpp\">static JavaVM* gVm;\n\nJNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {\n  gVm = vm;\n  \/\/ Cache classes and method IDs here.\n  return JNI_VERSION_1_6;\n}\n\nvoid WorkerThread() {\n  JNIEnv* env = nullptr;\n  if (gVm->AttachCurrentThread(&env, nullptr) != JNI_OK) return;\n\n  DownloadFile();\n  env->CallStaticVoidMethod(gDownloaderClass, gOnComplete);\n  if (env->ExceptionCheck()) env->ExceptionClear();\n\n  gVm->DetachCurrentThread();\n}\n<\/code><\/pre>\n<p><code>JNI_OnLoad<\/code>    \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u06cc\u06ba <code>JavaVM*<\/code>\u06cc\u06c1 \u0639\u0645\u0644 \u06a9\u06cc \u0632\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4 \u0648\u0631\u06a9\u0631 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0627\u0644 <code>AttachCurrentThread<\/code> \u0627\u067e\u0646\u06d2 \u0622\u067e \u06a9\u0648 JVM \u0627\u0648\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0631\u062c\u0633\u0679\u0631 \u06a9\u0631\u06cc\u06ba\u06d4 <code>JNIEnv*<\/code> \u067e\u06be\u0631 \u0627\u0633\u06d2 \u062e\u0648\u062f \u06c1\u06cc \u0628\u0644\u0627 \u0644\u06cc\u06ba\u06d4 <code>DetachCurrentThread<\/code> \u0627\u0633 \u06a9\u06d2 \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2. Android NDK \u0627\u0639\u0644\u0627\u0646 \u06a9\u0631\u062a\u0627 \u06c1\u06d2: <code>AttachCurrentThread<\/code> \u0644\u06d2 \u06a9\u0631 <code>JNIEnv**<\/code>\u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e JDK \u06c1\u06cc\u0688\u0631 \u06c1\u06d2\u06d4 <code>void**<\/code>\u062a\u0648 \u0622\u067e \u06a9\u0627 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u06a9\u0648\u0688 \u06c1\u0648\u06af\u0627\u06d4 <code>reinterpret_cast<void>(&env)<\/void><\/code>.<\/p>\n<p>\u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u06a9\u0648\u0626\u06cc \u0622\u067e\u0634\u0646 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 \u0686\u0648\u0646\u06a9\u06c1 \u06a9\u0644\u06cc\u0646 \u0627\u067e \u06a9\u0648 \u0679\u0631\u06af\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u06a9\u0648\u0626\u06cc \u0628\u0646\u06cc\u0627\u062f\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u062a\u0639\u0644\u0642\u06c1 \u0645\u06cc\u0646 \u062a\u06be\u0631\u06cc\u0688 \u067e\u0631 \u0628\u0646\u0627\u0626\u06d2 \u06af\u0626\u06d2 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0622\u0632\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0635\u0631\u0641 \u0645\u0646\u0642\u0637\u0639 \u06c1\u0648\u0646\u06d2 \u067e\u0631 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631\u060c \u0627\u06d2 \u0622\u0631 \u0679\u06cc \u0627\u0633 \u0639\u0645\u0644 \u06a9\u0648 \u0631\u0648\u06a9 \u062f\u06cc\u062a\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0631\u06a9\u0632\u06cc \u062f\u06be\u0627\u06af\u06d2 \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u0646\u06a9\u0644 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u062f\u06be\u0627\u06af\u06c1 \u0627\u067e\u0646\u06cc \u067e\u0648\u0631\u06cc \u0632\u0646\u062f\u06af\u06cc \u06a9\u06d2 \u0644\u06cc\u06d2 \u062c\u0691\u0627 \u0631\u06c1\u06d2 \u06af\u0627\u060c \u062a\u0648 \u0627\u06cc\u06a9 \u0639\u0627\u0645 \u0637\u0631\u06cc\u0642\u06c1 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0648 \u0631\u062c\u0633\u0679\u0631 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2\u06d4 <code>pthread_key_create<\/code> \u06a9\u0627\u0644\u0646\u06af \u062a\u0628\u0627\u06c1 \u06a9\u0646 <code>DetachCurrentThread<\/code> \u0627\u06cc\u06a9 \u0628\u0627\u0631 \u062c\u0628 \u062a\u06be\u0631\u06cc\u0688 \u0646\u06a9\u0644 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u06a9\u0648\u0626\u06cc \u06a9\u0648\u0688 \u067e\u0627\u062a\u06be \u0627\u0633 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u0646\u06c1\u06cc\u06ba \u0628\u06be\u0648\u0644 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<p>\u0628\u06be\u06cc <code>gDownloaderClass<\/code> \u06cc\u06c1 \u0627\u06cc\u06a9 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06c1\u0648\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2 \u0627\u0646 \u0648\u062c\u0648\u06c1\u0627\u062a \u06a9\u06cc \u0628\u0646\u0627\u0621 \u067e\u0631 \u062c\u0648 \u062e\u0631\u0627\u0628\u06cc 2 \u0645\u06cc\u06ba \u0634\u0627\u0645\u0644 \u06c1\u06cc\u06ba\u06d4 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0627\u0633 \u0633\u06d2 \u0622\u06af\u06d2 \u06a9\u06d2 \u062f\u06be\u0627\u06af\u0648\u06ba \u06a9\u0648 \u0639\u0628\u0648\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u0633\u06a9\u062a\u06d2 <code>JNIEnv*<\/code> \u0622\u067e \u06cc\u06c1 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-pitfall-6-calling-findclass-from-a-native-thread\">\u067e\u0679\u0641\u0627\u0644 6: \u0645\u0642\u0627\u0645\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 FindClass \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0627\u06cc\u06a9 \u0645\u062a\u0639\u0644\u0642\u06c1 \u062d\u06cc\u0631\u062a \u0627\u0633 \u0648\u0642\u062a \u0638\u0627\u06c1\u0631 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u0646\u0626\u06d2 \u062c\u0691\u06d2 \u06c1\u0648\u0626\u06d2 \u0645\u0642\u0627\u0645\u06cc \u062f\u06be\u0627\u06af\u06d2 \u06a9\u0648 \u0637\u0644\u0628 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>FindClass<\/code> \u0627\u06cc\u067e \u06a9\u06cc \u0627\u067e\u0646\u06cc \u06a9\u0644\u0627\u0633\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u0627\u06cc\u06a9 \u06a9\u06d2 \u0644\u06cc\u06d2:<\/p>\n<pre><code class=\"language-cpp\">void WorkerThread() {\n  JNIEnv* env = nullptr;\n  gVm->AttachCurrentThread(&env, nullptr);\n  jclass cls = env->FindClass(\"com\/example\/Downloader\");  \/\/ Returns nullptr\n  \/\/ ...\n  gVm->DetachCurrentThread();\n}\n<\/code><\/pre>\n<p>\u062c\u0628 <code>FindClass<\/code> \u062c\u0628 \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u06d2 \u0627\u0646\u062f\u0631 \u0628\u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 JVM \u062c\u0627\u0648\u0627 \u06a9\u0644\u0627\u0633 \u06a9\u06d2 \u06a9\u0644\u0627\u0633 \u0644\u0648\u0688\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0633 \u0646\u06d2 \u0637\u0631\u06cc\u0642\u06c1 \u06a9\u0627\u0631 \u06a9\u0627 \u0627\u0639\u0644\u0627\u0646 \u06a9\u06cc\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0644\u0627\u0633 \u06a9\u0648 \u0635\u062d\u06cc\u062d \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062d\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062f\u06be\u0627\u06af\u0648\u06ba \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0628\u0646\u0627\u06cc\u0627 \u0627\u0648\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u06cc\u0627 \u06af\u06cc\u0627\u06d4 <code>AttachCurrentThread<\/code> \u0627\u0633\u0679\u06cc\u06a9 \u067e\u0631 \u06a9\u0648\u0626\u06cc \u062c\u0627\u0648\u0627 \u0641\u0631\u06cc\u0645 \u0646\u06c1\u06cc\u06ba \u06c1\u06cc\u06ba\u06d4 \u0627\u0633 \u0635\u0648\u0631\u062a \u0645\u06cc\u06ba\u060c JVM \u0633\u0633\u0679\u0645 \u06a9\u0644\u0627\u0633 \u0644\u0648\u0688\u0631 \u067e\u0631 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0648 \u0635\u0631\u0641 \u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u06a9\u0644\u0627\u0633\u0632 \u06a9\u06d2 \u0628\u0627\u0631\u06d2 \u0645\u06cc\u06ba \u062c\u0627\u0646\u062a\u0627 \u06c1\u06d2\u06d4 \u0627\u0633\u062a\u0641\u0633\u0627\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>FindClass<\/code> \u0631\u067e\u0648\u0631\u0679 <code>nullptr<\/code>\u0627\u0648\u0631 <code>ClassNotFoundException<\/code> \u06c1\u0648\u0644\u0688 \u067e\u0631 \u06a9\u0648\u0688 \u062c\u0648 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0642\u06cc\u0645\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0646 \u06a9\u0627\u0644\u0648\u06ba \u067e\u0631 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u062c\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba: <code>cls<\/code>.<\/p>\n<p>\u0645\u0639\u06cc\u0627\u0631\u06cc \u062d\u0644 \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0622\u067e \u06a9\u0648 \u062f\u0631\u06a9\u0627\u0631 \u062a\u0645\u0627\u0645 \u06a9\u0644\u0627\u0633\u0632 \u06a9\u0648 \u062a\u0644\u0627\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>JNI_OnLoad<\/code> (\u0622\u067e \u06a9\u06cc \u0627\u06cc\u067e\u0644\u06cc \u06a9\u06cc\u0634\u0646 \u06a9\u06d2 \u06a9\u0644\u0627\u0633 \u0644\u0648\u0688\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u062a\u0627 \u06c1\u06d2)\u060c \u06c1\u0631 \u0627\u06cc\u06a9 \u06a9\u0648 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0633\u0679\u0648\u0631 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0627\u0646\u06c1\u06cc\u06ba \u06a9\u0628\u06be\u06cc \u06a9\u0627\u0644 \u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>FindClass<\/code> \u062f\u06cc\u0633\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0645\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u06a9\u0648 \u06a9\u0644\u0627\u0633\u0648\u06ba \u06a9\u0648 \u0645\u062a\u062d\u0631\u06a9 \u0637\u0648\u0631 \u067e\u0631 \u062d\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u06d2 \u062a\u0648\u060c \u0627\u067e\u0646\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u06a9\u06d2 \u0644\u06cc\u06d2 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u06cc\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 <code>ClassLoader<\/code> \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u0631\u062a\u06d2 \u0648\u0642\u062a <code>JNI_OnLoad<\/code> \u0627\u0648\u0631 \u0645\u062c\u06be\u06d2 \u0628\u0644\u0627\u0624 <code>loadClass<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0648\u0631\u06a9\u0631 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u06d2 \u0637\u0631\u06cc\u0642\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-pitfall-7-ignoring-pending-exceptions\">\u0646\u0642\u0635\u0627\u0646 7: \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u0648 \u0646\u0638\u0631 \u0627\u0646\u062f\u0627\u0632 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0627\u06af\u0631 JNI \u06a9\u0627\u0644 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u06cc \u06c1\u06d2 \u06cc\u0627 \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u0633\u06d2 \u06a9\u0627\u0644 \u06a9\u0631\u062f\u06c1 \u062c\u0627\u0648\u0627 \u06a9\u0648\u0688 \u0645\u0633\u062a\u062b\u0646\u06cc\u0670 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0645\u0642\u0627\u0645\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u06a9\u0648 \u0622\u0632\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u0633\u06d2 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u0644\u0627\u06af \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0637\u06d2 \u0634\u062f\u06c1 \u0641\u0646\u06a9\u0634\u0646 \u0686\u0644\u062a\u0627 \u0631\u06c1\u06d2 \u06af\u0627\u06d4 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0648 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be\u0646\u0627 \u062c\u0628 \u06a9\u06c1 \u0627\u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2 \u063a\u06cc\u0631 \u0645\u062a\u0639\u06cc\u0646\u06c1 \u0633\u0644\u0648\u06a9 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">jstring name = static_cast<jstring>(env->CallObjectMethod(user, gGetName));\nconst char* utf = env->GetStringUTFChars(name, nullptr);  \/\/ Bug if getName threw\n<\/jstring><\/code><\/pre>\n<p>\u0627\u06af\u0631 <code>getName()<\/code> \u067e\u06be\u06cc\u0646\u06a9\u0646\u0627\u060c <code>CallObjectMethod<\/code> \u0631\u067e\u0648\u0631\u0679 <code>nullptr<\/code> \u0627\u0633\u062a\u062b\u0646\u06cc\u0670 \u06a9\u0648 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627 \u0686\u06be\u0648\u0691 \u062f\u06cc\u06ba\u06d4 \u0627\u06af\u0644\u06cc \u0644\u0627\u0626\u0646 \u0627\u0633 \u0633\u06d2 \u06af\u0632\u0631\u062a\u06cc \u06c1\u06d2\u06d4 <code>nullptr<\/code> ~ \u0645\u06cc\u06ba <code>GetStringUTFChars<\/code> \u0627\u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u062c\u0648 \u0627\u06cc\u06a9 \u0633\u0627\u062a\u06be \u062f\u0648 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u062a\u0648\u0691\u062a\u0627 \u06c1\u06d2 \u0627\u0628\u06be\u06cc \u062a\u06a9 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u06d4 CheckJNI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 ART \u0627\u0633 \u0637\u0631\u062d \u06a9\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2: <code>JNI GetStringUTFChars called with pending exception<\/code>. \u0627\u0633 \u06a9\u06d2 \u0628\u063a\u06cc\u0631\u060c \u0639\u0645\u0644 \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 null dereference \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<pre><code class=\"language-cpp\">jstring name = static_cast<jstring>(env->CallObjectMethod(user, gGetName));\nif (env->ExceptionCheck()) {\n  return nullptr;\n}\nconst char* utf = env->GetStringUTFChars(name, nullptr);\nif (utf == nullptr) {\n  return nullptr;\n}\n<\/jstring><\/code><\/pre>\n<p>\u06c1\u0631 \u0645\u0645\u06a9\u0646\u06c1 \u06a9\u0627\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u0641\u06a9\u0633\u0688 \u06a9\u0648\u0688 \u0686\u06cc\u06a9 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>ExceptionCheck()<\/code> \u0627\u06af\u0631 \u06a9\u0648\u0626\u06cc \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0641\u0648\u0631\u0627\u064b \u0648\u0627\u067e\u0633 \u0622\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0633\u06d2 \u0648\u0627\u067e\u0633\u06cc \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u0627\u0648\u0631 \u0645\u0641\u06cc\u062f \u06c1\u06d2\u06d4 \u062c\u06cc\u0633\u06d2 \u06c1\u06cc \u06a9\u0646\u0679\u0631\u0648\u0644 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2\u060c \u062c\u0627\u0648\u0627 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0627\u0633\u062a\u062b\u0646\u06cc\u0670 \u067e\u06be\u06cc\u0646\u06a9 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u062c\u0627\u0648\u0627 \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u0627 \u0627\u0633\u06d2 \u0628\u0627\u0642\u0627\u0639\u062f\u06c1 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u06a9\u06d2 \u0637\u0648\u0631 \u067e\u0631 \u062f\u06cc\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u06d4 <code>native<\/code> \u0637\u0631\u06cc\u0642\u06c1<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u06a9\u0627 \u0622\u0628\u0627\u0626\u06cc \u06a9\u0648\u0688 \u0627\u0633 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0646\u0627\u06a9\u0627\u0645\u06cc \u06a9\u0648 \u062e\u0648\u062f \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0631\u0646\u0627 \u0686\u0627\u06c1\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u06a9\u0627\u0644 \u06a9\u0631\u06d2 \u06af\u0627: <code>ExceptionClear()<\/code> \u0645\u0632\u06cc\u062f JNI \u06a9\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u0641\u0646\u06a9\u0634\u0646\u0632 \u06a9\u0627 \u0627\u06cc\u06a9 \u0686\u06be\u0648\u0679\u0627 \u0633\u06cc\u0679 \u062c\u06cc\u0633\u06d2: <code>DeleteLocalRef<\/code>, <code>DeleteGlobalRef<\/code>\u0627\u0648\u0631 <code>Release<\/code> \u0627\u06cc\u06a9 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u062f\u0648\u0631\u0627\u0646 \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u0648\u0627\u0636\u062d \u0637\u0648\u0631 \u067e\u0631 \u0627\u062c\u0627\u0632\u062a \u062f\u06cc \u062c\u0627\u062a\u06cc \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u06cc\u06c1 \u0648\u0627\u067e\u0633 \u0622\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0635\u0641\u0627\u0626\u06cc \u06a9\u0631\u0646\u0627 \u062c\u0627\u0631\u06cc \u0631\u06a9\u06be \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-pitfall-8-comparing-references-with-the-equality-operator\">\u0646\u0642\u0635\u0627\u0646 8: \u0645\u0633\u0627\u0648\u06cc \u0622\u067e\u0631\u06cc\u0679\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u0646\u0627<\/h2>\n<p>\u0686\u0648\u0646\u06a9\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc\u0646\u0688\u0644 \u06c1\u06d2 \u0646\u06c1 \u06a9\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u0627\u06cc\u0688\u0631\u06cc\u0633\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u062f\u0648 \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u0646\u0688\u0644\u0632 \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06d2 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-cpp\">if (listener == gListener) {  \/\/ Bug: compares handles, not objects\n  RemoveListener();\n}\n<\/code><\/pre>\n<p>\u0627\u0633 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba\u060c <code>listener<\/code> \u0645\u0648\u062c\u0648\u062f\u06c1 \u06a9\u0627\u0644 \u06a9\u0627 \u067e\u0627\u0633 \u06a9\u0631\u062f\u06c1 \u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06c1\u06d2\u06d4 <code>gListener<\/code> \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062f\u06c1 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1\u06d4 \u0627\u06af\u0631\u0686\u06c1 \u062f\u0648\u0646\u0648\u06ba \u0627\u06cc\u06a9 \u06c1\u06cc \u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0627 \u062d\u0648\u0627\u0644\u06c1 \u062f\u06cc\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0648\u06c1 \u0645\u062e\u062a\u0644\u0641 \u0679\u06cc\u0628\u0644\u0632 \u0645\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u0633\u0644\u0627\u0679\u0633 \u067e\u0631 \u0642\u0628\u0636\u06c1 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0646 \u06a9\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u06cc \u0642\u062f\u0631\u06cc\u06ba \u0645\u062e\u062a\u0644\u0641 \u06c1\u06cc\u06ba\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0645\u0648\u0627\u0632\u0646\u06c1 \u063a\u0644\u0637 \u06c1\u06d2\u06d4 \u0648\u0635\u0648\u0644 \u06a9\u0646\u0646\u062f\u06c1 \u06a9\u0648 \u06c1\u0679\u0627\u06cc\u0627 \u0646\u06c1\u06cc\u06ba \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">if (env->IsSameObject(listener, gListener)) {\n  RemoveListener();\n}\n<\/code><\/pre>\n<p><code>IsSameObject<\/code>    \u062c\u06d2 \u0648\u06cc \u0627\u06cc\u0645 \u0633\u06d2 \u067e\u0648\u0686\u06be\u062a\u0627 \u06c1\u06d2 \u06a9\u06c1 \u06a9\u06cc\u0627 \u062f\u0648\u0646\u0648\u06ba \u06c1\u06cc\u0646\u0688\u0644 \u0627\u06cc\u06a9 \u06c1\u06cc \u0622\u0628\u062c\u06cc\u06a9\u0679 (\u062c\u0627\u0648\u0627 \u0622\u0628\u062c\u06cc\u06a9\u0679) \u06a9\u0648 \u062d\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>==<\/code> \u0633\u06cc\u0645\u0646\u0679\u06a9\u0633 \u062c\u0648 \u0622\u067e \u0627\u0635\u0644 \u0645\u06cc\u06ba \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06af\u0632\u0631\u0646\u0627 <code>nullptr<\/code> \u062f\u0648\u0633\u0631\u06cc \u062f\u0644\u06cc\u0644 \u06cc\u06c1 \u0686\u06cc\u06a9 \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u0645\u0639\u06cc\u0627\u0631\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0628\u06be\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0635\u0627\u0641 \u06c1\u0648 \u06af\u06cc\u0627 \u06c1\u06d2\u06d4 \u062c\u06cc\u0633\u0627 \u06a9\u06c1 Pitfall 4 \u0645\u06cc\u06ba \u062f\u06cc\u06a9\u06be\u0627 \u06af\u06cc\u0627 \u06c1\u06d2\u060c <code>NewLocalRef<\/code> \u062c\u0628 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0622\u0626\u0679\u0645 \u06a9\u0648 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u06cc\u06c1 \u0632\u06cc\u0627\u062f\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<h2 id=\"heading-how-to-catch-reference-bugs-with-checkjni\">\u0686\u06cc\u06a9 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc\u0691\u06d2 \u06a9\u06cc\u0633\u06d2 \u067e\u06a9\u0691\u06cc\u06ba\u06d4<\/h2>\n<p>\u0627\u0633 \u0645\u0636\u0645\u0648\u0646 \u0645\u06cc\u06ba \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u06a9\u06cc\u0691\u06d2 \u06cc\u0627 \u062a\u0648 \u062d\u0627\u062f\u062b\u0627\u062a\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u062a\u062d\u0631\u06a9 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba \u06cc\u0627 \u0627\u0635\u0644 \u063a\u0644\u0637\u06cc \u0633\u06d2 \u063a\u06cc\u0631 \u0645\u062a\u0639\u0644\u0642 \u062c\u06af\u06c1\u0648\u06ba \u067e\u0631 \u06a9\u0631\u06cc\u0634 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 CheckJNI \u0627\u06cc\u06a9 \u062a\u0648\u0633\u06cc\u0639\u06cc \u062a\u0648\u062b\u06cc\u0642 \u0645\u0648\u0688 \u06c1\u06d2 \u062c\u0633 \u06a9\u06cc \u0648\u062c\u06c1 \u0633\u06d2 \u06cc\u06c1 \u063a\u0644\u0637 \u06a9\u0627\u0644 \u06a9\u06cc \u0646\u0634\u0627\u0646\u062f\u06c1\u06cc \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u067e\u06cc\u063a\u0627\u0645 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0632\u0648\u0631 \u0633\u06d2 \u0627\u0648\u0631 \u0641\u0648\u0631\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4<\/p>\n<p>\u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631\u060c \u0686\u06cc\u06a9 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0627\u0646 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0641\u0639\u0627\u0644 \u06c1\u0648 \u062c\u0627\u062a\u0627 \u06c1\u06d2 \u062c\u0646 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0628\u0646\u0627\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2: <code>android:debuggable=\"true\"<\/code> \u0627\u0648\u0631 \u0627\u06cc\u0645\u0648\u0644\u06cc\u0679\u0631 \u067e\u0631\u06d4 \u0627\u067e\u0646\u06cc \u062d\u0633\u0628 \u0636\u0631\u0648\u0631\u062a \u062a\u0639\u0645\u06cc\u0631 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0641\u0632\u06cc\u06a9\u0644 \u0688\u06cc\u0648\u0627\u0626\u0633 \u067e\u0631 \u062a\u0645\u0627\u0645 \u0627\u06cc\u067e\u0633 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0633 \u06a9\u0648 \u0632\u0628\u0631\u062f\u0633\u062a\u06cc \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u062f\u0631\u062c \u0630\u06cc\u0644 \u06a9\u0645\u0627\u0646\u0688 \u06a9\u0648 \u0686\u0644\u0627\u0626\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u06cc\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">adb shell setprop debug.checkjni 1\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u06a9 \u0633\u0633\u0679\u0645 \u067e\u0631\u0627\u067e\u0631\u0679\u06cc \u0633\u06cc\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u062c\u0648 ART \u06a9\u0648 \u0645\u0633\u062a\u0642\u0628\u0644 \u0645\u06cc\u06ba \u0634\u0631\u0648\u0639 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u062a\u0645\u0627\u0645 \u0627\u06cc\u067e \u067e\u0631\u0648\u0633\u06cc\u0633\u0632 \u06a9\u06d2 \u0644\u06cc\u06d2 CheckJNI \u06a9\u0648 \u0641\u0639\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06c1\u062f\u0627\u06cc\u062a \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u067e\u06c1\u0644\u06d2 \u0633\u06d2 \u0686\u0644 \u0631\u06c1\u06d2 \u0639\u0645\u0644 \u06a9\u0648 \u0645\u062a\u0627\u062b\u0631 \u0646\u06c1\u06cc\u06ba \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06c1\u0630\u0627 \u0622\u067e \u06a9\u0648 \u0627\u06cc\u067e \u06a9\u0648 \u062f\u0648\u0628\u0627\u0631\u06c1 \u0634\u0631\u0648\u0639 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u06af\u06cc\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 ART \u062a\u0645\u0627\u0645 JNI \u06a9\u0627\u0644\u0648\u06ba \u06a9\u06cc \u062a\u0648\u062b\u06cc\u0642 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0628\u0627\u0633\u06cc \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a\u060c \u063a\u0644\u0637 \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0634\u062f\u06c1 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a\u060c \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0627\u0633\u062a\u062b\u0646\u0627\u0621 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u0627\u0644\u0632\u060c <code>JNIEnv*<\/code> \u063a\u0644\u0637 \u062f\u06be\u0627\u06af\u06d2 \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06c1\u0648\u0646\u06d2 \u0648\u0627\u0644\u0627 \u067e\u0648\u0627\u0626\u0646\u0679\u0631\u060c \u0645\u0645\u0627\u062b\u0644 \u0646\u06c1\u06cc\u06ba\u06d4 <code>Release<\/code> \u06a9\u0627\u0644 \u0627\u0648\u0631 \u063a\u0644\u0637 \u0637\u0631\u06cc\u0642\u06c1 ID\u06d4 \u0627\u06af\u0631 \u0686\u06cc\u06a9 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 ART \u067e\u0631\u0646\u0679 \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>JNI DETECTED ERROR IN APPLICATION<\/code> \u0627\u0633 \u06a9\u0648 \u0644\u0627\u06af \u06a9\u06cc\u0679 \u0645\u06cc\u06ba \u0645\u0633\u0626\u0644\u06d2 \u06a9\u06cc \u062a\u0641\u0635\u06cc\u0644 \u0627\u0648\u0631 \u0628\u0646\u06cc\u0627\u062f\u06cc \u0627\u0633\u0679\u06cc\u06a9 \u0679\u0631\u06cc\u0633 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0644\u0627\u06af \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u067e\u06be\u0631 \u0627\u0633\u0642\u0627\u0637 \u06c1\u0648\u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e JVM \u067e\u0631 \u0622\u067e \u067e\u0627\u0633 \u06a9\u0631\u06cc\u06ba \u06af\u06d2: <code>-Xcheck:jni<\/code> \u0627\u0633 \u06a9\u06d2 \u0628\u062c\u0627\u0626\u06d2 \u0628\u0631\u0627\u06c1 \u06a9\u0631\u0645 \u0627\u0633\u06d2 \u062c\u06be\u0646\u0688\u0627 \u0644\u06af\u0627\u0626\u06cc\u06ba\u06d4<\/p>\n<pre><code class=\"language-bash\">java -Xcheck:jni -Djava.library.path=build\/libs -jar app.jar\n<\/code><\/pre>\n<p>\u06cc\u06c1 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0648 \u06c1\u0627\u0679 \u0627\u0633\u067e\u0627\u0679 \u06a9\u06d2 JNI \u0645\u0639\u0627\u0626\u0646\u06c1 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0686\u0644\u0627\u0626\u06d2 \u06af\u0627 \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0633 \u0633\u06d2 \u0644\u0648\u0688 \u06a9\u0631\u06d2 \u06af\u0627: <code>build\/libs<\/code>. HotSpot \u0627\u0633\u06cc \u0637\u0631\u062d \u06a9\u06d2 \u0628\u06c1\u062a \u0633\u06d2 \u0645\u0633\u0627\u0626\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u0646\u062a\u0628\u0627\u06c1\u0627\u062a \u067e\u0631\u0646\u0679 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u062c\u06cc\u0633\u06d2 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06cc\u0627 \u063a\u0644\u0637 \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u06d2 \u0633\u0627\u062a\u06be \u06a9\u06cc \u06af\u0626\u06cc \u06a9\u0627\u0644\u0632\u06d4 \u0686\u06cc\u06a9\u0646\u06af \u0639\u0627\u0645 \u0637\u0648\u0631 \u067e\u0631 ART \u06a9\u06d2 \u0645\u0642\u0627\u0628\u0644\u06d2 \u0645\u06cc\u06ba \u06a9\u0645 \u0633\u062e\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062c\u0633 \u06a9\u06d2 \u0646\u062a\u06cc\u062c\u06d2 \u0645\u06cc\u06ba \u0627\u06cc\u0633\u06cc \u0627\u06cc\u067e\u0633 \u06c1\u0648\u062a\u06cc \u06c1\u06cc\u06ba \u062c\u0648 \u0645\u0627\u062d\u0648\u0644 \u0645\u06cc\u06ba \u0635\u0627\u0641 \u0633\u062a\u06be\u0631\u0627 \u0686\u0644\u062a\u06cc \u06c1\u06cc\u06ba: <code>-Xcheck:jni<\/code> \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u067e\u0631 \u062c\u06d2 \u0627\u06cc\u0646 \u0622\u0626\u06cc \u06a9\u06cc \u062c\u0627\u0646\u0686 \u067e\u0691\u062a\u0627\u0644 \u0627\u0628 \u0628\u06be\u06cc \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u067e\u0631 \u0646\u0627\u06a9\u0627\u0645 \u06c1\u0648 \u0633\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u062f\u0648\u0646\u0648\u06ba \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645\u0632 \u067e\u0631 \u0641\u0639\u0627\u0644 \u06a9\u0631\u062f\u06c1 CheckJNI \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0679\u06cc\u0633\u0679 \u0686\u0644\u0627\u0646\u06d2\u060c \u0628\u0634\u0645\u0648\u0644 \u0648\u06c1 \u0679\u06cc\u0633\u0679 \u062c\u0648 \u0628\u0691\u06cc \u0635\u0641\u0648\u06ba \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0645\u0642\u0627\u0645\u06cc \u062f\u06be\u0627\u06af\u0648\u06ba \u067e\u0631 \u0622\u067e\u0631\u06cc\u0634\u0646\u0632 \u0686\u0644\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0648 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u06cc \u062e\u0631\u0627\u0628\u06cc\u0648\u06ba \u06a9\u0648 \u0627\u0646 \u06a9\u06d2 \u062c\u0627\u0631\u06cc \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u0628\u06c1\u062a \u067e\u06c1\u0644\u06d2 \u067e\u06a9\u0691\u0646\u06d2 \u0645\u06cc\u06ba \u0645\u062f\u062f \u0645\u0644\u06d2 \u06af\u06cc\u06d4<\/p>\n<h2 id=\"heading-how-to-manage-references-safely-with-raii\">RAII \u06a9\u06d2 \u0633\u0627\u062a\u06be \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0627 \u0645\u062d\u0641\u0648\u0638 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u06cc\u0633\u06d2 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<p>\u063a\u06cc\u0631 \u0641\u0639\u0627\u0644\u06cc <code>DeleteLocalRef<\/code> \u0627\u0648\u0631 <code>DeleteGlobalRef<\/code> \u06a9\u0627\u0644 \u06a9\u0631\u0646\u0627 \u0628\u06be\u0648\u0644\u0646\u0627 \u0622\u0633\u0627\u0646 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u062e\u0627\u0635 \u0637\u0648\u0631 \u067e\u0631 \u0627\u0628\u062a\u062f\u0627\u0626\u06cc \u0648\u0627\u067e\u0633\u06cc \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u062f\u0631\u0633\u062a \u06c1\u06d2\u06d4 C++ \u0645\u06cc\u06ba\u060c \u0622\u067e \u06a9\u0633\u06cc \u062f\u0627\u0626\u0631\u06c1 \u06a9\u0627\u0631 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06d2 \u06a9\u06cc \u0632\u0646\u062f\u06af\u06cc \u06a9\u0648 \u0627\u0633\u06cc \u0637\u0631\u062d \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>std::unique_ptr<\/code> \u06c1\u06cc\u067e \u0645\u06cc\u0645\u0648\u0631\u06cc \u06a9\u0627 \u0627\u0646\u062a\u0638\u0627\u0645 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">template <typename t=\"\">\nclass ScopedLocalRef {\n public:\n  ScopedLocalRef(JNIEnv* env, T ref) : env_(env), ref_(ref) {}\n  ~ScopedLocalRef() {\n    if (ref_ != nullptr) env_->DeleteLocalRef(ref_);\n  }\n  ScopedLocalRef(const ScopedLocalRef&) = delete;\n  ScopedLocalRef& operator=(const ScopedLocalRef&) = delete;\n\n  T get() const { return ref_; }\n\n private:\n  JNIEnv* env_;\n  T ref_;\n};\n<\/typename><\/code><\/pre>\n<p><code>ScopedLocalRef<\/code>    \u06cc\u06c1 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u0644\u06cc\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0688\u0633\u0679\u0631\u06a9\u0679\u0631 \u0645\u06cc\u06ba \u062d\u0630\u0641 \u06a9\u0631 \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0633 \u0644\u06cc\u06d2 \u0627\u0633 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u0622\u0632\u0627\u062f \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2 (\u0639\u0627\u0645 \u062a\u06a9\u0645\u06cc\u0644\u060c \u062c\u0644\u062f \u062a\u06a9\u0645\u06cc\u0644) \u0627\u0633 \u0633\u06d2 \u0642\u0637\u0639 \u0646\u0638\u0631 \u06a9\u06c1 \u0628\u0646\u062f \u06a9\u0631\u0646\u06d2 \u06a9\u0627 \u062f\u0627\u0626\u0631\u06c1 \u06a9\u06cc\u0633\u06d2 \u062e\u062a\u0645 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u06d4 <code>return<\/code>\u06cc\u0627 C++ \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a)\u06d4 \u06a9\u0627\u067e\u06cc \u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631 \u0627\u0648\u0631 \u06a9\u0627\u067e\u06cc \u0627\u0633\u0627\u0626\u0646\u0645\u0646\u0679 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062f\u06cc\u0627 \u06af\u06cc\u0627 \u06c1\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u06cc\u06a9 \u06c1\u06cc \u06c1\u06cc\u0646\u0688\u0644 \u0648\u0627\u0644\u06d2 \u062f\u0648\u0646\u0648\u06ba \u0631\u06cc\u067e\u0631\u0632 \u0627\u0633\u06d2 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06a9\u06c1 <code>get()<\/code> \u0637\u0631\u06cc\u0642\u06c1 JNI \u0641\u0646\u06a9\u0634\u0646 \u06a9\u0648 \u067e\u0627\u0633 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0627\u06cc\u06a9 \u062e\u0627\u0645 \u06c1\u06cc\u0646\u0688\u0644 \u0644\u0648\u0679\u0627\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u0633 \u0631\u06cc\u067e\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2\u060c \u067e\u0679\u0641\u0627\u0644 1 \u06a9\u0627 \u0644\u0648\u067e \u0686\u06be\u0648\u0679\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0644\u06cc\u06a9 \u0646\u06c1\u06cc\u06ba \u06c1\u0648 \u0633\u06a9\u062a\u0627\u06d4<\/p>\n<pre><code class=\"language-cpp\">for (jsize i = 0; i < count; i++) {\n  ScopedLocalRef<jstring> name(\n      env, static_cast<jstring>(env->GetObjectArrayElement(names, i)));\n  const char* utf = env->GetStringUTFChars(name.get(), nullptr);\n  if (utf == nullptr) return;\n  LogName(utf);\n  env->ReleaseStringUTFChars(name.get(), utf);\n}\n<\/jstring><\/jstring><\/code><\/pre>\n<p>\u06c1\u0631 \u062a\u06a9\u0631\u0627\u0631 \u06c1\u06d2\u06d4 <code>ScopedLocalRef<\/code> \u0635\u0641 \u06a9\u06d2 \u0639\u0646\u0627\u0635\u0631 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u0688\u0633\u0679\u0631\u06a9\u0679\u0631 \u06a9\u0648 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u06d2 \u0627\u062e\u062a\u062a\u0627\u0645 \u067e\u0631 \u06cc\u0627 \u0634\u0631\u0648\u0639 \u0645\u06cc\u06ba \u0639\u0645\u0644 \u0645\u06cc\u06ba \u0644\u0627\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 <code>return<\/code>. \u06a9\u0648\u0626\u06cc \u0648\u0627\u0636\u062d \u0645\u0648\u0627\u062f \u0646\u06c1\u06cc\u06ba \u06c1\u06d2\u06d4 <code>DeleteLocalRef<\/code> \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0633\u06d2 \u0628\u06be\u06cc \u06a9\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u0627\u0648\u0631 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0648\u0627\u067e\u0633\u06cc \u06a9\u0627 \u062f\u0648\u0633\u0631\u0627 \u0631\u0627\u0633\u062a\u06c1 \u0634\u0627\u0645\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0631\u0633\u0627\u0648 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u06af\u0627\u06d4<\/p>\n<p>\u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0627\u06cc\u06a9 \u0627\u06c1\u0645 \u0641\u0631\u0642 \u06a9\u06d2 \u0633\u0627\u062a\u06be \u0627\u06cc\u06a9 \u06c1\u06cc \u062e\u06cc\u0627\u0644 \u06a9\u06cc \u067e\u06cc\u0631\u0648\u06cc \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0688\u0633\u0679\u0631\u06a9\u0679\u0631\u0632 \u0631\u06cc\u0641\u0631\u0646\u0633 \u0628\u0646\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u06d2 \u0645\u062e\u062a\u0644\u0641 \u062a\u06be\u0631\u06cc\u0688 \u067e\u0631 \u0686\u0644 \u0633\u06a9\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>JNIEnv*<\/code>. \u0628\u062c\u0627\u0626\u06d2\u060c <code>JavaVM*<\/code> \u062c\u0628 \u0622\u067e \u06a9\u0648 \u06a9\u0633\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0636\u0631\u0648\u0631\u062a \u06c1\u0648\u062a\u06cc \u06c1\u06d2\u060c \u062a\u0648 \u0622\u067e \u06a9\u0648 \u0645\u0648\u062c\u0648\u062f\u06c1 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0627 \u0645\u0627\u062d\u0648\u0644 \u0645\u0644\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<pre><code class=\"language-cpp\">class ScopedGlobalRef {\n public:\n  ScopedGlobalRef(JNIEnv* env, jobject obj)\n      : ref_(obj ? env->NewGlobalRef(obj) : nullptr) {\n    env->GetJavaVM(&vm_);\n  }\n  ~ScopedGlobalRef() {\n    JNIEnv* env = nullptr;\n    if (ref_ != nullptr &&\n        vm_->GetEnv(reinterpret_cast<void>(&env), JNI_VERSION_1_6) == JNI_OK) {\n      env->DeleteGlobalRef(ref_);\n    }\n  }\n  ScopedGlobalRef(const ScopedGlobalRef&) = delete;\n  ScopedGlobalRef& operator=(const ScopedGlobalRef&) = delete;\n\n  jobject get() const { return ref_; }\n\n private:\n  JavaVM* vm_ = nullptr;\n  jobject ref_;\n};\n<\/void><\/code><\/pre>\n<p>\u06a9\u0646\u0633\u0679\u0631\u06a9\u0679\u0631 \u06a9\u0633\u06cc \u0628\u06be\u06cc \u0645\u0642\u0627\u0645\u06cc \u06cc\u0627 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0633\u06d2 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u0631\u06cc\u06a9\u0627\u0631\u0688 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>JavaVM*<\/code>. \u062a\u0628\u0627\u06c1 \u06a9\u0646 \u0627\u0633\u06d2 \u06a9\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 <code>GetEnv<\/code> \u062d\u0627\u0635\u0644 \u06a9\u0631\u0646\u06d2 \u06a9\u06d2 \u0644\u0626\u06d2 <code>JNIEnv*<\/code> \u06cc\u06c1 \u0635\u0631\u0641 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2 \u0627\u06af\u0631 \u06cc\u06c1 \u06a9\u0633\u06cc \u062a\u06be\u0631\u06cc\u0688 \u0645\u06cc\u06ba \u0686\u0644\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0648\u06c1 \u062a\u06be\u0631\u06cc\u0688 JVM \u0633\u06d2 \u0645\u0646\u0633\u0644\u06a9 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06af\u0631 \u0688\u0633\u0679\u0631\u06a9\u0679\u0631 \u063a\u06cc\u0631 \u0645\u0646\u0633\u0644\u06a9 \u062f\u06be\u0627\u06af\u06d2 \u067e\u0631 \u0686\u0644\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u06cc\u06c1 \u0633\u0627\u062f\u06c1 \u0648\u0631\u0698\u0646 \u06a9\u0631\u06cc\u0634 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0628\u062c\u0627\u0626\u06d2 \u0627\u06cc\u06a9 \u062d\u0648\u0627\u0644\u06c1 \u0644\u06cc\u06a9 \u06a9\u0631 \u062f\u06d2 \u06af\u0627\u06d4 \u067e\u0631\u0648\u0688\u06a9\u0634\u0646 \u0648\u0631\u0698\u0646 \u0622\u067e \u06a9\u0648 \u0639\u0627\u0631\u0636\u06cc \u0637\u0648\u0631 \u067e\u0631 \u0645\u0646\u0633\u0644\u06a9 \u06a9\u0631\u06a9\u06d2 \u06cc\u0627 \u0644\u06cc\u06a9 \u06a9\u0648 \u0644\u0627\u06af \u06a9\u0631\u06a9\u06d2 \u0645\u0637\u0644\u0639 \u06a9\u0631\u06d2 \u06af\u0627\u06d4 \u0627\u06cc\u0646\u0688\u0631\u0627\u0626\u06cc\u0688 \u06a9\u0627 \u067e\u0644\u06cc\u0679 \u0641\u0627\u0631\u0645 \u06a9\u0648\u0688 \u062e\u0648\u062f \u0627\u0633\u06cc \u067e\u06cc\u0679\u0631\u0646 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 <code>ScopedLocalRef<\/code> \u0627\u06af\u0631 \u0622\u067e \u062e\u0648\u062f \u0644\u06a9\u06be\u0646\u0627 \u0646\u06c1\u06cc\u06ba \u0686\u0627\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0648 \u0645\u062f\u062f\u06af\u0627\u0631 \u0627\u0648\u0631 fbjni \u062c\u06cc\u0633\u06cc \u0644\u0627\u0626\u0628\u0631\u06cc\u0631\u06cc\u0627\u06ba \u062f\u0648\u0646\u0648\u06ba \u0631\u06cc\u067e\u0631\u0632 \u06a9\u06d2 \u0645\u06a9\u0645\u0644 \u0679\u06cc\u0633\u0679 \u0634\u062f\u06c1 \u0648\u0631\u0698\u0646 \u0641\u0631\u0627\u06c1\u0645 \u06a9\u0631\u062a\u06cc \u06c1\u06cc\u06ba\u06d4<\/p>\n<h2 id=\"heading-reference-types-compared\">\u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645 \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u062c\u0627\u0626\u06cc\u062f\u0627\u062f<\/th>\n<th>\u0645\u0642\u0627\u0645\u06cc<\/th>\n<th>\u0639\u0627\u0644\u0645\u06cc<\/th>\n<th>\u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u067e\u0648\u0633\u0679 \u06a9\u0631\u062f\u06c1 \u0628\u0630\u0631\u06cc\u0639\u06c1:<\/td>\n<td>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u0627\u0641\u0639\u0627\u0644<\/td>\n<td><code>NewGlobalRef<\/code><\/td>\n<td><code>NewWeakGlobalRef<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u0645\u06cc\u0639\u0627\u062f \u062e\u062a\u0645 \u06c1\u0648\u0646\u06d2 \u06a9\u06cc \u0645\u062f\u062a<\/td>\n<td>\u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0648\u0627\u067e\u0633\u06cc<\/td>\n<td><code>DeleteGlobalRef<\/code><\/td>\n<td><code>DeleteWeakGlobalRef<\/code><\/td>\n<\/tr>\n<tr>\n<td>\u062f\u0648\u0633\u0631\u06d2 \u062f\u06be\u0627\u06af\u0648\u06ba \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06c1 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<\/tr>\n<tr>\n<td>\u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0632\u0646\u062f\u06c1 \u0631\u06a9\u06be\u0646\u0627<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<td>\u06c1\u0627\u06ba<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<\/tr>\n<tr>\n<td>\u062e\u0648\u062f \u06a9\u0627\u0631 \u0637\u0631\u06cc\u0642\u06d2 \u0633\u06d2 \u062c\u0627\u0631\u06cc<\/td>\n<td>\u06c1\u0627\u06ba \u0648\u0627\u067e\u0633\u06cc \u06cc\u0627 \u0639\u0644\u06cc\u062d\u062f\u06af\u06cc \u067e\u0631<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<td>\u0646\u06c1\u06cc\u06ba<\/td>\n<\/tr>\n<tr>\n<td>\u0639\u0627\u0645 \u0627\u0633\u062a\u0639\u0645\u0627\u0644<\/td>\n<td>\u0627\u06cc\u06a9 \u06a9\u0627\u0644 \u0645\u06cc\u06ba \u0639\u0627\u0631\u0636\u06cc \u0642\u062f\u0631<\/td>\n<td>\u06a9\u06cc\u0634\u0688 \u06a9\u0644\u0627\u0633\u0632\u060c \u0645\u0644\u06a9\u06cc\u062a\u06cc \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633<\/td>\n<td>\u0627\u0646 \u0627\u0634\u06cc\u0627\u0621 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06a9\u0627\u0644 \u0628\u06cc\u06a9\u0633 \u062c\u0646 \u06a9\u06cc \u0645\u0644\u06a9\u06cc\u062a \u0645\u0642\u0627\u0645\u06cc \u06a9\u0648\u0688 \u06a9\u06d2 \u067e\u0627\u0633 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u0646\u06cc \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u062c\u062f\u0648\u0644 \u062a\u06cc\u0646 \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u06cc \u0627\u0642\u0633\u0627\u0645 \u06a9\u0627 \u062e\u0644\u0627\u0635\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4 &quot;\u0628\u06c1\u062a\u0631\u06cc\u0646 \u067e\u06c1\u0644\u06d2&#8221; \u0644\u0627\u0626\u0646 \u0628\u06cc\u0627\u0646 \u06a9\u0631\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0628 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u0646\u06c1\u06cc\u06ba \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u060c \u0627\u0648\u0631 &quot;\u0622\u0679\u0648 \u0631\u06cc\u0644\u06cc\u0632&#8221; \u0644\u0627\u0626\u0646 \u06cc\u06c1 \u0628\u062a\u0627\u062a\u06cc \u06c1\u06d2 \u06a9\u06c1 \u0622\u06cc\u0627 JVM \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u06c1\u06cc\u0646\u0688\u0644 \u06a9\u0648 \u0635\u0627\u0641 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u0627\u06c1\u0645 \u0628\u0627\u062a \u06cc\u06c1 \u06c1\u06d2 \u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06c1\u06cc \u0648\u0627\u062d\u062f \u0642\u0633\u0645 \u06c1\u06cc\u06ba \u062c\u0633\u06d2 JVM \u0635\u0627\u0641 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06cc\u06c1 \u0633\u06c1\u0648\u0644\u062a \u0622\u067e \u06a9\u0648 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u06a9\u0631\u0646\u06d2 \u06cc\u0627 \u0634\u06cc\u0626\u0631 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0631\u0648\u06a9\u062a\u06cc \u06c1\u06d2\u06d4 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u0630\u062e\u06cc\u0631\u06c1 \u0627\u0648\u0631 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u06c1\u0631 \u062d\u0648\u0627\u0644\u06c1 \u0627\u06cc\u06a9 \u0645\u0633\u062a\u0642\u0644 GC \u062c\u0691 \u06c1\u06d2 \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062d\u0630\u0641 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u06d4 \u0627\u06cc\u06a9 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0622\u0628\u062c\u06cc\u06a9\u0679 \u06a9\u0648 \u0628\u063a\u06cc\u0631 \u067e\u0646 \u0644\u06af\u0627\u0626\u06d2 \u0627\u0633\u06d2 \u0627\u0633\u0679\u0648\u0631 \u0627\u0648\u0631 \u0634\u06cc\u0626\u0631 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u0627\u062c\u0627\u0632\u062a \u062f\u06cc\u062a\u0627 \u06c1\u06d2\u060c \u0644\u06cc\u06a9\u0646 \u062c\u0628 \u0628\u06be\u06cc \u0627\u0633\u06d2 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u062a\u0648 \u0627\u0633\u06d2 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0645\u06cc\u06ba \u0641\u0631\u0648\u063a \u062f\u06cc\u0627 \u062c\u0627\u0646\u0627 \u0686\u0627\u06c1\u06cc\u06d2\u06d4<\/p>\n<h2 id=\"heading-summary\">\u062e\u0644\u0627\u0635\u06c1<\/h2>\n<p>\u06c1\u0631 JNI \u062d\u0648\u0627\u0644\u06c1 JVM \u0645\u06cc\u0646\u062c\u0645\u0646\u0679 \u0679\u06cc\u0628\u0644 \u0645\u06cc\u06ba \u0627\u06cc\u06a9 \u0633\u0644\u0627\u0679 \u06a9\u0627 \u06c1\u06cc\u0646\u0688\u0644 \u06c1\u0648\u062a\u0627 \u06c1\u06d2\u060c \u0627\u0648\u0631 \u06c1\u0631 \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06cc \u0642\u0633\u0645 \u06a9\u06cc \u0648\u0636\u0627\u062d\u062a \u0627\u0633 \u0648\u0642\u062a \u0633\u06d2 \u06c1\u0648\u062a\u06cc \u06c1\u06d2 \u062c\u0628 \u0627\u0633 \u0633\u0644\u0627\u0679 \u06a9\u0648 \u0622\u0632\u0627\u062f \u06a9\u06cc\u0627 \u062c\u0627\u062a\u0627 \u06c1\u06d2\u06d4 \u062c\u0628 \u0627\u06cc\u06a9 \u0645\u0642\u0627\u0645\u06cc \u0637\u0631\u06cc\u0642\u06c1 \u0648\u0627\u067e\u0633 \u0622\u062a\u0627 \u06c1\u06d2 \u0627\u0648\u0631 \u0627\u06cc\u06a9 \u06c1\u06cc \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u062a\u0639\u0644\u0642 \u0631\u06a9\u06be\u062a\u0627 \u06c1\u06d2\u060c \u062a\u0648 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0636\u0627\u0626\u0639 \u06c1\u0648 \u062c\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0627\u0633 \u0648\u0642\u062a \u062a\u06a9 \u0628\u0627\u0642\u06cc \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba \u062c\u0628 \u062a\u06a9 \u06a9\u06c1 \u062d\u0630\u0641 \u0646\u06c1 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u0627\u0648\u0631 \u0627\u0633\u06d2 \u06a9\u06c1\u06cc\u06ba \u0628\u06be\u06cc \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u062a\u0627 \u06c1\u06d2\u06d4 \u06a9\u0645\u0632\u0648\u0631 \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u062d\u0630\u0641 \u06c1\u0648\u0646\u06d2 \u062a\u06a9 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06c1\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u0644\u06cc\u06a9\u0646 \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u0648 \u0632\u0646\u062f\u06c1 \u0646\u06c1\u06cc\u06ba \u0631\u06a9\u06be\u062a\u06d2\u06d4<\/p>\n<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u0627\u0646 \u0627\u0635\u0648\u0644\u0648\u06ba \u0645\u06cc\u06ba \u0633\u06d2 \u06a9\u0633\u06cc \u0627\u06cc\u06a9 \u06a9\u06cc \u062e\u0644\u0627\u0641 \u0648\u0631\u0632\u06cc \u06a9\u0627 \u0628\u0631\u0627\u06c1 \u0631\u0627\u0633\u062a \u0646\u062a\u06cc\u062c\u06c1 \u06c1\u06cc\u06ba\u06d4 \u0627\u06af\u0631 \u0622\u067e \u0627\u0633\u06d2 \u0622\u0632\u0627\u062f \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u0644\u0648\u067e \u0645\u06cc\u06ba \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0645\u0642\u0627\u0645\u06cc \u062c\u062f\u0648\u0644 \u0628\u06c1\u06c1 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>DeleteLocalRef<\/code> \u06cc\u0627 <code>PushLocalFrame<\/code> \u0627\u0648\u0631 <code>PopLocalFrame<\/code> \u0631\u0648\u06a9\u06cc\u06ba \u0627\u06af\u0631 \u0622\u067e \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u06d2 \u0644\u06cc\u06d2 \u0645\u0642\u0627\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u0645\u062d\u0641\u0648\u0638 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba\u060c \u062a\u0648 \u0622\u067e \u06a9\u06d2 \u067e\u0627\u0633 \u0627\u06cc\u06a9 \u0628\u0627\u0633\u06cc \u06c1\u06cc\u0646\u0688\u0644 \u0631\u06c1 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 <code>NewGlobalRef<\/code> \u0627\u0635\u0644\u0627\u062d \u0639\u0627\u0644\u0645\u06cc \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0648 \u062d\u0630\u0641 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u062a\u062e\u0644\u06cc\u0642 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u0645\u06cc\u0645\u0648\u0631\u06cc \u0644\u06cc\u06a9 \u06c1\u0648 \u062c\u0627\u0626\u06d2 \u06af\u06cc \u0627\u0648\u0631 \u0628\u0627\u0644\u0622\u062e\u0631 \u0639\u0627\u0644\u0645\u06cc \u062c\u062f\u0648\u0644 \u06a9\u0648 \u0627\u0648\u0648\u0631 \u0641\u0644\u0648 \u06a9\u0631 \u062f\u06cc\u0627 \u062c\u0627\u0626\u06d2 \u06af\u0627\u06d4 \u067e\u06c1\u0644\u06d2 \u0627\u0646 \u06a9\u06cc \u062a\u0634\u06c1\u06cc\u0631 \u06a9\u06cc\u06d2 \u0628\u063a\u06cc\u0631 \u06a9\u0645\u0632\u0648\u0631 \u062d\u0648\u0627\u0644\u0648\u06ba \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u0627 <code>NewLocalRef<\/code> \u06a9\u0648\u0691\u0627 \u0627\u0679\u06be\u0627\u0646\u06d2 \u0648\u0627\u0644\u06d2 \u0633\u06d2 \u0645\u0642\u0627\u0628\u0644\u06c1 \u06a9\u0631\u062a\u0627 \u06c1\u06d2\u06d4<\/p>\n<p>\u062a\u06be\u0631\u06cc\u0688\u0646\u06af \u06a9\u06d2 \u0627\u0635\u0648\u0644 \u0627\u062a\u0646\u06d2 \u06c1\u06cc \u0627\u06c1\u0645 \u06c1\u06cc\u06ba\u06d4 \u06a9\u0648\u0626\u06cc \u0631\u0627\u0633\u062a\u06c1 \u0646\u06c1\u06cc\u06ba <code>JNIEnv*<\/code> \u06a9\u06cc\u0634\u06d2 \u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0627\u0633 \u06a9\u0627 \u062a\u0639\u0644\u0642 \u0627\u06cc\u06a9 \u062f\u06be\u0627\u06af\u06d2 \u0633\u06d2 \u06c1\u06d2\u06d4 <code>JavaVM*<\/code> JNI \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2\u060c \u06c1\u0631 \u0645\u0631\u06a9\u0632\u06cc \u062f\u06be\u0627\u06af\u06d2 \u06a9\u0648 \u062c\u0648\u0691\u06cc\u06ba \u0627\u0648\u0631 \u067e\u06be\u0631 \u062f\u06be\u0627\u06af\u06d2 \u06a9\u06d2 \u0628\u0627\u06c1\u0631 \u06c1\u0648\u0646\u06d2 \u0633\u06d2 \u067e\u06c1\u0644\u06d2 \u0627\u0644\u06af \u06a9\u0631\u06cc\u06ba\u06d4 \u0627\u06cc\u067e\u0644\u06cc\u06a9\u06cc\u0634\u0646 \u06a9\u0644\u0627\u0633 \u0631\u06cc\u0632\u0648\u0644\u0648\u0634\u0646 <code>JNI_OnLoad<\/code>\u06a9\u06cc\u0648\u0646\u06a9\u06c1 \u0645\u0642\u0627\u0645\u06cc \u062f\u06be\u0627\u06af\u06c1 \u0628\u0639\u062f \u0645\u06cc\u06ba \u0627\u0633\u06d2 \u062a\u0644\u0627\u0634 \u0646\u06c1\u06cc\u06ba \u06a9\u0631 \u0633\u06a9\u06d2 \u06af\u0627\u06d4 \u0632\u06cc\u0631 \u0627\u0644\u062a\u0648\u0627\u0621 \u0645\u0633\u062a\u062b\u0646\u06cc\u0627\u062a \u06a9\u0648 \u0686\u06cc\u06a9 \u06a9\u0631\u06cc\u06ba \u0627\u0648\u0631 \u0622\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06c1\u0631 \u06a9\u0627\u0644 \u06a9\u06d2 \u0628\u0639\u062f \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u06a9\u0627 \u0645\u0648\u0627\u0632\u0646\u06c1 \u06a9\u0631\u06cc\u06ba\u06d4 <code>IsSameObject<\/code> \u0628\u0644\u06a9\u06c1 <code>==<\/code>.<\/p>\n<p>\u0622\u062e\u0631 \u0645\u06cc\u06ba\u060c \u0679\u0648\u0644\u0632 \u06a9\u06d2 \u0630\u0631\u06cc\u0639\u06d2 \u0627\u0646 \u0627\u0635\u0648\u0644\u0648\u06ba \u06a9\u0648 \u0644\u0627\u06af\u0648 \u06a9\u0631\u0646\u06d2 \u06a9\u06cc \u06a9\u0648\u0634\u0634 \u06a9\u0631\u06cc\u06ba\u06d4 Android \u067e\u0631 CheckJNI \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u0648\u0626\u06d2 \u0679\u06cc\u0633\u0679 \u0686\u0644 \u0631\u06c1\u0627 \u06c1\u06d2\u06d4 <code>-Xcheck:jni<\/code> \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u06a9\u0627 \u0633\u0627\u0645\u0646\u0627 \u06a9\u0631\u0646\u06d2 \u0648\u0627\u0644\u06cc \u06a9\u0627\u0644\u0648\u06ba \u067e\u0631 \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0628\u0686\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2\u060c \u06c1\u0645 RAII \u0631\u06cc\u067e\u0631 \u06a9\u0627 \u0627\u0633\u062a\u0639\u0645\u0627\u0644 \u06a9\u0631\u062a\u06d2 \u06c1\u06cc\u06ba \u062a\u0627\u06a9\u06c1 \u06cc\u06c1 \u06cc\u0642\u06cc\u0646\u06cc \u0628\u0646\u0627\u06cc\u0627 \u062c\u0627 \u0633\u06a9\u06d2 \u06a9\u06c1 \u0688\u06cc\u0631\u06cc\u0641\u0631\u0646\u0633 \u062e\u0648\u062f \u0628\u062e\u0648\u062f \u0648\u0627\u0642\u0639 \u06c1\u0648 \u062c\u0627\u0626\u06d2\u060c \u0628\u062c\u0627\u0626\u06d2 \u0627\u0633 \u06a9\u06d2 \u06a9\u06c1 \u0688\u06cc\u0633\u06a9 \u0679\u0627\u067e \u067e\u0631 \u0688\u06cc\u0631\u06cc\u0641\u0631\u0646\u0633 \u06a9\u0648 \u06cc\u0627\u062f \u0631\u06a9\u06be\u0646\u06d2 \u06a9\u06d2 \u0644\u06cc\u06d2 \u06c1\u0631 \u06a9\u0648\u0688 \u06a9\u06d2 \u0631\u0627\u0633\u062a\u06d2 \u067e\u0631 \u0627\u0646\u062d\u0635\u0627\u0631 \u06a9\u0631\u06cc\u06ba\u06d4<\/p>\n<\/p><\/div>","protected":false},"excerpt":{"rendered":"<p>\u0632\u06cc\u0627\u062f\u06c1 \u062a\u0631 JNI \u062a\u0646\u0627\u0632\u0639\u0627\u062a \u067e\u06cc\u0686\u06cc\u062f\u06c1 \u0645\u0646\u0637\u0642 \u0633\u06d2 \u067e\u06cc\u062f\u0627 \u0646\u06c1\u06cc\u06ba \u06c1\u0648\u062a\u06d2 \u06c1\u06cc\u06ba\u06d4 \u06cc\u06c1 \u0627\u0639\u062a\u0631\u0627\u0636 \u06a9\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u062c\u0627\u062a \u0633\u06d2 \u0645\u062a\u0639\u0644\u0642 \u0686\u06be\u0648\u0679\u06cc \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2\u06d4 \u06cc\u06c1 \u063a\u0644\u0637\u06cc\u0648\u06ba \u0633\u06d2 \u0622\u062a\u0627 \u06c1\u06d2 \u062c\u06cc\u0633\u06d2 \u06a9\u0633\u06cc \u062d\u0648\u0627\u0644\u06c1 \u06a9\u06d2 \u063a\u0644\u0637 \u06c1\u0648\u0646\u06d2 \u06a9\u06d2 \u0628\u0639\u062f \u0627\u0633\u06d2 \u0628\u0631\u0642\u0631\u0627\u0631 \u0631\u06a9\u06be\u0646\u0627\u060c \u0627\u0633 \u06a9\u06d2 \u062c\u0627\u0631\u06cc \u06a9\u06cc\u06d2 \u062c\u0627\u0646\u06d2 \u0633\u06d2 \u0632\u06cc\u0627\u062f\u06c1 \u062a\u06cc\u0632\u06cc \u0633\u06d2 \u062d\u0648\u0627\u0644\u06c1 \u0628\u0646\u0627\u0646\u0627\u060c \u06cc\u0627 \u06a9\u0633\u06cc \u0627\u06cc\u0633\u06d2 \u062a\u06be\u0631\u06cc\u0688 \u06a9\u0627 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-30366","post","type-post","status-publish","format-standard","hentry","category-blog"],"_links":{"self":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/30366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/comments?post=30366"}],"version-history":[{"count":0,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/posts\/30366\/revisions"}],"wp:attachment":[{"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/media?parent=30366"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/categories?post=30366"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/umang.pk\/en_us\/wp-json\/wp\/v2\/tags?post=30366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}