Hej Alle
Jeg er ny bruger og vil gerne takke for et glimerende forum og initiativ.
Mit første spørgsmål er forholdsvis simpelt, blot kender jeg ikke svaret.
Antag en applikation med en vilkårlig design strukur. Mere end én klasse importerer den samme klasse, KlasseX. Spørgsmålet er således om den endelige filstørrelse forøges additativt per import eller om compileren 'deler' KlasseX mellem de kaldende klasser. Så fremt det første er tilfældet er det vel værd at tage in mente når applikation skal designes.
Mange tak
2 kommentarer
Hej Grillip.
Velkommen til FlashForum.dk.
Hvis vi kun snakker importering, (selve import statement'en) gør det ingen forskel om en klasse er importeret i mange klasser. Compileren medtager kun de klasser der reelt bruges i (under programmets kørsel er en reference til).
Så snart en klasse er "brugt" tages klassen med af kompileren, og filstørrelsen på den færdige SWF stiger. Dog stiger filstørrelsen kun én gang, per medtaget klassen. (hvis vi igen kun snakker klassen som compileret bytekode, og ikke instanser af klassen). Derfor er svaret: filstørrelsen øges ikke additivet i forhold til antallet af gange en klasse (igen klasse, som den klassificering der beskriver egenskaberne ved en mænge ens objekter, og ikke instanser af klassen) forekommer i SWF'en.
Nedenfor har jeg lavet en række målinger, som gerne skulle illustrere det.
Tallene er ca. tal, da der forekom en unøjagtighed på en til to bytes fra kompilering til kompilering.
(Hvis jeg har udeladt noget i ovenstående, beklager jeg, og post endeligt rettelserne)
DocumentClass:
ClassA:
ClassB:
Jeg har brugt en tilfældig klasse til eksemplet (ArrayList)
Skiftevis er der lavet en import statement i ClassA og/eller ClassB, samt tilføjet en placeholder til et objekt af den importerede type.
Uden imports overhovedet i både ClassA og ClassB:
ca. 660 bytes
Med import statement i ClassA:
ca. 662 bytes
Med import statement i både ClassA og ClassB:
ca. 661 bytes
Med tom variable i ClassA typed til importeret klasse:
2032 bytes
Med tom variable i ClassB og ClassA typed til importeret klasse:
ca 2037 bytes
Det er min vurdering af springet mellem bare import statement og variablen der bruger klassen, er det springende punkt, der får compileren til at medtage indholdet af klassen (ArrayList).
Det spring der er mellem størrelsen mellem ClassA og både ClassA og ClassB indeholdende en variablen til ArrayList (ca. 5 bytes) vil jeg mene er brugt til memory reservation til variablen.
Mange tak for det klare og oplysende svar. Specielt er den minimale forskel (stort set ingen) på de to sidste eksempler interessant.