Hallo,
ich hab im Forum leider keinen Bereich für JavaCard gefunden, hoffe aber das sich vlt doch der ein oder andere damit auskennt. Da so eine Karte ja mehr oder minder auch ein "mobiles Gerät" ist, poste ich mal hier.
Bin seit einigen Wochen frisch in dem Thema und finde mich noch zurecht, eine JavaCard <-> JavaHost Kommunikation habe ich bereits auf die Beine gestellt. Jetzt im Moment versuche ich rauszufinden wie die Speicherverwaltung der JavaCard genau funktioniert.
Aus der Doku lese ich raus das sich auf der Karte ein ROM, RAM und EEPROM befindet. ROM ist erstmal uninteressant. Im EEPROM liegen persistente Daten, also alle Objekte die für immer und ewig auf der Karte bleiben (ausser man löscht das Applet). Im RAM alles temporäre was nach einem Reset (ziehen der Karte aus dem Terminal) wieder weg ist.
Da die JavaCard keine GarbageCollection besitzt muss man sich C-Style um seine Objekte selbst kümmern. Dynamisches anlegen von Objekten mittels "new" zur Laufzeit führt damit zwangsläufig zu memory leaks, da diese immer in den EEPROM geschrieben werden. D.h. alle Objekte die gebraucht werden müssen einmalig im Konstruktor angelegt werden der beim installieren des Applets einmalig vom JCRE aufgerufen wird.
Nur was ist jetzt mit lokalen Variablen ? Wenn ich innerhalb einer Methode eine Variable anlege, meinetwegen:
Liegt "bytesRead" dann im RAM ? Sind die nach verlassen der Methode weg ? Oder erst nach ziehen der Karte ? Oder nie ? Legt der mir da jedesmal einen neuen short in den Speicher ? Muss ich dann wirklich jede einzelne Variable die irgendwo auf der Karte benutze global vorher anlegen und initialisieren ?
Kann dazu einfach keine Informationen finden...vlt kennt sich hier ja jemand aus.
Viele Grüße
ich hab im Forum leider keinen Bereich für JavaCard gefunden, hoffe aber das sich vlt doch der ein oder andere damit auskennt. Da so eine Karte ja mehr oder minder auch ein "mobiles Gerät" ist, poste ich mal hier.
Bin seit einigen Wochen frisch in dem Thema und finde mich noch zurecht, eine JavaCard <-> JavaHost Kommunikation habe ich bereits auf die Beine gestellt. Jetzt im Moment versuche ich rauszufinden wie die Speicherverwaltung der JavaCard genau funktioniert.
Aus der Doku lese ich raus das sich auf der Karte ein ROM, RAM und EEPROM befindet. ROM ist erstmal uninteressant. Im EEPROM liegen persistente Daten, also alle Objekte die für immer und ewig auf der Karte bleiben (ausser man löscht das Applet). Im RAM alles temporäre was nach einem Reset (ziehen der Karte aus dem Terminal) wieder weg ist.
Da die JavaCard keine GarbageCollection besitzt muss man sich C-Style um seine Objekte selbst kümmern. Dynamisches anlegen von Objekten mittels "new" zur Laufzeit führt damit zwangsläufig zu memory leaks, da diese immer in den EEPROM geschrieben werden. D.h. alle Objekte die gebraucht werden müssen einmalig im Konstruktor angelegt werden der beim installieren des Applets einmalig vom JCRE aufgerufen wird.
Nur was ist jetzt mit lokalen Variablen ? Wenn ich innerhalb einer Methode eine Variable anlege, meinetwegen:
Java:
short bytesRead = apdu.setIncomingAndReceive();
Liegt "bytesRead" dann im RAM ? Sind die nach verlassen der Methode weg ? Oder erst nach ziehen der Karte ? Oder nie ? Legt der mir da jedesmal einen neuen short in den Speicher ? Muss ich dann wirklich jede einzelne Variable die irgendwo auf der Karte benutze global vorher anlegen und initialisieren ?
Kann dazu einfach keine Informationen finden...vlt kennt sich hier ja jemand aus.
Viele Grüße