Liara T'Soni
Banned
- Registriert
- Jan. 2008
- Beiträge
- 2.115
Kampfkeks schrieb:@Liara : Nur weil der Code der Apps durch den JIT-Compiler nun schneller abläuft, bedeutet das nicht dass sich an den 100ms für den GC etwas ändert. Denn diese Zeit ist ja im System gesetzt. So ein Timer sollte unabhängig von der Geschwindigkeit des Systems sein. Sonst würde es auch bei jedem anders getaktetem Gerät auch unterschiedlich sein. Und selbst auf demselben System würde es je nach aktueller Auslastung auch unterschiedlich schnell laufen. Er läuft aber überall alle 100ms.
Wie lange der GC dann alle 100ms für das bereinigen des Speichers benötigt, ist eine andere Sache. Sollte er nichts zu tun haben, macht sich das auch nicht bemerkbar. Und auf schnelleren CPUs wird er auch schneller fertig sein. Ich bin aber mal gespannt wie sich Android auf den ersten DualCores machen wird. Die Oberfläche dürfte davon profitieren.
Was ????
1. Der GC läuft nicht über einen 100ms Timer.
Wenn er nicht im Programm gerufen wird dann läuft er zu einer unbestimmten Zeit die von der Runtime vorgegeben wird. Er läuft nur dann wenn er gebraucht wird. Das kann 5 mal innerhalb einer Sekunde passieren aber auch auch erst nach 10sek sein.
2. Der GC, wenn er nicht von einem Programm aufgerufen wird, friert nicht das gesamte System ein sondern nur den Thread wo gerade Müll gelöscht werden soll.
Hier mal ein kurzer log habe die Stellen mit GC Aktivität markiert
Code:
11-18 21:11:14.775 D/ProcessManager(22726): executeProcess(): waiting for child process ...
11-18 21:11:14.785 D/ProcessManager(23437): executeProcess(): in child process ...
11-18 21:11:14.785 D/ProcessManager(23437): executeProcess(): in child process, after dup2()
11-18 21:11:14.785 D/ProcessManager(23437): executeProcess(): in child process, after closePipes()
11-18 21:11:14.785 D/ProcessManager(23437): executeProcess(): in child process, after fcntl()
11-18 21:11:14.785 D/ProcessManager(23437): closeNonStandardFds(): skipFd=[61]
11-18 21:11:14.785 D/ProcessManager(23437): closeNonStandardFds(): after getrlimit(): RLIMIT_NOFILE=[7], rlim_max=[1024]
11-18 21:11:14.795 D/ProcessManager(22726): executeProcess(): read child status count=[0], result=[0]
11-18 21:11:21.735 D/skia ( 324): purging 232K from font cache [27 entries]
[COLOR="Blue"]11-18 21:11:21.835 D/dalvikvm( 324): GC_EXPLICIT freed 9234 objects / 548224 bytes in 104ms
11-18 21:11:22.425 D/dalvikvm(22629): GC_EXPLICIT freed 197 objects / 11144 bytes in 59ms[/COLOR]
11-18 21:11:24.869 D/ContactMessageStore( 320): MSG_UPDATE_CONTACTS_TABLE >>
11-18 21:11:24.869 D/ContactMessageStore( 320): query thread cost time >>>2
11-18 21:11:24.875 D/ContactMessageStore( 320): createTempContactTable() >>>
[COLOR="Blue"]11-18 21:11:24.925 D/dalvikvm(22726): GC_FOR_MALLOC freed 5854 objects / 736216 bytes in 57ms[/COLOR]
11-18 21:11:24.965 D/ContactMessageStore( 320): createTempContactTable() <<<
11-18 21:11:24.965 I/Database( 320): sqlite returned: error code = 17, msg = prepared statement aborts at 17: [SELECT _id, recipient_address, message_count, unread_count FROM threads WHERE message_count > 0]
11-18 21:11:25.385 D/ContactMessageStore( 320): notify MmsSms
11-18 21:11:25.385 D/ContactMessageStore( 320): MSG_UPDATE_CONTACTS_TABLE <<
[COLOR="Blue"]11-18 21:11:28.435 D/dalvikvm(22903): GC_EXPLICIT freed 702 objects / 40984 bytes in 64ms
11-18 21:11:33.445 D/dalvikvm( 324): GC_EXPLICIT freed 401 objects / 15792 bytes in 75ms
11-18 21:11:38.415 D/dalvikvm(19279): GC_EXPLICIT freed 43 objects / 1992 bytes in 43ms[/COLOR]
11-18 21:11:40.255 W/KeyCharacterMap(22726): Bad keycharmap - filesize=32
11-18 21:11:40.255 W/KeyCharacterMap(22726): Error loading keycharmap file '/system/usr/keychars/bravo-keypad.kcm.bin'. hw.keyboards.0.devname='bravo-keypad'
11-18 21:11:40.255 W/KeyCharacterMap(22726): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-18 21:11:44.895 D/CSUtil (19984): serverTime = 1288382273374
11-18 21:11:44.895 D/CSUtil (19984): serverTime = 47517
11-18 21:11:44.905 D/CSUtil (19984): curGMTTime = 72704909
[COLOR="Blue"]11-18 21:11:44.995 D/dalvikvm(19984): GC_FOR_MALLOC freed 14471 objects / 512968 bytes in 34ms
11-18 21:11:46.435 D/dalvikvm(22835): GC_EXPLICIT freed 2599 objects / 243128 bytes in 71ms
11-18 21:11:52.435 D/dalvikvm(22863): GC_EXPLICIT freed 9663 objects / 435712 bytes in 68ms
11-18 21:11:52.485 D/dalvikvm(22726): GC_FOR_MALLOC freed 2794 objects / 526752 bytes in 42ms
11-18 21:11:57.415 D/dalvikvm(23332): GC_EXPLICIT freed 1664 objects / 66080 bytes in 47ms[/COLOR]
11-18 21:11:57.675 I/wpa_supplicant(15690): Scan requested (ret=0) - scan timeout 30 seconds
11-18 21:12:00.497 D/HotSpotHW( 230): HotSpot: checking received event
11-18 21:12:00.497 D/HotSpotHW( 230): HotSpot result=0, buf=
11-18 21:12:00.505 I/wpa_supplicant(15690): got scan complete
11-18 21:12:00.505 I/wpa_supplicant(15690): wpa_supplicant_get_scan_results:return scan results2
11-18 21:12:00.505 I/wpa_supplicant(15690): AP:ssid[FRITZ!Box WLAN 3131],rssi[-45],BSSID=XX:YY:4a:a7:0d:7f
11-18 21:12:00.505 I/wpa_supplicant(15690): AP:ssid[EasyBox-E1E056],rssi[-85],BSSID=00:26:4d:e1:XX:YY
11-18 21:12:00.505 I/wpa_supplicant(15690): Received 649 bytes of scan results (2 BSSes)
11-18 21:12:00.505 I/wpa_supplicant(15690): wpa_driver_wext_get_scan_results---
11-18 21:12:00.505 D/LocationMasfClient( 230): getNetworkLocation(): Returning cache location with accuracy 75.0
11-18 21:12:00.875 W/LocationMasfClient( 230): uploadCollectionReport(): no ReplyElement
11-18 21:12:01.955 D/LocationManager(22835): requestLocationUpdates: provider = network, intent = PendingIntent{4779e5f8: android.os.BinderProxy@4779e5b0}
11-18 21:12:01.985 D/LocationManager(22835): requestLocationUpdates: provider = passive, intent = PendingIntent{4779e5f8: android.os.BinderProxy@4779e5b0}
11-18 21:12:03.916 W/KeyCharacterMap(22726): Bad keycharmap - filesize=32
11-18 21:12:03.916 W/KeyCharacterMap(22726): Error loading keycharmap file '/system/usr/keychars/bravo-keypad.kcm.bin'. hw.keyboards.0.devname='bravo-keypad'
11-18 21:12:03.916 W/KeyCharacterMap(22726): Using default keymap: /system/usr/keychars/qwerty.kcm.bin
11-18 21:12:06.265 D/ProcessManager(22726): executeProcess(): waiting for child process ...
11-18 21:12:06.265 D/ProcessManager(23446): executeProcess(): in child process ...
11-18 21:12:06.265 D/ProcessManager(23446): executeProcess(): in child process, after dup2()
11-18 21:12:06.265 D/ProcessManager(23446): executeProcess(): in child process, after closePipes()
11-18 21:12:06.275 D/ProcessManager(23446): executeProcess(): in child process, after fcntl()
11-18 21:12:06.275 D/ProcessManager(23446): closeNonStandardFds(): skipFd=[52]
11-18 21:12:06.275 D/ProcessManager(23446): closeNonStandardFds(): after getrlimit(): RLIMIT_NOFILE=[7], rlim_max=[1024]
11-18 21:12:06.295 D/ProcessManager(22726): executeProcess(): read child status count=[0], result=[0]
Edit:
Ohne jegliche Kenntnisse über den GC kann man auch so die Aussage dass der GC alle 100ms das System einfriert eindeutig falsifizieren. Wenn der GC selbst zum Löschen 25-200ms braucht dann würde ja bedeuten, dass das System sich im dauerhaften Status der Einfrierung befindet und versucht Strings, Objekte zu löschen die gar nicht vorhanden sind. Sinn ?
Zuletzt bearbeitet: