Javacard - потеря мощности при сборке мусора
Я заметил очень странное поведение на своих смарт-картах (NXP J2E145, J3A081, J3C145 с считывателем Omnikey 5121): потеря мощности сразу после вызова метода JavaCard
JCSystem.requestObjectDeletion()
может повредить карту: примерно через 10% таких отключений питания команда ATR работает очень медленно (1000 мс), и я не получаю ответа ни на какие другие APDU (выбор апплета, аутентификация менеджера карт и т.д.).
Я знаю, что поведение requestObjectDeletion() зависит от конкретной реализации поставщика, поэтому мой вопрос довольно широк и открыт...
Собирает ли сбор мусора "обычно" в одной транзакции?
Есть ли какая-либо "официальная" рекомендация НЕ называть requestObjectDeletion() в случае возможной потери питания?
Есть ли у вас какой-либо опыт работы с картами NXP?
EDIT:
- JCSystem.isObjectDeletionSupported() == true на всех моих смарт-картах.
При попытке подключиться к апплетам менеджера карт поврежденной карты оболочка JCOP в Eclipse IDE сообщает об этом:
ATR: 3BFB9600008131FE454F4450204D41502053414D3E
ATR: T = 1
jcshell: Неизвестные проблемы с терминалом.
Последняя ошибка терминала: запрос не может быть выполнен из-за ошибки устройства ввода-вывода.
Ну, я думаю, это может быть ошибка реализации. В общем, сбор мусора обычно никогда не нужен и никогда не используется на смарт-картах. Вы должны избегать его при любых обстоятельствах с помощью хорошего дизайна апплета. Потому что таким образом вы никогда не сталкиваетесь с проблемами памяти, которые вредны для смарт-карты, установленной один раз в жизни, и могут быть использованы для остальной части жизненного цикла. Сбор мусора в любом случае слишком длинен, и, возможно, этот программный программист не ожидал, что это произойдет за пределами безопасной среды.
- Вопросы
- Transactions
- Javacard - потеря мощности при сборке мусора