当前位置 —论文本科论文— 范文

关于代码方面论文范例,与代码动态生成技术提升Java程序灵活性相关毕业论文网

本论文是一篇关于代码方面毕业论文网,关于代码动态生成技术提升Java程序灵活性相关电大毕业论文范文。免费优秀的关于代码及方法及文件方面论文范文资料,适合代码论文写作的大学硕士及本科毕业论文开题报告范文和学术职称论文参考文献下载。

#30340;.

2使用ASM

类文件是一个二进制文件,要程序员直接阅读和编写,是很困难的,应使用一些辅助工具软件.目前这方面最成熟、最受欢迎的是ASM,它是一个开源软件,相比于其他类似软件,ASM更小更快,也提供了更好的编程模型[3].它还附有代码生成工具和eclipse插件,可以在良好的人机界面下开展工作.ASM提供了两套API,一套类似于处理XML文件的SAX,由扫描类文件产生的一系列事件驱动,采用访问者模式进行处理.另一套类似于DOM,基于扫描类文件获得的语法树进行处理,两套方法各有优缺点,前者速度快,所需内存少,而后者能进行更全面的控制.


该文url http://www.sxsky.net/benkelunwen/060238212.html

以前套方法为例,ASM提供了类解析器ClassReader,能够扫描解析类文件,并发出各驱动事件;提供类生成器ClassWriter,按合适的次序调用能生成包含各种元素的二进制类文件.ASM还有ClassVisitor、FieldVisitor、MethodVisitor、AnnotationVisitor等抽象类,为访问类文件中各元素定义了相应的visit方法,也按类文件的格式要求规定了调用次序.用户只要制作子类,用自己的处理逻辑覆盖相应方法,无须关注字节偏移量、常量池索引号等底层细节,就可实现从相关信息的检测、获取到运行代码的生成、修改等各种功能.

典型的代码结构如图2所示,由若干ClassReader、ClassVisitor子类、ClasssWriter组成一处理链.每个ClassVisitor子类通过对事件的过滤、变换、转发,实现自己特定的功能.它可以原样传送事件,保持对应元素不变;也可以改变事件参数,导致相应元素的修改;或者忽略某一事件不作转发,完成元素删除;还可以引入新的事件,注入新增加的元素.复杂情况下也可将这些对象组成网状结构,以完成多个类文件间的相互参照引用、合并、拆分等处理[5].学生只需了解类文件结构,熟悉设计模式中的访问者模式,这种修改、生成类文件的方法应是比较容易掌握的.

[ClasssWritercw等于newClassWriter();

ClassVisitorc1等于newSubClassVisitor1(cw),c2等于newSubClassVisitor2(c1);

ClassReadercr等于newClassReader(类文件).accept(c2,0);byte[]b等于cw.toByteArray();]

图2处理代码基本结构

3熟悉Bytecode

用ASM直接生成类文件的工作是在JVM的底层展开的,应尽可能用于简单处理.复杂的处理还是直接使用高级语言Java较为妥当,这样就能进行良好的隔离、封装,将它们组织成可组合使用的基本单元.在此基础上再动态生成一些指令,按需访问、调用它们,完成所希望的处理.这些指令需要按照某种特定逻辑在运行时添加、改变、删除处理对象和运算步骤,如果直接生成还是感觉困难,依然可以先用Java编写一程序模版,确定处理的基本框架和各核心元素,运行时再以此为基础在指令层面上进行简单的增删和替换.

除了简单的类型或名字修改,以及数据或方法整体的增、删、替换外,其他处理一般都牵涉到Bytecode代码,因此有必要熟悉它们.JVM是一个堆栈型机器,所有的局部变量存储和运算操作都在堆栈中实现,没有寄存器,也不需要复杂的寻址方式,因此指令系统相对简单,名义上它有200多条指令[1],但经过归纳整理,实际只有不到50条不同指令(见表1),多种变化只是根据数据类型、判断条件而有规则添加的前后缀,完全可以举一反三,学习起来比真实的CPU如8086等要容易得多.指令大体可以分为三类.

⑴堆栈操作:用于为后续操作或方法调用,在栈顶配置需要的数据,或取得运算结果.它包括局部变量、对象/类数据成员、数组元素的进出栈,常量的进栈,栈顶元素的复制、交换等.

⑵运算操作:指定需要完成的运算,包括算术和逻辑运算,类型转换等,对于对象还有构造、判定等操作.

⑶流程控制:用于改变执行流程,包括各种转移指令、方法调用和返回指令.

代码动态生成技术提升Java程序灵活性参考属性评定
有关论文范文主题研究: 关于代码的论文例文 大学生适用: 大学毕业论文、自考论文
相关参考文献下载数量: 72 写作解决问题: 毕业论文怎么写
毕业论文开题报告: 论文提纲、论文结论 职称论文适用: 论文发表、职称评副高
所属大学生专业类别: 毕业论文怎么写 论文题目推荐度: 优质选题

这些指令恐怕是相关内容中最繁杂的部分,教学的关键是要让学生理解JVM运行时的栈帧结构,指令也应着重介绍动态代码生成时常用的部分,主要是各种方法调用,数据访问,以及为此而必须进行的堆栈准备,表1中列出了堆栈和控制部分的相关指令.

表1JVM指令系统

[堆栈\&各类变量入/出栈\&①load⑥、①store⑥、①aload、①astore、get②、put②\&常量和栈顶处理\&①const_⑥、bipush、sipush、ldc⑦、pop③、dup③、swap\&运算\&算术运算\&①add、①sub、①mul、①div、①rem、①neg、iinc、①cmp⑥\&位或逻辑运算\&①shl、①shr、①ushr、①and、①or、①xor\&转换、构造和判定\&①2①、checkcast、new、④newarray、instanceof、arraylength\&控制\&方法调用和其他\&invoke②、monitorenter、monitorexit、nop\&条件判断\&if⑤、if_icmp⑤、if_acmp⑤、ifnull、ifnonnull\&转移和返回\&goto⑦、tableswitch、lookupswitch、①return、athrow、jsr⑦、ret\&①按数据类型\&②按成员属性\&③按所需的堆栈要求\&④按创建的数组类型\&⑤按判断条件\&⑥按操作要求\&⑦按数据宽度\&在此处填入相应内容\&]

4掌握类装载机制

二进制类文件只有通过装载机制装入JVM才能发挥作用.通常情况下JVM只能根据classpath等预先指定的路径搜索并载入已有文件.所以对于运行时动态生成的二进制代码,需要另行设法导入,才能正常使用.这就需要理解Java的类装载机制.

Java类是在运行时按需动态装载的.虚拟机中有多个类装载器,负责获取不同来源的类文件.除了启动类装载器(BootstrapClassLoader),其他都继承自抽象类ClassLoader[2].一般情况下,多个类加载器之间采用双亲委派模型组成一装载器树,以保证类代码的惟一性.类文件从装载到可以使用要经过载入、链接、初始化等阶段[4],载入阶段获取需要的二进制数据文件,链接阶段包含了代码合法性验证、存储空间获取和可选的引用类解析等操作.

因此,要能在运行时载入动态生成的代码,可以通过定义自己的类装载器完成.作为父类的ClassLoader有几个关键方法:

关于代码动态生成技术提升Java程序灵活性的电大毕业论文范文
关于代码方面论文范例

⑴defineClass(Stringname,byte[]b,intoff,intlen):可以将一个正确的字节数组转换为合法的Java类.

⑵findClass(Stringname):按该装载器特定的方法获得需要的二进制数据,并将其转换为Class对象.每个自定义装载器都应该覆写该方法,提供自己的载入机制.

⑶loadClass(Stringname):用于装载指定名字的类,它实现双亲委派模型,保证仅在必要时才调用自己的findClass方法完成装载.通常不用改写.

一般情况下自定义装载器只需定义findClass方法,在其中利用ASM的ClassWrite动态生成二进制代码,再通过defineClass方法将它转化为标准的Java类.其基本结构如图3的上面部分所示.

[ClassLoadermyClassLoader等于newClassLoader(){

publicClass<>findClass(Stringname){

byte[]clas

1 2 3

关于代码方面论文范例,与代码动态生成技术提升Java程序灵活性相关毕业论文网参考文献资料:

自考本科什么专业好

函授本科论文范文

本科毕业生论文

本科自考科目

行政本科论文

自考本科论文答辩成绩查询

函授本科院校

自考园林本科

自考本科资格

本科结业 自考本科

代码动态生成技术提升Java程序灵活性(2)WORD版本 下载地址