一个Java程序是怎样运行起来的【class解析全过程】(7)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 一个Java程序是怎样运行起来的【class解析全过程】(7)

00 0A 00 00 00 06 00 01

00 00 00 01


    ---00 0A:attribute_name_index=#10---->#10 = Utf8               LineNumberTable


    ---00 00 00 06:attribute_lenght=6


    ---00 01:line_number_table_length=1,表示这个LineNumberTable中有一条记录


    ---00 00 00 01:表示Test.java的第一行代码对应指令0--->0: aload_0



方法2:00 09 00 0B 00 0C 00 01


   ---00 09:access_flags=0x0008|0x0001=ACC_STATIC|ACC_PUBLIC


   ---00 0B:name_index=#11------>#11 = Utf8               main


   ---00 0C:descriptor_index=#12----->#12 = Utf8               ([Ljava/lang/String;)V


   ---00 01:arrtibutes_count=1,紧接着是attribute_info


方法2的code,非指令部分:


00 09 00 00 00 25 00 02 00 01 00 00 00 09


   ---00 09:attribute_name_index=#9----->#9 = Utf8               Code


   ---00 00 00 25:attribute_length=37,所以整个属性表的长度为43


   ---00 02:max_stack=2


   ---00 01:max_locals=1


   ---00 00 00 09:code_length=17


方法2的code,指令部分


B2 00 02----->getstatic #2:获取指定类的静态域,并且压入到栈顶,#2表示#2 = Fieldref           #16.#17        //  java/lang/System.out:Ljava/io/PrintStream;


12 03--->ldc #3,将“test”常量值从常量池中压入到栈顶


B6 00 04---->invokervirtual  #4,调用实例方法,#4 = Methodref          #19.#20        //  java/io/PrintStream.println:(Ljava/lang/String;)V,即println方法


B1---->return



方法2的Exception:


00 00 ----->没有定义throw


方法2的attribute_count:


00 01 //方法最后有个属性


方法2的LineNumberTable:


00 0A 00 00 00 0A 00 02


    ----00 0A:attribute_name_index=#10------>#10 = Utf8               LineNumberTable


    ----00 00 00 0A:attribute_length=10


    ----00 02:line_number_table_lenght=2,表示lineNumberTable中有2条记录


00 00 00 04:Test.java第4行对应指令0 --->getstatic     #2


00 08 00 05:Test.java第5行对应指令8----->8: return



8.sourceFile属性


00 01:当前class文件包含1个attribute_info


00 0D 00 00 00 02 00 0E


    ---00 0D:attribute_name_index=#13---->#13 = Utf8               SourceFile


    ---00 00 00 02:attribute_length=2


    ---00 0E:sourcefile_index=#14---->#14 = Utf8               Test.java



至此,class文件中的内容分析完毕!


相关文章
|
2天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
17 5
|
20天前
|
Java 编译器
Java 泛型详细解析
本文将带你详细解析 Java 泛型,了解泛型的原理、常见的使用方法以及泛型的局限性,让你对泛型有更深入的了解。
31 2
Java 泛型详细解析
|
21天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
50 12
|
18天前
|
存储 算法 Java
Java内存管理深度解析####
本文深入探讨了Java虚拟机(JVM)中的内存分配与垃圾回收机制,揭示了其高效管理内存的奥秘。文章首先概述了JVM内存模型,随后详细阐述了堆、栈、方法区等关键区域的作用及管理策略。在垃圾回收部分,重点介绍了标记-清除、复制算法、标记-整理等多种回收算法的工作原理及其适用场景,并通过实际案例分析了不同GC策略对应用性能的影响。对于开发者而言,理解这些原理有助于编写出更加高效、稳定的Java应用程序。 ####
|
18天前
|
存储 监控 算法
Java虚拟机(JVM)垃圾回收机制深度解析与优化策略####
本文旨在深入探讨Java虚拟机(JVM)的垃圾回收机制,揭示其工作原理、常见算法及参数调优方法。通过剖析垃圾回收的生命周期、内存区域划分以及GC日志分析,为开发者提供一套实用的JVM垃圾回收优化指南,助力提升Java应用的性能与稳定性。 ####
|
20天前
|
Java 数据库连接 开发者
Java中的异常处理机制:深入解析与最佳实践####
本文旨在为Java开发者提供一份关于异常处理机制的全面指南,从基础概念到高级技巧,涵盖try-catch结构、自定义异常、异常链分析以及最佳实践策略。不同于传统的摘要概述,本文将以一个实际项目案例为线索,逐步揭示如何高效地管理运行时错误,提升代码的健壮性和可维护性。通过对比常见误区与优化方案,读者将获得编写更加健壮Java应用程序的实用知识。 --- ####
|
24天前
|
数据采集 存储 Web App开发
Java爬虫:深入解析商品详情的利器
在数字化时代,信息处理能力成为企业竞争的关键。本文探讨如何利用Java编写高效、准确的商品详情爬虫,涵盖爬虫技术概述、Java爬虫优势、开发步骤、法律法规遵守及数据处理分析等内容,助力电商领域市场趋势把握与决策支持。
|
24天前
|
安全 Java
Java中WAIT和NOTIFY方法调用时机的深层解析
在Java多线程编程中,`wait()`和`notify()`方法的正确使用对于线程间的协调至关重要。这两个方法必须在同步块或同步方法中调用,这一规定的深层原因是什么呢?本文将深入探讨这一机制。
35 5
|
23天前
|
存储 缓存 监控
Java中的线程池深度解析####
本文深入探讨了Java并发编程中的核心组件——线程池,从其基本概念、工作原理、核心参数解析到应用场景与最佳实践,全方位剖析了线程池在提升应用性能、资源管理和任务调度方面的重要作用。通过实例演示和性能对比,揭示合理配置线程池对于构建高效Java应用的关键意义。 ####
|
22天前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
36 0

推荐镜像

更多
下一篇
DataWorks