帮助解密logcat输出-过度的JNI全局引用
本文关键字:JNI 全局 引用 解密 logcat 输出 帮助 | 更新日期: 2023-09-27 17:59:23
有人能告诉我是什么导致我的应用程序中止并给出这个输出吗?
I/ActivityManager( 68): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=MapDroid.MapDroid/mapdroid.StudentList } from pid 223
I/ActivityManager( 68): Start proc MapDroid.MapDroid for activity MapDroid.MapDroid/mapdroid.StudentList: pid=506 uid=10036 gids={3003}
I/ActivityThread( 506): Pub MapDroid.MapDroid.__mono_init__: mono.MonoRuntimeProvider
D/dalvikvm( 506): Trying to load lib /data/data/MapDroid.MapDroid/lib/libmonodroid.so 0x40512d80
D/dalvikvm( 506): Added shared lib /data/data/MapDroid.MapDroid/lib/libmonodroid.so 0x40512d80
D/dalvikvm( 506): GC_CONCURRENT freed 1219K, 57% free 2906K/6727K, external 1625K/2137K, paused 19ms+5ms
I/ActivityManager( 68): Displayed MapDroid.MapDroid/mapdroid.StudentList: +16s949ms
D/dalvikvm( 223): GC_EXPLICIT freed 41K, 50% free 2940K/5767K, external 5937K/7285K, paused 88ms
D/dalvikvm( 506): GC_EXPLICIT freed 177K, 56% free 2976K/6727K, external 1671K/2137K, paused 71ms
D/dalvikvm( 506): GC_FOR_MALLOC freed 2K, 56% free 2974K/6727K, external 1671K/2137K, paused 50ms
I/dalvikvm-heap( 506): Grow heap (frag case) to 7.125MB for 22008-byte allocation
D/dalvikvm( 506): GC_FOR_MALLOC freed 0K, 56% free 2995K/6791K, external 1671K/2137K, paused 72ms
D/dalvikvm( 506): GREF has increased to 201
D/dalvikvm( 506): GREF has increased to 301
D/dalvikvm( 506): GREF has increased to 401
D/dalvikvm( 506): GREF has increased to 501
D/dalvikvm( 506): GREF has increased to 601
D/dalvikvm( 506): GREF has increased to 701
D/dalvikvm( 506): GREF has increased to 801
D/dalvikvm( 506): GREF has increased to 901
D/dalvikvm( 506): GREF has increased to 1001
D/dalvikvm( 506): GREF has increased to 1101
D/dalvikvm( 506): GREF has increased to 1201
D/dalvikvm( 506): GREF has increased to 1301
D/dalvikvm( 506): GREF has increased to 1401
D/dalvikvm( 506): GREF has increased to 1501
D/dalvikvm( 506): GREF has increased to 1601
D/dalvikvm( 506): GREF has increased to 1701
D/dalvikvm( 506): GREF has increased to 1801
D/dalvikvm( 506): GREF has increased to 1901
D/dalvikvm( 506): GREF has increased to 2001
W/dalvikvm( 506): Last 10 entries in JNI global reference table:
W/dalvikvm( 506): 1991: 0x40567bf0 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1992: 0x40567c00 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1993: 0x40567b60 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1994: 0x40567b70 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1995: 0x40567b80 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1996: 0x40561ab8 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1997: 0x40561ac8 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1998: 0x40561ad8 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 1999: 0x4055eef0 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): 2000: 0x4055ef00 cls=Lmono/android/runtime/JavaObject; (12 bytes)
W/dalvikvm( 506): JNI global reference table summary (2001 entries):
W/dalvikvm( 506): 50 of Ljava/lang/Class; 164B (40 unique)
W/dalvikvm( 506): 47 of Ljava/lang/Class; 188B (17 unique)
W/dalvikvm( 506): 6 of Ljava/lang/Class; 212B (6 unique)
W/dalvikvm( 506): 11 of Ljava/lang/Class; 236B (6 unique)
W/dalvikvm( 506): 2 of Ljava/lang/Class; 260B (2 unique)
W/dalvikvm( 506): 5 of Ljava/lang/Class; 284B (2 unique)
W/dalvikvm( 506): 6 of Ljava/lang/Class; 308B (5 unique)
W/dalvikvm( 506): 3 of Ljava/lang/Class; 332B (2 unique)
W/dalvikvm( 506): 1 of Ljava/lang/Class; 356B
W/dalvikvm( 506): 2 of Ljava/lang/Class; 380B (1 unique)
W/dalvikvm( 506): 2 of Ljava/lang/Class; 428B (2 unique)
W/dalvikvm( 506): 1 of Ljava/lang/Class; 452B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 476B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 500B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 548B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 572B
W/dalvikvm( 506): 2 of Ljava/lang/Class; 596B (2 unique)
W/dalvikvm( 506): 1 of Ljava/lang/Class; 692B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 1004B
W/dalvikvm( 506): 2 of Ljava/lang/Class; 1172B (2 unique)
W/dalvikvm( 506): 1 of Ljava/lang/Class; 1316B
W/dalvikvm( 506): 1 of Ljava/lang/Class; 3452B
W/dalvikvm( 506): 1 of Ljava/lang/String; 28B
W/dalvikvm( 506): 2 of Ldalvik/system/VMRuntime; 12B (1 unique)
W/dalvikvm( 506): 9 of Ljava/lang/ref/WeakReference; 28B (9 unique)
W/dalvikvm( 506): 1 of Ljava/lang/ref/WeakReference; 36B
W/dalvikvm( 506): 1 of Ldalvik/system/PathClassLoader; 44B
W/dalvikvm( 506): 1 of Landroid/app/ActivityThread$ApplicationThread; 28B
W/dalvikvm( 506): 1 of Landroid/content/ContentProvider$Transport; 28B
W/dalvikvm( 506): 1 of Landroid/view/inputmethod/InputMethodManager$ControlledInputConnectionWrapper; 36B
W/dalvikvm( 506): 1 of Landroid/view/ViewRoot$1; 12B
W/dalvikvm( 506): 1 of Landroid/view/ViewRoot$W; 28B
W/dalvikvm( 506): 1 of Landroid/view/inputmethod/InputMethodManager$1; 28B
W/dalvikvm( 506): 1 of Landroid/view/accessibility/AccessibilityManager$1; 28B
W/dalvikvm( 506): 2 of Lorg/apache/harmony/xnet/provider/jsse/TrustManagerImpl; 28B (1 unique)
W/dalvikvm( 506): 1 of Lmapdroid/StudentList_GetStudentsTask; 28B
W/dalvikvm( 506): 1099 of Lmono/android/runtime/JavaObject; 12B (1099 unique)
W/dalvikvm( 506): 729 of Lmono/android/runtime/JavaObject; 20B (729 unique)
W/dalvikvm( 506): 1 of Lmapdroid/StudentList; 180B
W/dalvikvm( 506): Memory held directly by tracked refs is 58440 bytes
E/dalvikvm( 506): Excessive JNI global references (2001)
E/dalvikvm( 506): VM aborting
D/Zygote ( 33): Process 506 exited cleanly (1)
I/ActivityManager( 68): Process MapDroid.MapDroid (pid 506) has died.
I/WindowManager( 68): WIN DEATH: Window{406a8598 MapDroid.MapDroid/mapdroid.StudentList paused=false}
W/InputManagerService( 68): Got RemoteException sending setActive(false) notification to pid 506 uid 10036
StudentList.cs代码
using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using MonoMap;
using MonoMap.wsMobile;
namespace MapDroid
{
public class StudentList : Activity
{
private int currentFacultyId = 93306;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
//Show Loading Layout
SetContentView(Resource.Layout.SplashLoad);
// init AsycTask and Execute
GetStudentsTask gstask = new GetStudentsTask(this, currentFacultyId);
gstask.Execute();
}
/***
* Callback after GetStudentsTask completes
*
**/
protected void ShowList(ArrayAdapter<Student> adapter)
{
SetContentView(Resource.Layout.LayoutStudentList);
//Grab Views
ListView lvStudent = FindViewById<ListView>(Resource.Id.studentListView);
EditText etFilter = FindViewById<EditText>(Resource.Id.studentFilter);
//Attach Adapter to ListView
lvStudent.Adapter = adapter;
//Use delegate to filter list on TextChanged
etFilter.TextChanged += delegate(object sender, Android.Text.TextChangedEventArgs e)
{
adapter.Filter.InvokeFilter(e.Text.ToString());
};
//Use delagate to fire intent on ItemClick
lvStudent.ItemClick += delegate(object sender, ItemEventArgs args)
{
Student selectedStudent = adapter.GetItem(args.Position);
Intent intent = new Intent(this, typeof(TabbedView));
intent.PutExtra("studentId", selectedStudent.I.ToString());
intent.PutExtra("studentName", selectedStudent.F.ToString() + " " + selectedStudent.L.ToString());
intent.PutExtra("facultyId", currentFacultyId.ToString());
StartActivity(intent);
};
}
/**
* AsycTask Implementation to Get All Associated Students
*
*/
internal class GetStudentsTask : AsyncTask
{
private ArrayAdapter<Student> _adapter;
private StudentList _outer;
private int _facId;
public GetStudentsTask(StudentList outer, int currentFacultyId)
{
this._outer = outer;
this._facId = currentFacultyId;
}
protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)
{
//Setup Adapter Data Source
Student[] students = WebService.GetStudentListbyFacultyId(_facId);
_adapter = new ArrayAdapter<Student>(_outer, Resource.Layout.ItemStudent, students);
return true;
}
protected override void OnPostExecute(Java.Lang.Object result)
{
_outer.ShowList(_adapter);
base.OnPostExecute(result);
}
}
}
}
另一个奇怪的问题是,它在实际设备上运行得很干净,但在模拟器上运行时,它会给我这个输出并中止。。。
想法?
模拟器的全局引用限制为2000。在设备上,如果我回忆正确的话,它大约是52000。你正在做的事情就是创造并抓住过多的物体。