`
avi2
  • 浏览: 90214 次
社区版块
存档分类
最新评论

调用JNI中遇到堆栈溢出

    博客分类:
  • java
阅读更多
Java中使用了C++的本地代码,遇到了下面问题
An unrecoverable stack overflow has occurred.

检查了一下,由于CPP代码中使用了递归方法,导致栈过深,导致堆栈溢出
我们可以通过对JVM参数调整,解决这个问题
用 -Xss 指定的本机堆栈(native stack),比如指定 -Xss2M,这是针对每个线程分配的,并且不基于具体的使用情况,因此如果计划运行一百个线程,则要在指定 -Xss2m 前慎重考虑;它将消耗 200 MB 的本机内存,每个线程消耗 2 MB。
分享到:
评论

相关推荐

    Android Studio JNI_NDK开发实例

    Android Studio JNI_NDK开发实例是Android应用开发中的一个重要领域,涉及到Java与原生代码(C/C++)的交互。JNI(Java Native Interface)是Java平台的一部分,它允许Java代码和其他语言写的代码进行交互。NDK...

    java内存溢出原因

    Java内存溢出(Out Of Memory, OOM)是开发者在编程过程中经常遇到的问题,尤其是在处理大量数据或长时间运行的应用程序时。本篇文章将详细解析三种常见的Java内存溢出类型:JVM PermGen space溢出、JVM heap space...

    WebSphere 各种dump.rar

    3. 查找JNI异常:在JNI本地方法栈转储中,查看是否有异常的JNI调用。 4. 理解JSP编译器缓存:分析JSP Cache Dump可发现JSP编译问题,如未正确编译的JSP页面。 5. 集群状态分析:通过集群状态转储,可以了解节点间的...

    sanitizer.zip

    在Android开发中,JNI常用于实现性能敏感的部分或者调用系统底层库。由于C++可以提供更高的性能,很多开发者会在JNI中编写C++代码,但这也增加了内存管理的复杂性,因此使用ASAN进行内存错误检查显得尤为重要。 3. ...

    Coredump简介及使用

    5. 堆栈溢出,比如在栈上使用大的局部变量,这会导致栈空间不足,进而破坏系统栈和堆的结构。 三、如何控制产生Coredump 文档中提到,可以通过修改Android系统的init.rc文件来控制Coredump的生成: - 修改RLIMIT_...

    JVM Crash,生成hs_err_pid.log文件

    2. **异常堆栈跟踪**:这是最关键的部分,它列出了导致崩溃的异常和调用堆栈。通过分析这部分,我们可以定位到问题发生的具体代码行。 3. **线程列表**:展示了崩溃时所有活动线程的状态,有助于识别是否有线程死锁...

    Android项目史上最强NDK入门项目实战.rar

    - Android Studio提供了对原生代码的调试支持,可以设置断点、查看变量值和调用堆栈。 - 测试原生代码需要编写对应的单元测试,可以使用Google的gtest框架。 8. **安全考虑**: - NDK的使用增加了代码的复杂性,...

    JVM大厂必备面试题八股文

    3. **本地方法栈**:类似于虚拟机栈,但为JNI(Java Native Interface)调用的本地方法提供服务。 永久代替换为元空间的原因: - 永久代固定大小限制导致内存溢出问题,而元空间使用直接内存,大小受系统可用空间...

    深入java 虚拟机

    JNI允许Java代码调用本地(非Java)代码,提供了与操作系统和硬件交互的能力。通过JNI,开发者可以利用C/C++库提升性能或实现特定功能。 掌握Java虚拟机的这些核心概念和技术,有助于开发者编写更高效、稳定且易于...

    常用ARM指令集及汇编

    在Android系统中,由于其基于Linux内核且大量使用JNI(Java Native Interface)进行原生代码调用,因此对ARM汇编的了解对于优化Android应用程序的性能至关重要。Android开发板常常采用ARM架构,因此开发者需要掌握...

    深入JVM内核原理、诊断与优化.zip

    理解内存模型对于识别内存泄漏、理解堆栈溢出等问题至关重要。 3. **垃圾回收**:JVM通过垃圾收集器自动回收不再使用的对象所占用的内存,避免内存泄露。了解不同类型的垃圾收集器(如串行、并行、并发、G1、ZGC等...

    Android Native Crash分析详解

    1. **Java应用(包括system_server)的native(JNI)层的Native Crash**:这类崩溃通常出现在应用程序或系统服务的JNI代码中。 2. **Native进程(如surfaceflinger、mediaserver等)的Native Crash**:这类崩溃发生...

    JVM crash 错误日志分析

    2. **堆栈跟踪**:当JVM崩溃时,它会打印出所有线程的堆栈跟踪,显示每个线程在崩溃时执行的函数调用序列。通过分析这些信息,我们可以找到可能导致问题的具体代码行。 3. **异常报告**:错误日志会记录导致JVM崩溃...

    JVM面试专题.zip

    - **本地方法栈(Native Method Stack)**:支持JNI接口,为Java方法调用本地(非Java)方法提供服务。 - **程序计数器(Program Counter Register)**:记录当前线程所执行的字节码的地址。 2. **内存管理**: - **...

    jvm分析资料及工具1

    本地方法栈服务于Java Native Interface(JNI)调用的本地方法。程序计数器记录当前线程执行的指令地址。 2. **垃圾收集(Garbage Collection, GC)**:JVM自动管理内存,当对象不再被引用时,会进行垃圾回收。GC有...

    jvm课程ppt

    本地方法栈服务于Java Native Interface(JNI)调用;程序计数器记录当前线程的指令地址。 四、垃圾收集与内存管理 Java的自动内存管理主要依赖于垃圾收集器,它负责回收不再使用的对象所占用的内存空间。常见的...

    JVM 50 道面试题及答案.docx

    1. 在虚拟机栈(栈帧中的本地变量表)中的对象,譬如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。 2. 在方法区中类静态属性引用的对象,譬如 Java 类的引用类型静态变量。 3. 在方法区中常量...

    CrashAnalysis-master.zip

    4. **错误的JNI代码**:本地接口(JNI)调用如果处理不当,可能会导致JVM崩溃。 5. **系统资源耗尽**:如打开文件描述符过多,系统资源不足等。 6. **JVM自身的bug**:尽管罕见,但JVM本身的bug也可能导致崩溃。 ...

    ffmpeg-4.0的so文件

    使用ndk-stack工具进行堆栈跟踪,以及在JNI层添加日志输出,可以帮助定位和解决这些问题。 9. **安全考虑**:使用FFmpeg处理用户输入时,必须确保正确过滤和验证,避免潜在的缓冲区溢出和其他安全漏洞。 10. **...

    安卓开发性能面试题

    - **TraceView:**专门用于性能分析的工具,可以帮助开发者找出应用中耗时较多的方法调用。 #### 八、Java中如何引用本地语言 - **JNI(Java Native Interface):**允许Java代码调用本地语言(如C、C++)编写的...

Global site tag (gtag.js) - Google Analytics