- 浏览: 847921 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
loveseed1989:
您好,我用您的方法运行Cone.java,会给我报java.l ...
vtk学习笔记 --- 编译vtk库和java库 -
60love5:
60love5 写道首先谢谢你的解析,但你这个验证可见性的小程 ...
多线程中共享对象的可见性 -
60love5:
首先谢谢你的解析,但你这个验证可见性的小程序是存在问题的,你的 ...
多线程中共享对象的可见性 -
Gamehu520:
...
java 中的Unsafe -
shanpao1234560:
这个list不是静态的第一种情况下也会有线程安全的问题么,求指 ...
一个看似线程安全的示例
ASM 3.0
Java 字节码引擎库
1简介
1.1动机
程序分析,生成以及转换是很有用的技术手段,可以应用在很多场景下:
- 程序分析,涉及的范围很广,从简单的语法解析到完整的语义分析,也可用来发现程序中潜在的bug,检测未使用的代码,以及反向工程等。
- 用来帮助编译器生成代码。包括传统的编译器,用在分布式编程中的内嵌的编译器,以及即时编译器等。
- 程序转换可以用来优化程序或者对程序进行混淆,或者在应用中插入调试代码或者性能监控代码,再或者面向切面编程等。
所有的这些技术可以用在任何编程语言中,只是针对不同的编程语言,实现的难度也不尽相同。对应java语言,这些技术可以用在java源代码或者编译过的java类文件上。能够对编译过的java类文件进行处理,有一个明显的优势,那就是不需要源代码。程序转换也因此可以使用在任何应用程序上,包括闭源的和商业的。针对编译后的代码的处理,另外一个优势就是可以在运行时,也就是在这些代码被加载进入虚拟机之前(在运行时生成代码并编译源代码是可能的,但是速度很慢,并且需要一个全功能的java编译器),对类文件进行分析、生成或者转换。对用户而言,这些优势就是内嵌编译器或者切面编程对用户是不可见的。
由于程序分析、生成和转换存在很多应用需求,所以人们针对不同的编程语言,这也包括java,实现了很多工具来进行程序分析、生成和转换。ASM就是这些工具中的一员,其主要是面向java。ASM被设计用以在运行时对java类进行生成和转换,当然也包括离线处理。ASM库主要是工作在编译好的java类之上。ASM被设计的短小精悍,尽量保证其速度很快,同时库的容量又很小。ASM快速的目标就是避免在运行时动态生成class和转换对应用程序的速度影响。由于ASM库容量很小,因此,它可以被用在很多内存受限的环境中,同时避免导致小应用程序或者库的容量变大。
ASM不仅仅是生成和转换编译后的java类的工具,而且它也是最有效的。它可以从http://asm.objectweb.org上下载得到。它的主要优势包括如下几方面:
- 它有一个很小,但是设计良好并且模块化的API,且易于使用。
- 它具有很好的文档,并且还有eclipse插件。
- 它支持最新的java版本,java 6。
- 它很小,很快,很健壮。
- 它有一个很大的用户社区,可以给新用户提供支持。
- 它的开原许可允许你几乎以任何方式来使用它。
1.2概述
1.2.1范围
ASM库的目标是生成、转换和分析编译后的java类,在虚拟机中以字节数组表示(它们是保存在硬盘上,在运行的时候被加载入java虚拟机)。基于这个目标,ASM提供了对这些字节数组进行读取,写入和转换的工具,这些工具使用更高级别的概念,而非字节,比如数字常量,字符串,java标识符,java类型,java类结构元素等等。注意,ASM库的范围严格限于对java类进行读取,写入,转换以及分析。Java类文件的加载过程超出了该范围。
1.2.2模型
ASM库提供了两套API用来生成、转换编译后的java类:核心的API是基于事件的,而Tree API是基于对象的。
在基于事件的模型中,一个java类表现为一系列事件,每一个事件代表了类中的一个元素,如类的头部,字段,方法声明,或者指令等。基于事件的API定义了一系列的事件以及这些事件发生的顺序,并且提供了一个类解析器,这个解析器在解析到一个类元素时,就会生成一个事件,与此对应的,类写入器在发生这些事件的时候生成编译后的类。
在基于对象的模型中,一个java类表现为一个对象树,每一个对象代表了类中的一部分,入类本身,一个字段,一个方法或者指令等。每个对象都具有指向其组成成分的引用。基于对象的模型提供了一种方式,用来将代表类的一系列事件转换为一颗对象树,反之亦然,将一颗对象树转换为一系列对等事件。换句话说,基于对象的模型是构建在基于事件的模型之上。
这两套API可以和java中的XML解析库SAX(the Simple API for XML)和DOM(Document Object Model) API来对比。基于事件的API类似于SAX,而基于对象的API类似于DOM。基于对象的API构建在基于事件的API之上,类似于DOM可以在SAX之上使用。
ASM之所以提供了两套API,那是因为没有最好的API,这两套API具有它的优势和缺点:
- 基于事件的API速度更快,需要的内存空间要小于基于对象的API,因为没必要在内存中保留一个代表类结构的对象树(这个不同同时也存在于SAX和DOM之间)。
- 但是,通过基于事件的API来实现类的转换比较困难,因为在给定的时间,只有一个与该事件对应的元素可用。但是,基于对象的API能够在内存中保留整个类。
注意,这两套API在一个时刻都只能处理一个类,并且不依赖于其他类:因为没有维护关于类结构的信息,因此如果一个类的转换影响了其他类,那么由用户来决定是否修改其他类。
1.2.3架构
ASM应用有一个健壮的架构。基于事件的API,在事件的产生者(类解析器)的周围,是事件的消费者(类写入器),以及一些预定义的事件过滤器,用户自定义的事件产生者、消费者和过滤器都可以被添加进去。可以按照以下的两个步骤来使用API:
- 将事件的产生者、过滤器和消费者组件放置到架构的合适位置,
- 然后,启动事件的产生者进行类生产或者转换。
基于对象模型的API也有其架构:操作对象的类生成器和转换器可以被组合起来使用,它们之间的链接代表了转换的顺序。
尽管在典型的ASM应用中,大部分组件架构都是很简单的,但是可以想象一下像下面这幅图的复杂架构,箭头代表在链条中,基于事件或者对象模型中的类解析器、写入器和转换器之间的通信,在基于事件和对象模型之间需要经过合适的转换。
1.3组织
ASM库分为几个包,并且在不同的jar包中分发:
- org.objectweb.asm 和 org.objectweb.asm.signature 包定义了基于事件的API,并且提供了类解析组件和写入组件。它们包含在asm.jar归档中。
- org.objectweb.asm.util包,包含在asm-util.jar归档中,提供了一些基于核心API的工具,可以用来协助开发和调试ASM应用。
- org.objectweb.asm.commons包提供了几个预定义类转换组件,大部分基于核心API,它包含在asm-common.jar归档中。
- org.objectweb.asm.tree包,包含在asm-tree.jar归档中,定义了基于对象模型的API,同时也提供了一些工具对基于事件的和基于对象模型的展现进行转换。
- org.objectweb.asm.tree.analysis包提供了一个类分析框架,以及几个预定义好的类分析器,基于tree API。它包含在asm-analysis.jar归档中。
文档被组织为两部分,第一部分,覆盖了核心API,如asm,asm-util和asm-commons归档。第二部分覆盖了tree API(基于对象模型的API),如asm-tree和asm-analysis归档。每部分包含至少一章用来介绍与类相关的API内容,一章与方法相关的API,一章与注解、泛型等相关的API。每章都讲解了编程接口,以及相关的工具,和预定义好的组件等。所有这些例子的源代码可在该地址下载:http://asm.objectweb.org/。
字体约定
Italic斜体 用来强调句子中的元素。
等宽字体 表示代码片段
等宽粗体 表示强调代码元素
Italic等宽斜体 表示代码中的变量部分和标签
1.4致谢
我非常感谢François Horn 在该文档拟定过程中的珍贵的评论,这帮助改善了文档的结构和可读性。
评论
鄙人最近在使用asm做一些bytecode的操作,发现其在visitVarInsn时,只能知道变量索引,而没有相关的API找到这个变量的类型,楼主翻译了这个指南,asm的应用水平一定很高,能否指点一下
过奖了。
翻译这个文档,也是因为当初做一个jvm监控系统未找到相关的文档。
有问题可以相互交流。
性能,异常信息,以及抓取特殊的方法参数等等。
鄙人最近在使用asm做一些bytecode的操作,发现其在visitVarInsn时,只能知道变量索引,而没有相关的API找到这个变量的类型,楼主翻译了这个指南,asm的应用水平一定很高,能否指点一下
过奖了。
翻译这个文档,也是因为当初做一个jvm监控系统未找到相关的文档。
有问题可以相互交流。
性能,异常信息,以及抓取特殊的方法参数等等。
鄙人最近在使用asm做一些bytecode的操作,发现其在visitVarInsn时,只能知道变量索引,而没有相关的API找到这个变量的类型,楼主翻译了这个指南,asm的应用水平一定很高,能否指点一下
过奖了。
翻译这个文档,也是因为当初做一个jvm监控系统未找到相关的文档。
有问题可以相互交流。
鄙人最近在使用asm做一些bytecode的操作,发现其在visitVarInsn时,只能知道变量索引,而没有相关的API找到这个变量的类型,楼主翻译了这个指南,asm的应用水平一定很高,能否指点一下
过奖了。
翻译这个文档,也是因为当初做一个jvm监控系统未找到相关的文档。
有问题可以相互交流。
鄙人最近在使用asm做一些bytecode的操作,发现其在visitVarInsn时,只能知道变量索引,而没有相关的API找到这个变量的类型,楼主翻译了这个指南,asm的应用水平一定很高,能否指点一下
等把核心部分翻译完了,会把它们整理为pdf贴出来下载
Thanks!
希望坚持把它翻译完!
发表评论
-
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(二)
2014-11-21 22:23 3216要求:使用Oracle Streams捕获某个用户下部 ... -
基于Oracle Streams + Oracle AQ 捕获变更,发布变更(一)
2014-11-20 22:23 2806要求:使用Oracle Streams捕获某个用户下部分表 ... -
如何去掉在浏览器中打开java applet时的警告对话框
2013-08-24 12:10 6998好久没更新博客了! 最近,由于项目要求,需要将sw ... -
Android 内存泄露笔记
2013-03-05 23:10 01、大部分内存泄露都是错误的持有了Activity或者Con ... -
java 虚拟机总结 【思维导图】
2012-12-22 20:11 2098java虚拟机总结思维导图: 参考《深入理解jav ... -
Java虚拟机字节码执行引擎 【思维导图】
2012-12-22 19:51 1689java虚拟机字节码执行引擎思维导图总结: 参考《深入理 ... -
java 垃圾回收相关总结 【思维导图】
2012-12-21 19:03 3289java垃圾回收相关总结: 参考《深入理解java ... -
java并发中的延迟初始化
2012-12-12 19:17 4708在《java并发编程实战 ... -
java同步容器与并发容器
2012-12-09 18:07 4365何为同步容器:可以简 ... -
一个看似线程安全的示例
2012-12-09 14:56 5082在《java并发编程实战》第四章4.4.1节给出了一个程序示 ... -
多线程中的long和double
2012-12-08 19:26 4208在看一些代码的时候,会发现在定义long型和double型的 ... -
多线程中共享对象的可见性
2012-12-08 18:52 5152在阅读《java并发编程实战》的第三章的时候,看到书中的一个 ... -
一个快速、轻量级 Collection 库 Trove
2012-12-07 09:35 3766Trove一个快速、轻量级针对java原子类型(byte,i ... -
java 中的Unsafe
2012-12-05 22:25 32762在阅读AtomicInteger的源码时,看到了这个类:su ... -
在ubuntu10上编译Thrift0.8.0
2012-08-01 15:34 2160下载thrift0.8.0 ,地址: http:// ... -
生活小工具--记账小助手1.0发布
2012-05-31 15:08 1760因为自己平时喜欢记账,把每日的消费情况都记录下来,所以希望找 ... -
话费速查升级版v1.3发布
2012-05-04 12:47 1443前段时间开发了一个话费速查的小应用,最近一直保持每周更新一个 ... -
编译zeromq的java绑定:jzmq
2012-05-03 22:47 135521、 下载zeromq源码:http://www.ze ... -
Android软件包静默安装小应用 - 附源码
2012-04-21 20:50 12424老早之前,写了一个android软件包静默安装的应用,放在工 ... -
最方便的联通话费,余额查询软件来了! --- 联通话费速查v1.2
2012-04-12 18:01 4046软件介绍: 联通话费速查是一款针对联通 ...
相关推荐
储能双向变流器,可实现整流器与逆变器控制,可实现整流与逆变,采用母线电压PI外环与电流内环PI控制,可整流也可逆变实现并网,实现能量双向流动,采用SVPWM调制方式。 1.双向 2.SVPWM 3.双闭环 支持simulink2022以下版本,联系跟我说什么版本,我给转成你需要的版本(默认发2016b)。
LCC-LCC无线充电恒流 恒压闭环移相控制仿真 Simulink仿真模型,LCC-LCC谐振补偿拓扑,闭环移相控制 1. 输入直流电压350V,负载为切电阻,分别为50-60-70Ω,最大功率3.4kW,最大效率为93.6%。 2. 闭环PI控制:设定值与反馈值的差通过PI环节,输出控制量限幅至0到1之间,控制逆变电路移相占空比。 3. 设置恒压值350V,恒流值7A。
(仿真原件+报告)永磁同步电机转速外环+电流内环控制,采用级连H桥五电平逆变器控制,转速环控制,五电平采用SPWM,且设有死区控制。 1.五电平逆变器 2.SPWM,死区控制 3.提供相关参考文献 提供报告,里面有仿真每个模块的作用,仿真原理与解析。 提供参考文献,提供控制原理。 支持simulink2022以下版本,联系跟我说什么版本,我给转成你需要的版本(默认发2016b)。
电子学习资料设计作品全资料单片机控制LED点阵显示器提取方式是百度网盘分享地址
H5娃娃机搭建教程 服务安装linux7x 安装宝塔 服务器环境:Nginx MySQL 5.6 php5.6 php5.6不行就换5.3或者7.2 记得关防跨站 记得关防跨站 1.绑定域名,上传源码 2.创建数据库,导入数据库 3.修改数据库 进入程序目录/ong 编辑config.php 7行 8行 9行改为你的数据库信息 4.后台地址/admin.php 后台账号admin 密码123456
MATLAB Simulink粒子群优化算法永磁同步电机PMSM参数辨识 附参考文献 永磁同步电机PMSM控制结构与常规的一致,就多了粒子群算法进行永磁同步电机PMSM参数辨识,辨识精度高,仿真效果好,附相关参考文献。 代码有注释,理论上其他类型电机也能使用,不过要你自己去手动修改。 包运行可放心暂不支持,谢谢理解好的资料仿真可以事半功倍很值得学习借鉴的一份仿真,可以有助于您学习和理解
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
基于MPC的USV自主航行仿真研究MATLAB源码+实验报告,个人经导师指导并认可通过的高分大作业项目,评审分98分,项目中的源码都是经过本地编译过可运行的,都经过严格调试,确保可以运行!主要针对计算机相关专业的正在做大作业的学生和需要项目实战练习的学习者,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真研究MATLAB源码+实验报告基于MPC的USV自主航行仿真
电影推荐系统-基于spark推荐算法设计实现-最新开发(含全新源码+设计报告及资料).zip 【资源说明】 1、该项目是团队成员近期最新开发,代码完整,资料齐全,含设计文档等 2、上传的项目源码经过严格测试,功能完善且能正常运行,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的高校学生、教师、科研工作者、行业从业者下载使用,可借鉴学习,也可直接作为毕业设计、课程设计、作业、项目初期立项演示等,也适合小白学习进阶,遇到问题不懂就问,欢迎交流。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 5、不懂配置和运行,可远程教学 6、欢迎下载,沟通交流,互相学习,共同进步!
Comsol隧道围岩流固耦合 1主题:岩溶隧道突水渗流和损伤 2内容:mph文件、力学参数文件,围岩损伤课题参考文献(500M) 3备注:看懂每一步建模过程,特别注意研究模态及matlab和comsol的连接,文件的调取等 4提示适合初学者,有钻研精神。
本文首先介绍了常用的时间序列算法和时间序列的预处理,接着讲解平稳时间序列分析,包括AR模型、MA模型和ARMA模型,最后讲解基于ARIMA模型的非平稳时间序列分析。 该数据集包括基于ARIMA模型的非平稳时间序列分析的源代码和数据集。
电子学习资料设计作品全资料电机转速测量系统提取方式是百度网盘分享地址
npm版本管理,nvm
毕设-PHP-[整站程序]清风千年整站系统 V5.0 (附PSD源文件)_qfkzweb_free5_php5_gbk32.zip
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于计算机科学与技术等相关专业,更为适合;
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手