Java Card(Classicから2.1.1までに興味があります)では、アプレットに必要な一時(RAM)は、通常、インストール時にによって割り当てられますmakeTransientByteArray()
。そのメソッドはパラメータCLEAR_ON_RESET
またはを受け入れますCLEAR_ON_DESELECT
。後者には次のような警告が表示されます
CLEAR_ON_DESELECT
一時オブジェクトにアクセスできるのは、オブジェクトを作成したアプレットが現在選択されているアプレットと同じコンテキストにある場合のみです。
CLEAR_ON_DESELECT
現在選択されているアプレットがオブジェクトを作成したアプレットと同じコンテキストにないときに一時オブジェクトにアクセスすると、JavaCardランタイム環境はSecurityExceptionをスローします。
私の読書では、同時に選択されていCLEAR_ON_DESELECT
ないCLEAR_ON_RESET
限り、ランタイムは2つのアプレット間でトランジェント(上記のようにインストール時に割り当てられます)をオーバーレイできるため、m jバイトを割り当てる複数のアプレットは約max(m j )sum( m j )ではなく一時バイト。
更新:少なくとも一部のランタイム環境では、異なるパッケージから割り当てられたトランジェントに対して選択的にオーバーレイが発生するという調子で何かを言われました。しかし、私はそのような規則/メカニズムの参照または正確な説明を見つけることができません。
質問:このオーバーレイメカニズムは、ランタイムに実装されることがありますか?はいの場合、それはいつ発生しますか?そして、それを実装していないランタイムを持つカードはありますか?はいの場合、実験以外の方法で、おそらく宣伝されているJava Cardのバージョンから判断する方法はありますか?
その他の質問:引用された制限で「コンテキスト」は正確に何を意味しますか?特に、一時的なアプレットは、ここCLEAR_ON_DESELECT
に示すメカニズムによって割り当てられたインスタンスと共有して、アプレットの別のインスタンスで使用できますか?注:ランタイムによるオーバーレイの不足の可能性を回避するために、トランジェントのコンテンツを共有することには興味がありません。2つの割り当てを回避することだけに関心があります。
更新:私はここで同じ質問をし、興味深い答えを得ました。