痛苦的拆类总结

 终于在实践上用上了JVM的相关知识了,那就是拆类。class太大,或者相关class太多导致一次loadclass的时候内存峰值过大,从而导致无法加载class就无法运行程序,拆小类,理清调用顺序,lazy load就成了解决问题的策略。
拆类是痛苦的,拆类导致了更大的Jar包,拆类没有办法将一个方法完全抽离出来,尤其在代码是通过预编译程序处理而得到的时候,就会有一些包装方法,通用的称呼就是代理方法,这样增加了总体的方法数量,导致预校验时标签增多(效果很明显,有个比较大的类居然拆成3个之后增加了5-6k的代码而且是混淆之后的),同样,拆类为了保证外边调用不变,增加了很多宏定义命令,使整个代码更加难懂。但是没有办法,不拆类就无法继续。
不过有几个简单的步骤可以指导下:
1、去除同文件内部,比如CGame中,用CGame调用静态方法变量的这种写法,去除用this调用非静态方法变量的写法
2、定义#define private public将所有private属性去除
3、用include宏命令将将要处理的方法包括在新的class中,并导出一个调用宏关系,放置在宏文件中,如果继承关系,导出的宏主要是父类调用子类的对象方法或者子类的静态方法。
如果是inner方法,导出宏,主要是用新的类调用静态方法的宏
4、在需要调用到这些函数或者变量的地方使#include这个宏文件(如果是继承关系,可以不用管这个宏文件了)
5、以上所有的就没有处理数组这种特别的下标访问方式,所以用的数组需要麻烦一点,可以使用这样两个宏来代换
#define GETARRAYITEM(NAME,...) NAME##[param1][param2]
#define SETARRAYITEM(NAME,...) NAME##[param1][param2]=param3
这个宏没测验,需要预处理程序能够处理多参数宏,具体的多参数宏的定义我还要看看
在理清调用顺序中,Lazy load是很通用的的手法,也就是对编译后的Java文件进行修改,去除声明(大对象)时就调用赋值函数的部分,就只保留声明,然后运行,在发现空指针是设置初始值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值