JAVA卡-应用编程必知
- 2014-12-02 14:54:57
- admin
- 2830
- 最后编辑:admin 于 2014-12-11 15:27:27
1、关于new
new的对象(包括数组)都是存储在EEPROM里面,并不是在内存RAM里面;通常遇见6A84错误(没有足够的空间),一定是哪个地方有频繁new对象。
new等价的操作makeTransient、buildKey、getInstance,这些操作都是进行了空间分配的,所以要同new一样进行考虑。
tips:尽量重用对象,不要进行new操作!
2、垃圾回收
JAVA卡的规范里面并没有强制要求实现垃圾回收,所以基本上没有JAVA卡实现垃圾回收;而且即使实现了垃圾回收,因为碎片也会导致JAVA卡运行效率非常低。
垃圾回收API说明(尽量不用):
javacard.framework.JCSystem.isObjectDeletionSupported() 判断是否支持垃圾回收
javacard.framework.JCSystem.requestObjectDeletion() 请求垃圾回收
tips:因为没有垃圾回收,所以不要在process函数里面new对象,所有对象在install函数里面new好。
3、关于资源
典型的JAVA卡有64K的EEPROM(永久存储空间),8K的RAM(用户可用RAM只有2K左右),资源十分的稀缺,所以编程是一件特别考验能力的事情。
tips:函数嵌套不要太深(栈空间减少),局部变量尽量重用(栈空间减少),不要创建太多对象(EEPROM使用减少)
new的对象(包括数组)都是存储在EEPROM里面,并不是在内存RAM里面;通常遇见6A84错误(没有足够的空间),一定是哪个地方有频繁new对象。
new等价的操作makeTransient、buildKey、getInstance,这些操作都是进行了空间分配的,所以要同new一样进行考虑。
tips:尽量重用对象,不要进行new操作!
2、垃圾回收
JAVA卡的规范里面并没有强制要求实现垃圾回收,所以基本上没有JAVA卡实现垃圾回收;而且即使实现了垃圾回收,因为碎片也会导致JAVA卡运行效率非常低。
垃圾回收API说明(尽量不用):
javacard.framework.JCSystem.isObjectDeletionSupported() 判断是否支持垃圾回收
javacard.framework.JCSystem.requestObjectDeletion() 请求垃圾回收
tips:因为没有垃圾回收,所以不要在process函数里面new对象,所有对象在install函数里面new好。
3、关于资源
典型的JAVA卡有64K的EEPROM(永久存储空间),8K的RAM(用户可用RAM只有2K左右),资源十分的稀缺,所以编程是一件特别考验能力的事情。
tips:函数嵌套不要太深(栈空间减少),局部变量尽量重用(栈空间减少),不要创建太多对象(EEPROM使用减少)
发表评论