- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d
#00 pc 0x50f8e /system/lib/libdvm.so (dvmAbort+89)
#01 pc 0x59ee1 /system/lib/libdvm.so (dvmLinearAlloc(Object*, unsigned int)+64)
#02 pc 0x76a7b /system/lib/libdvm.so (???)
#03 pc 0x76d77 /system/lib/libdvm.so (dvmDefineClass(DvmDex*, char const*, Object*)+10)
#04 pc 0x71583 /system/lib/libdvm.so (???)
#05 pc 0x30c0c /system/lib/libdvm.so (???)
#06 pc 0x343dc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#07 pc 0x6d109 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+284)
#08 pc 0x6d12d /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
#09 pc 0x76e69 /system/lib/libdvm.so (dvmFindClassNoInit(char const*, Object*)+108)
#10 pc 0x6216b /system/lib/libdvm.so (???)
#11 pc 0x62287 /system/lib/libdvm.so (???)
#12 pc 0x65a6d /system/lib/libdvm.so (dvmVerifyCodeFlow(VerifierData*)+9760)
#13 pc 0x68c91 /system/lib/libdvm.so (???)
#14 pc 0x68ce3 /system/lib/libdvm.so (dvmVerifyClass(ClassObject*)+42)
#15 pc 0x7704d /system/lib/libdvm.so (dvmInitClass+116)
#16 pc 0x742d1 /system/lib/libdvm.so (???)
#17 pc 0x30c0c /system/lib/libdvm.so (???)
#18 pc 0x343dc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#19 pc 0x6ce39 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+344)
#20 pc 0x73b19 /system/lib/libdvm.so (???)
#21 pc 0x30c0c /system/lib/libdvm.so (???)
#22 pc 0x343dc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#23 pc 0x6ce39 /system/lib/libdvm.so (dvmInvokeMethod(Object*, Method const*, ArrayObject*, ArrayObject*, ClassObject*, bool)+344)
#24 pc 0x7431b /system/lib/libdvm.so (???)
#25 pc 0x30c0c /system/lib/libdvm.so (???)
#26 pc 0x343dc /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
#27 pc 0x6d109 /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+284)
#28 pc 0x554af /system/lib/libdvm.so (???)
#29 pc 0x48c6b /system/lib/libandroid_runtime.so (???)
#30 pc 0x4a81f /system/lib/libandroid_runtime.so (android::AndroidRuntime::start(char const*, char const*)+394)
#31 pc 0xf0d /system/bin/app_process (???)
java.lang.Throwable:
******* Java stack for JNI crash *******
at dalvik.system.DexFile.defineClass(Native Method)
at dalvik.system.DexFile.loadClassBinaryName(DexFile.java:195)
at dalvik.system.DexPathList.findClass(DexPathList.java:315)
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:58)
at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.lily.dexLoader.invokeStaticMethod(SourceFile:70)
at com.lily.sdk.Web.<init>(SourceFile:77)
……
我无法通过我的 android 应用程序重现此崩溃,但监控系统多次报告此类崩溃。
不清楚是dex坏了还是系统dalvik不稳定
有没有人对这种 loadClass 崩溃有任何经验?
最佳答案
如果 VM 检测到严重问题,它将向日志发送诊断信息,然后中止。您正在使用的 Android 版本中的 VM 因尝试写入只读位置 (0xdeadd00d
) 而自行崩溃。
查看堆栈跟踪,dvmAbort()
之前的最后一件事是 dvmLinearAlloc()
。看着a recent source file ,如果 VM 分配的内存不足,或者在页面被积极标记为只读的特殊 Debug模式下无法更改页面上的权限,VM 将在该函数中中止。几乎可以肯定是前者。查看 logcat 输出可以肯定地告诉您。
假设您的内存不足,我猜您正在运行旧版本的 Android (<= gingerbread),其中“线性分配”缓冲区的大小不足。该内存区域用于保存类元数据,例如方法表和字段,而不是数据本身(这就是为什么可以将其标记为只读以帮助寻找内存垃圾)。避免该问题的唯一方法是重构类。
您可以在 this blog post 中阅读有关该问题的更多信息以及 Facebook 工程师部署的解决方案。 .
关于Android ClassLoader.loadClass JNI 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35481989/
loadClass(String name) 之间有什么区别?和 loadClass(String name, boolean resolve) ? 我知道的唯一区别是如果 resolve 参数为真,
如何使用 loadClass 方法加载数组? String className = "Customer[]"; Thread.currentThread().getContextClassLoader
我已经编写了我想使用 ClassLoader 加载的小型 java 类。 public class ClassLoadingObj { public ClassLoadingObj(){
String pathToJar = "C:\\Users\\dtn\\jb_workspace\\helloworld-mdb\\target\\jboss-as-helloworld-mdb.wa
有谁知道: Class clazz = getClass().getClassLoader().loadClass(className); 和 Class clazz = Class.forName(
我想创建自定义类加载器。但是我对loadClass()感到困惑,这个方法是否将指定的类加载到内存中? 如果是那么为什么不调用指定类的静态 block ? //main class package cu
signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadd00d #00 pc 0x50f8e /system/lib/libdvm
Mongoose 接受 ES6 class作为架构的基础。 该链接中的示例: class PersonClass { get fullName() { return `${this.fir
使用以下代码,我得到由 ClassNotFoundException 引起的 NoClassDefFoundError: File file = new File( "C:\\prototype.co
我已经检测了 JDK 和应用程序。记录入口点和导出点以用于构建调用图。 调用图看起来像 sun.misc.Launcher$AppClassLoader.loadClass->com.example.
我正在使用 apache felix osgi。当我使用 classLoader.loadClass(..) 加载类时,它给出了 ClassNotFoundException但是当我使用 Class.
我想以编程方式创建一个 OSGi 框架,用它加载一个 bundle 并从该 bundle 加载一个类。当我调用 Bundle.loadClass() 时,我得到一个 Class 实例,其中所有 fie
我正在利用 Mongoose class schemas . 并在我的 Node 项目中使用 TypeScript。 我关注了Mongoose the Typescript way...?确保我的模型
我在 android 9 设备上面临这个崩溃,但找不到任何解决方案。谁能帮我解决这个崩溃? 这是崩溃报告。 java.lang.Error: FATAL EXCEPTION [Thread-86] U
class testMe{ void show(){ System.out.println("Hello"); } } public class Classloader
我使用以下代码从外部包动态加载类: Object plugin = null; String packageName = "unipd.elia.deltapluginacceleromete
我在 Google Play 上有一个活跃的应用程序。我的用户经常遇到崩溃,我不知道在哪里调试。 java.lang.NoClassDefFoundError: at jl.b (jl.java:
我注意到我们可以随意设置一个线程的上下文类加载器。这是否意味着每个 new 都会导致上下文类加载器的 loadClass 被调用? 最佳答案 不,loadClass() 只会调用一次,即第一次访问该类
我要在现有的 C++ 应用程序中嵌入 JVM,并且需要使用类注册 native Java 函数的实现。 考虑这个带有原生函数的简单类: class Native { static { Sy
我正在尝试测试实用程序方法,该方法检查特定类是否在类路径上,如果是,则 return true 否则 return false。 我为什么这样做:我必须独立类扩展同一个类,并且只有其中一个在类路径上。
我是一名优秀的程序员,十分优秀!