1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

KeyStore.load führt zu GC_CONCURRENT

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von maniac205, 15.05.2012.

  1. maniac205, 15.05.2012 #1
    maniac205

    maniac205 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    97
    Erhaltene Danke:
    6
    Registriert seit:
    01.07.2010
    Hallo,

    ich programmiere derzeit eine App die ein PKCS12 File in einen KeyStore laden soll.

    Soweit funktioniert auch alles.

    Nur bekomme ich in der LogCat die Meldung "GC_CONCURRENT..." was hat es mit dieser auf sich? Lässt sich das Problem umgehen?

    Die Ladezeit kann sich noch verbessern, da ich derzeit den Emulator benutze. Auf Android 4.0.4.

    Hier noch die LogCat und Code Beispiele:

    LogCat:
    Code:
    05-15 12:14:12.427: D/CertHelper.loadCertIntoKeyStore (String path, String passwort)(13408): fileIn.getAbsolutePath(): = /data/data/andro4.test.fhg/app_certdir/Contacts_Android.pfx
    05-15 12:14:12.865: D/dalvikvm(13408): GC_CONCURRENT freed 202K, 3% free 12812K/13127K, paused 7ms+6ms
    05-15 12:16:28.704: D/CertHelper.loadCertIntoKeyStore (String path, String passwort)(13408): PKCS12 in KeyStore
    
    Android/Java:
    Code:
    	public void loadCertIntoKeyStore(String filePath, String passwort)
    			throws IOException, NoSuchAlgorithmException, CertificateException {
    
    		String tag = "CertHelper.loadCertIntoKeyStore (String path, String passwort)";
    
    		char[] charArrayPasswort = passwort.toCharArray();
    		File fileIn = new File(filePath);
    
    		Log.d(tag, "fileIn.getAbsolutePath(): = " + fileIn.getAbsolutePath());
    
    		if (!fileIn.canRead()) {
    			Log.e(tag, "File kann nicht gelesen werden! - " + filePath);
    			throw new IOException("Can't read File!");
    		}
    
    		pkcs12ks.load(new FileInputStream(fileIn), charArrayPasswort);
    		Log.d(tag, "PKCS12 in KeyStore");
    		
    	}
     
    Zuletzt bearbeitet: 15.05.2012
  2. DieGoldeneMitte, 15.05.2012 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Das heisst nichts weiter, als dass eine (nebenläufige) Garbage Collection ausgeführt wird. Das passiert in Java halt, wenn Speicher verbraucht wird und das System meint, etwas davon wieder frei machen zu müssen. Ist der Keystore, den du da lädst, sehr groß? Gut möglich, dass die dort verwendeten Datenstrukturen sich mit deiner Datei schwer tun...

    Nebenläufige GCs sind eigentlich harmlos. Da steht ja auch daneben, dass nur wenige msec verbraucht wurden. Wegen solcher Meldungen mache ich mir normalerweise keinen Kopf.
     
    maniac205 bedankt sich.
  3. maniac205, 15.05.2012 #3
    maniac205

    maniac205 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    97
    Erhaltene Danke:
    6
    Registriert seit:
    01.07.2010
    Danke für die schnelle Antwort!

    Eigentlich ist die Datei nicht Groß 2KB.

    Ist es normal, dass das Laden im schnitt 1:30min benötigt? (Im Emulator)
    Hab eigentlich nen schnellen Rechner. (Intel Xeon E5430 und 4GB Ram)

    Dachte die lange Ladezeit hängt vielleicht mit dem GC_CONCURRENT zusammen.
     
  4. DieGoldeneMitte, 15.05.2012 #4
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    Ich bin mit den Innereien des KeyStoreLoaders nicht vertraut, aber wenn der die enthaltenen Zertifikate überprüfen sollte, dann macht das System DNS Lookups und so weiter, und die können durchaus Zeit verbrauchen - vor allem, wenn die andere Seite lahm oder tot ist. Aber mit der GC hat das ziemlich sicher nichts zu tun.
     
    maniac205 bedankt sich.

Diese Seite empfehlen