`

opendjk jvm 异常执行分析

    博客分类:
  • jvm
阅读更多
openjdk 异常处理流程

    {

             oop except_oop = STACK_OBJECT(-1);  //从栈中弹出异常的引用

             CHECK_NULL(except_oop);  //检查异常引用是否为空

             THREAD->set_pending_exception(except_oop, NULL, 0);
             goto handle_exception;       //处理异常执行代码

    }

    处理异常的代码handle_exception

    {

             Handle except_oop(THREAD, THREAD->pending_exception());

             CALL_VM(continuation_bci = (intptr_t)InterpreterRuntime::exception_handler_for_exception(THREAD, except_oop()), handle_exception); //此为查找异常表,也就是执行InterpreterRuntime::exception_handler_for_exception,如果在执行的过程中还抛出异常,回到handle_exception开始地方,继续执行

             except_oop = (oop) THREAD->vm_result();
             THREAD->set_vm_result(NULL);
             if (continuation_bci >= 0) {   //查找异常表exception_handler_for_exception
                       SET_STACK_OBJECT(except_oop(), 0);
                       MORE_STACK(1);
                       pc = METHOD->code_base() + continuation_bci; //pc指针

                       ............

                       goto run ; //转到解释器处理循环
             }

             THREAD->set_pending_exception(except_oop(), NULL, 0);
             goto handle_return;  //本方法没有找到相应的异常处理,继续往上抛出

    }

    查找异常表的代码

    InterpreterRuntime::exception_handler_for_exception(JavaThread* thread, oopDesc* exception)

    {

              .............

              if (thread->do_not_unlock_if_synchronized()) {

                        return Interpreter::remove_activation_entry();

              }

              do {

                       KlassHandle h_klass(THREAD, h_exception->klass());
                       handler_bci = h_method->fast_exception_handler_bci_for(h_klass, current_bci, THREAD);
                      if (HAS_PENDING_EXCEPTION) {   //需要处理异常
                                h_exception = Handle(THREAD, PENDING_EXCEPTION);
                                CLEAR_PENDING_EXCEPTION;
                                if (handler_bci >= 0) {
                                          current_bci = handler_bci;
                                          should_repeat = true;
                                }
                       }                       

              }while (should_repeat == true);

              address continuation = NULL;

              if (handler_bci < 0 || !thread->reguard_stack((address) &continuation)) {

                       continuation = Interpreter::remove_activation_entry();

                       h_method->interpreter_throwout_increment();

              }else{

                       handler_pc = h_method->code_base() + handler_bci;

                       set_bcp_and_mdp(handler_pc, thread);
                       continuation = Interpreter::dispatch_table(vtos)[*handler_pc];

              }

              thread->set_vm_result(h_exception());
              return continuation;

    }



    handle_return:
    {

             if (THREAD->do_not_unlock()) {  //对方法中监视器的处理

             }else{

             }

             if (illegal_state_oop() != NULL || original_exception() != NULL) {
                       istate->set_msg(throwing_exception);
                       if (illegal_state_oop() != NULL)
                                 THREAD->set_pending_exception(illegal_state_oop(), NULL, 0);
                       else
                                 THREAD->set_pending_exception(original_exception(), NULL, 0);
                       istate->set_return_kind((Bytecodes::Code)opcode);
                       UPDATE_PC_AND_RETURN(0);



      generate_normal_entry中

      __ pushptr(return_from_native_method.addr());调用前的返回地址(这就是上面return返回后的地址)

      __ jmp(rax); 调用

*/
            }

     }

分享到:
评论

相关推荐

    jvm异常分析文件

    本篇文章将深入探讨基于给定文件名的JVM异常分析主题,包括socket端口占用问题和内存溢出系统异常,以及如何解决这些问题以防止异常宕机。 首先,让我们关注"623scoket端口占有和内存溢出系统异常分析"这个文件。...

    Jvm堆栈dump文件分析

    Java虚拟机(JVM)是运行Java应用程序的关键组件,它负责管理内存、执行字节码以及处理线程等任务。当JVM遇到问题,如内存溢出或长时间的垃圾回收,它可能会生成堆栈转储(dump)文件,这些文件包含了JVM在特定时刻...

    JVM堆栈性能分析

    Thread Dump 是非常有用 Java应用问题的工具。每一个 Java 虚拟机 都有及时生成所有线程在某...照,及JVM 中所有 Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名 及所执行的方法,如果可能的话还有源代码的行数。

    JVM crash 错误日志分析

    3. **异常报告**:错误日志会记录导致JVM崩溃的异常类型和消息。例如,"java.lang.OutOfMemoryError: Java heap space"表明是由于堆内存不足导致的问题。 4. **内存使用情况**:日志会包含JVM在崩溃时的内存使用...

    jvmgc日志分析工具

    "jvmgc日志分析工具"专为解析和可视化JVM生成的GC日志而设计,帮助开发者识别内存瓶颈,调整内存设置,以及诊断可能的性能问题。 GC日志是JVM在运行过程中记录的关于垃圾收集活动的详细信息,包括垃圾收集的起始...

    jvm 内存分析文档

    【Jvm 内存分析文档】 Java 虚拟机(JVM)是Java程序的核心运行环境,它负责管理和执行字节码。JVM内存管理主要包括内存结构、内存分配以及垃圾回收(GC)等方面。了解这些知识对于优化Java应用程序的性能至关重要...

    mat(mac)---jvm内存分析工具

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具,尤其适用于Mac OS X平台。这款工具可以帮助开发者诊断和解决Java应用中的内存泄漏问题,提高应用性能。MAT通过深入分析堆转储...

    JVM分析工具

    Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,管理内存,以及优化代码。为了确保应用的高效运行和优化,开发者通常会使用一系列的JVM分析工具。以下是对这些工具的详细介绍: 1. **jmap**: `...

    JAVA jvm DUMP 内存分析

    性能测试,线程的 dump 看到线程的 死锁,等待 运行状态

    JVM执行子系统原理

    通过对JVM执行子系统原理的深入分析,我们不仅了解了Class文件的具体结构和字节码指令的基本概念,还探讨了类加载机制的各个环节以及字节码执行引擎的核心组成部分。这些知识点对于深入理解JVM的工作原理、优化程序...

    JVM堆栈性能分析pdf

    《JVM堆栈性能分析》PDF是一份深入探讨Java虚拟机(JVM)内存管理和性能优化的专业文档。本文档主要关注JVM中的堆栈部分,尤其是如何理解和优化其性能,对于Java开发者来说具有很高的学习价值。JVM是Java程序运行的...

    jvm内存分析工具mat安装包

    然后,解压下载的MemoryAnalyzer-1.10.0.20200225.zip文件,运行其中的MAT可执行文件,导入堆转储文件进行分析。 在分析过程中,MAT会计算每个对象的浅堆(Shallow Heap)和保留堆(Retained Heap),前者表示对象...

    jvm内存分析工具mat

    MAT,全称Memory Analyzer Tool,是IBM开发的一款强大的Java虚拟机(JVM)内存分析工具。它主要用于诊断Java应用程序的内存泄漏问题,帮助开发者理解内存消耗情况,优化内存配置,从而提升应用性能。MAT以其易用性和...

    JVM入门实战/arthas实战/垃圾回收算法/垃圾回收器/jvm内存模型分析

    本系列课程从JVM基础到高级实战,老师手把手教你如何进行JVM调优,思路清晰,没有废话,旨在挑战高薪。 课程亮点: 1、基于阿里arthas进行JVM调优; 2、基于代码排查OOM问题,拒绝空讲; 3、总结JVM通用的调优思路;...

    jvm crash的崩溃日志详细分析及注意点

    JVM(Java Virtual Machine)是Java程序运行的核心组件,它负责解释和执行字节码。然而,当JVM出现严重错误或无法恢复的问题时,它可能会崩溃并生成一个崩溃日志,这通常被称为`hs_err_pid.log`文件。这篇内容将深入...

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

    1. **JVM结构与原理**:首先,我们需了解JVM的基本架构,包括类装载器、运行时数据区、执行引擎、本地方法接口和本地库。特别是堆内存、栈内存、方法区(元空间)以及垃圾收集机制,它们是理解JVM运行时行为的关键。...

    JAVA文件编译执行与虚拟机(JVM)介绍

    ### JAVA文件编译执行与虚拟机(JVM)介绍 #### 关键知识点概述: 1. **JAVA文件的编译与执行**:JAVA程序首先通过编译器转换为中间代码(字节码),然后由JVM解释执行。 2. **JVM的角色与功能**:JVM作为JAVA程序...

    idea插件JVM内存工具JProfiler11

    首先,JProfiler11是一款专业级别的Java性能分析工具,它能够对JVM进行深入的内存和CPU分析。通过集成到Idea中,开发者可以直接在IDE内部进行性能检测,无需离开熟悉的开发环境。只需下载JProfiler11的安装包,并...

    JVM内存状况查看方法和分析工具

    JVM 内存状况查看方法和分析工具 JVM 内存状况查看方法和分析工具是 Java 开发人员不可或缺的技能之一。Java 本身提供了多种丰富的方法和工具来帮助开发人员查看和分析 GC 及 JVM 内存的状况,同时开源界和商业界也...

    JVM执行子系统.pdf

    Java虚拟机(JVM)执行子系统是Java平台的核心组件之一,它的主要功能是加载、链接并执行Java类文件中的字节码。在深入理解JVM执行子系统之前,我们需要了解Java类文件结构,以及JVM如何与这些类文件交互。 ### ...

Global site tag (gtag.js) - Google Analytics