这两天写用ASM写了一个将普通JavaBean转成MongoDB的DBObject对象的一个方法,对其中遇到的一些问题做一个总结。
1.自动装箱功能
用ASM就意味着很多jdk的很多优化性的功能不能用了,其中之一就是自动装箱和拆箱。如果一个方法接收一个Integer的参数,那你在用ASM调用该方法的时候就不能直接将int传给这个参数,而是要用Integer.valueOf()方法来封装。
2.关于接口方法的调用
我们在编写普通java方法时,对于接口方法和对象的方法在调用上来说没有任何区别,但在jvm底层,这两者是有区别的,调用对象的非静态方法用的是INVOKEVIRTUAL指令,而调用接口方法是用的INVOKEINTERFACE指令。这点在使用ASM中应特别注意。
3.不使用的返回值
这个问题困扰了我接近一个小时,在我们平时调用时,对于那个方法有返回值,但我们不使用的情况,我们可能从来没有注意过。但你去用javap反编译字节码,会发现如果不使用这个返回值,最后会有一个POP指令将其弹出,这是为了使在方法执行完后,运行栈上为空。如果最后不为空,可能会出现:java.lang.VerifyError:Inconsistent stack height 3 != 2
还有一些更细节的东西就不写出来,以免被鄙视。(不定期更新。。。)
分享到:
相关推荐
AMS添加磁盘的操作如果添加不当会造成很大问题,这里自己的一些操作步骤说明和体会,希望对大家有用!
包括详细的安装过程和每一步的说明,以及安装注意事项 一、 说明 2 二、 安装前 2 (一) 相关知识点 2 1. RAC概述 2 2. GI(Grid Infrastructure) 4 (二) 安装前环境准备 4 1. 安装步骤 4 2. 虚拟机硬件环境准备...
1.安装过程注意事项 2.ORACLE11G GRID安装 3.ORACLE11G软件安装 4.ORACLE11G升级PATCH 5.ORACLE11G创建数据库 6.如何新建ASM磁盘组 7.配置VCS5.1双机
oracleasm可通过yum安装(附注意事项方法) 包含oracleasm-support-2.1.8-1.el6.x86_64.rpm和oracleasmlib-2.0.4-1.el6.x86_64
实例为新手提供msp430开发注意事项,熟悉IAR编辑环境.
图书管理系统 框架 8086 + txt + asm...注意事项,输入图书的时候不能带有空格,空格函数字符没有处理。 管理员用户密码 admin 123456 模块介绍 管理员 登陆模块 验证模块 清屏模块 图书管理 退出模块 数据源内存块
关于寄存器的注意事项 并非所有声明的寄存器都被使用。 我将从只有4个基本寄存器的非常简单的内容开始,然后进行更深入的介绍。 我想要的功能 基本指令集 处理系统调用 使用漂亮的表格在CLI中显示寄存器... 制作...
常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作 用域,
中南大学微机原理与系统的汇编实验代码+硬件proteus图 .asm程序使用masm软件打开,硬件接线图使用proteus8打开
正是由于USB 3.0改变了对传统USB速度较慢的看法,祥硕科技将与大家分享关于USB 3.0存储端设计应注意的事项。 首先,由于祥硕科技提供的产品是属于高速的产品,以目前市场上效能最高的产品ASM1051E为例,主要对外...
简介 本项目通过Android字节码插桩插件实现Android端无埋点(或自动埋点),并且支持根据配置文件实现业务数据的...注意事项 在AS 3.0中,需要在project的 gradle.properties中添加 android.enableD8=true 使用 使用
功能说明: ● 本软件能批量删除代码...注意事项: ■ 不支持超过64K的文件,如有超过64K的文件将忽略处理; ■ 本软件直接处理目标文件,使用前请做好备份; ■ 将不用的文件尽量删除,这样可以缩短扫描时间;
C/C++支持内联汇编,在C/C++代码中可以采用asm来插入汇编指令,本文对内联汇编的语法及使用注意事项进行了简要介绍。
常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量的定位是编译器的事情,初学者只要定义变量和变量的作 用域,编译器就把一个固定地址给这个变量。怎么取得这个变量的地址?要用指针。
注意事项:需安装MASM32 SDK 的最新版本,官方链接:http://www.masm32au.com/,还有VC6.0,并且两种软件均安装在C盘,而且按照默认路径安装。 使用方法:首先进入命令提示符状态,切换到asm源文件目录,如:C:\...
这是有关编译器如何实现函数调用以将参数传递到被调用函数并从被调用函数获取返回值的说明。
注意事项: 1.用VMProtect处理,请多测试,如果不稳定,请调整被保护代码的范围。 2.VMProtect对双线程支持不是太好,请同一次仅处理一个线程内的代码 2.用SDK标记代码 VMProtect v1.2以上支持SDK了,可以编程时...
FreeCAD注意事项 聊天室: ://forum.freecadweb.org/viewtopic.php f t 38564 进行中/待办事项 定期检查这些线程,并在就绪时将其添加到此HOWTO: 待测试 以下任务(由我本人)将进行测试,然后合并到本HOWTO的...