【发布时间】:2013-06-06 16:09:02
【问题描述】:
我有很多对象要在 c++ 上创建并将其发送到 java,我正在使用 env->DeleteLocalRef(obj); 但我收到以下错误:
06-10 18:43:56.976: E/dalvikvm(11536): JNI ERROR (app bug): local reference table overflow (max=512)
06-10 18:43:56.980: W/dalvikvm(11536): JNI local reference table (0x4d9c0b28) dump:
06-10 18:43:56.980: W/dalvikvm(11536): Last 10 entries (of 512):
06-10 18:43:56.980: W/dalvikvm(11536): 511: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 510: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 509: 0x40e2a2a8 la.jurema.moovebike.models.RoutePoint[] (20 elements)
06-10 18:43:56.980: W/dalvikvm(11536): 508: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 507: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 506: 0x412de350 java.lang.Class<la.jurema.moovebike.models.BikeRoute>
06-10 18:43:56.980: W/dalvikvm(11536): 505: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 504: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 503: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): 502: 0x412bab68 java.lang.Class<la.jurema.moovebike.models.RoutePoint>
06-10 18:43:56.980: W/dalvikvm(11536): Summary:
06-10 18:43:56.980: W/dalvikvm(11536): 505 of java.lang.Class (7 unique instances)
06-10 18:43:56.980: W/dalvikvm(11536): 3 of java.lang.String (3 unique instances)
06-10 18:43:56.980: W/dalvikvm(11536): 1 of java.lang.String[] (2 elements)
06-10 18:43:56.980: W/dalvikvm(11536): 1 of la.jurema.moovebike.network.DataDownloadResponseAbstract
06-10 18:43:56.980: W/dalvikvm(11536): 1 of la.jurema.moovebike.models.BikeRoute[] (15 elements)
06-10 18:43:56.980: W/dalvikvm(11536): 1 of la.jurema.moovebike.models.RoutePoint[] (20 elements)
06-10 18:43:56.980: E/dalvikvm(11536): Failed adding to JNI local ref table (has 512 entries)
我不知道这个java.lang.Class 是什么意思...我该如何解决这个问题?增加参考表?或者我没有删除什么?
【问题讨论】:
-
这意味着您在当前框架中的引用超出了容纳范围。在调用实际生成引用的代码之前,您可以调用
(*env)->PushLocalFrame(env, N)分配更多空间。你也应该尽可能地释放本地引用。 -
@technomage 我正在尽可能地释放所有本地引用,但我确实有很多实例......我如何使用 PushLocalFrame?例如使用 1024 和 512 的内存?
-
用
PushLocalFrame(env, 2048)和PopLocalFrame(env)包围您的“分配”代码,这样您就不必删除单个引用。
标签: java android c++ memory java-native-interface