当前位置: 首页 > news >正文

魔艺极速建站wordpress接单修改任务

魔艺极速建站,wordpress接单修改任务,网站开发外包不给ftp,最新新闻热点事件2022年2月属性表 预备知识 javac -g Xxx.java 在生成class文件的时候生成所有调试信息javap -v Xxx.class 输出附加信息 属性表结构 类型名称数量备注u2attribute_name_index1属性名称索引#xff0c;指向一个CONSTANT_Utf8_info型常量的索引u4attribute_length1该属性表的长度u1in…属性表 预备知识 javac -g Xxx.java 在生成class文件的时候生成所有调试信息javap -v Xxx.class 输出附加信息 属性表结构 类型名称数量备注u2attribute_name_index1属性名称索引指向一个CONSTANT_Utf8_info型常量的索引u4attribute_length1该属性表的长度u1infoattribute_length属性值 Code属性表 Code属性表结构释义 attribute_name_index是一项指向CONSTANT_Utf8_info型常量的索引对应的值固定为‘Code’代表了该属性的属性名称。 attribute_length代表了属性值的长度。属性值的长度属性表总长度-6个字节。 max_stack代表操作数栈深度的最大值。虚拟机运行时根据该值来分配栈帧中操作数栈的深度。 max_locals 代表了局部变量表所需的存储空间。其计算单位为‘变量槽’。变量槽是JVM为局部变量表分配内存所使用的最小单位。对于byte、char、float、int、short、boolean及returnAddress等长度不超过32位的数据类型每个局部变量占用1个变量槽double及long这两种64位的数据类型占用两个变量槽。 局部变量表中的变量槽会被复用所以变量槽的个数不一定等于参数个数。当代码执行 超过一个变量的作用域时其原型占用的变量槽将会被复用。操作数栈及局部变量表直接决定了该方法的栈帧所耗费的内存。 code_length代表Java源程序编译后生成的字节码指令个数由于一个字节码占用1字节所以也就是字节码的长度。 理论值为2^32实际最大值为65535。 code 用于存储编译生产的一些列字节码指令。 exception_info 该方法的显示异常处理表集合非必须。 显示异常处理表结构 类型名称数量u2start_pc1u2end_pc1u2handler_pc1u2catch_type1上表表示当字节码从[start_pc,end_pc行出现了类型为catch_type或其子类的异常那么就转至handler_pc行进行处理。当catch_type为0时代表任意异常都需要跳转到handler_pc行处理。 -注意 此处的行指的是字节码相对于方法体开始的偏移量。 Code属性表实例 public class Test{private static final int size 100;public void sout(){System.out.println(size);}public int toDouble(int prame){return 2*prame;}public int add(int p1,int p2){return p1p2;}public static int toTriple(int prame){return 3*prame;} } 将代码编译 javac -g Test.java,在反编译javap -v Test.class Classfile /D:/notes/JVM/code/Test.classLast modified 2021-3-29; size 746 bytesMD5 checksum a1a23cf998350d444d9438782f3af659Compiled from Test.java public class Testminor version: 0major version: 52flags: ACC_PUBLIC, ACC_SUPER Constant pool:#1 Methodref #5.#28 // java/lang/Object.init:()V#2 Fieldref #29.#30 // java/lang/System.out:Ljava/io/PrintStream;#3 Class #31 // Test#4 Methodref #32.#33 // java/io/PrintStream.println:(I)V#5 Class #34 // java/lang/Object#6 Utf8 size#7 Utf8 I#8 Utf8 ConstantValue#9 Integer 100#10 Utf8 init#11 Utf8 ()V#12 Utf8 Code#13 Utf8 LineNumberTable#14 Utf8 LocalVariableTable#15 Utf8 this#16 Utf8 LTest;#17 Utf8 sout#18 Utf8 toDouble#19 Utf8 (I)I#20 Utf8 prame#21 Utf8 add#22 Utf8 (II)I#23 Utf8 p1#24 Utf8 p2#25 Utf8 toTriple#26 Utf8 SourceFile#27 Utf8 Test.java#28 NameAndType #10:#11 // init:()V#29 Class #35 // java/lang/System#30 NameAndType #36:#37 // out:Ljava/io/PrintStream;#31 Utf8 Test#32 Class #38 // java/io/PrintStream#33 NameAndType #39:#40 // println:(I)V#34 Utf8 java/lang/Object#35 Utf8 java/lang/System#36 Utf8 out#37 Utf8 Ljava/io/PrintStream;#38 Utf8 java/io/PrintStream#39 Utf8 println#40 Utf8 (I)V {public Test();descriptor: ()Vflags: ACC_PUBLICCode:stack1, locals1, args_size10: aload_01: invokespecial #1 // Method java/lang/Object.init:()V4: returnLineNumberTable:line 1: 0LocalVariableTable:Start Length Slot Name Signature0 5 0 this LTest; // 疑问为什么这里的Length为5public void sout();descriptor: ()Vflags: ACC_PUBLICCode:stack2, locals1, args_size10: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;3: bipush 1005: invokevirtual #4 // Method java/io/PrintStream.println:(I)V8: returnLineNumberTable:line 5: 0line 6: 8LocalVariableTable:Start Length Slot Name Signature0 9 0 this LTest;public int toDouble(int);descriptor: (I)Iflags: ACC_PUBLICCode:stack2, locals2, args_size20: iconst_21: iload_12: imul3: ireturnLineNumberTable:line 9: 0LocalVariableTable:Start Length Slot Name Signature0 4 0 this LTest;0 4 1 prame Ipublic int add(int, int);descriptor: (II)Iflags: ACC_PUBLICCode:stack2, locals3, args_size30: iload_11: iload_22: iadd3: ireturnLineNumberTable:line 13: 0LocalVariableTable:Start Length Slot Name Signature0 4 0 this LTest;0 4 1 p1 I0 4 2 p2 Ipublic static int toTriple(int);descriptor: (I)Iflags: ACC_PUBLIC, ACC_STATICCode:stack2, locals1, args_size10: iconst_31: iload_02: imul3: ireturnLineNumberTable:line 17: 0LocalVariableTable:Start Length Slot Name Signature0 4 0 prame I }现在对toDouble方法进行分析 Code属性下 stack2表示操作数栈的最大深度为2locals2表示本地变量表的存储空间为2个变量槽args_size2表示方法的传参有2个 这里有个问题明明方法签名为toDouble(int prame),只有一个参数为什么这里显示有两个参数呢因为在编译的时候会自动的传入一个参数this。并放到局部变量表的0号槽中。 LocalVariableTable 表示各变量在局部变量表中的存储情况。 Code:stack2, locals2, args_size20: iconst_2 # 将int型数值2推送到操作数栈顶1: iload_1 # 将第二个int型本地变量推动至栈顶即将局部变量表中solt索引为1的变量推送至操作数栈栈顶2: imul # 将栈顶两个int类型数值相乘并将结果压入栈顶3: ireturn # 从方法中返回int类型的数据即将操作数栈栈顶元素弹出Exceptions属性 Exceptions属性是在方法表中与Code属性平级的一项属性与Code属性中的异常表不是同一东西列举出方法中可能抛出的受查异常Checked Excepitons 也就是方法描述时在throws关键字后面列举的异常。 Exceptions属性结构 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u2number_of_exceptions1抛出的受查异常种数u2exception_index_tablenubmer_of_exceptions指向常量池中CONSTANT_class_info型常量的索引 LineNumberTable属性 用来描述Java源码与字节码行号之间的对应关系。这里的字节码行号指的是字节码距方法体开始的偏移量。是一个非必须属性。默认生成。可使用-g: none或-g:lines来选择或者取消。 若不生成改属性那么在抛出异常的时候堆栈中将不会显示出错的行号在调试时无法按照源码行来设置断点。 LineNumberTable属性结构 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u2line_number_table_length1属性个数line_number_infoline_number_tableline_number_table_lengthline_number_info集合 line_number_info 类型名称备注u2start_pc字节码行号u2line_numberJava源码行号 LocalVariableTable 用来描述栈帧中局部变量表的变量与Java源码中定义的变量之间的关系是非必须的。-g:none,-g: vars来取消或选择。默认会生成到class文件中若取消该属性那么当他人引用时所有的参数名称都会消失。 LocalVariableTable属性结构 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u2local_variable_table_length1本地变量表长度local_variable_infolocal_variable_tablelocal_variable_table_length本地变量表 local_variable_info结构 类型名称数量备注u2start_pc1该局部变量的声明周期的开始字节码偏移量u2length1该局部变量的作用范围u2name_index1是指向CONSTANT_Utf8_info型常量的索引代表局部变量的名称u2descriptor_index1是指向CONSTANT_Utf8_info型常量的索引代表局部变量的描述符u2index1在局部变量表中的变量槽位置 在JDK引入泛型后增加了**LocalVariableTypeTable **属性仅仅是将descriptor_index替换为字段的特征签名Signature 。 SourceFile及SourceDebugExtension属性 SourceFile属性用于记录生成这个Class文件的源码文件名称。 可选-g:none,-g: source来关闭或开启。若不生成在抛出异常的时候堆栈中不会显示出错代码所属的文件名。 SouceFile属性结构 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u2sourcefile_index1指向常量池中CONSTANT_Utf8_info型常量的索引 常量值是源码文件的文件名 JDK 5时 新增了SourceDebugExtension属性用于存储额外的代码调试信息。 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u1debug_extension[attribute_length]1额外的调试信息 ConstantValue属性 该属性的作用是通知虚拟机自动为静态变量赋值。只有被static修饰的变量才能使用这项属性。 非静态变量实例构造器()方法中赋值静态变量类构造器()方法中赋值静态变量使用ConstantValue属性 Oracle公司的选择是常量static final共同修饰的变量且其类型为基础类型或String使用ConstantValue属性来进行初始化非基础类型及字符串或仅被static修饰那么在()中进行初始化。 ConstantValue属性结构 类型名称数量备注u2attribute_name_index1属性名索引u4attribute_length1属性长度u2constantvalue_index1常量池中一个字面量的引用
http://www.sadfv.cn/news/176291/

相关文章:

  • 高端品牌网站建设费用网站首页模块建设
  • 重庆制作企业网站电子商务网站建设可行性 分析
  • 一级做爰片软件网站企业网络管理员
  • 长沙品质网站建设优点html做游戏网站
  • 做网站-信科网络wordpress 菜单栏
  • 石家庄市住房城乡建设局网站哈尔滨建设工程网
  • 厦门网站建设高级课程想学管理从哪里开始
  • 服装公司网站策划书怎么建立一个简易的网站
  • 做网站的技术哪个简单wordpress主题如何升级
  • 天地做网站怎么做产品网站
  • 沈丘网站建设网页游戏开服表 怎么删除
  • 济南市住房和城乡建设局官方网站唐山的谁会建网站
  • 来个网站吧好人一生平安常见的手机网站
  • 2018做网站前景好么沈阳做企业网站哪家好
  • 网站建设模板源码特效咨询网站搭建
  • wordpress站点如何添加百度分享代码二合一收款码免费制作网站
  • 网站排名怎么做 site昊诺网站建设
  • 安徽中色十二冶金建设有限公司网站建设工程合同的分类
  • 湘潭网站网站建设wordpress新建相册页面
  • 网站伪静态设置怎么把危险网站
  • iis7.0网站错误代码解决好看个人博客html源码
  • 温州seo网站建设宁波公司网站建设
  • 设计业务网站用织梦做网站调用乱码
  • 优化关键词规则seo推广费用
  • 王晴儿网站建设方案设计公司网站的要点
  • 网站做seo必要的结构织梦cms 获得网站流量次数
  • 图库素材网站wordpress 社交登录
  • 网站动图是怎么做的学前端有必要找培训机构吗
  • 手机网站免费模板下载做店铺装修的公司网站
  • 网页设计与制作课程小结wordpress4.8优化