Narzut pamięciowy kolekcji

1

Dobry wieczór,
Mam za zadanie obliczyć narzut kolekcji z pewną ilością elementów, ale nie za bardzo wiem jak się za to zabrać. Jeśli dobrze rozumiem, narzut to ilość pamięci potrzebna do przechowania pewnych danych. Innymi słowy, jak "ciężki" jest obiekt. Czy znając przybliżony średni czas wykonania poszczególnych operacji mogę oszacować narzut, czy konieczne jest zajrzenie w implementację poszczególnych kolekcji?

1

Na moje to masz policzyć ile pamięci 'marnujesz' tzn. powiedzmy, że czystych danych przechowujesz 2MB a kolekcja zajmuje 3MB, czyli te 1MB to overhead, który ty masz policzyć.

Coś w stylu link

5

Myśle że ten narzut to masz jednak wyliczyć teoretycznie, a nie sprawdzać ile coś zajmuje na heapie ;) To wynika ze struktury danych samej w sobie. Na przykład jakieś ArrayList ma mały narzut, metadane są stałym narzutem a potem same dane (referencje do danych) lądują w spójnej tablicy. Ale już LinkedList na spory narzut, bo każdy Node musi oprócz referencji do danych trzymać też referencje do kolejnego Noda, więc w praktyce to jest 2x więcej danych to trzymania, wynikających z samej tylko "struktury".
Np. HashMap znów narzut ma mały, bo trzyma praktycznie tylko dane w tablicy, ale jednak tablica zawsze jest większa niż potrzeba, więc trochę narzutu jest. Ale już LinkedHashMap podwaja storage, bo musi trzymać obok listę z kolejnością wkładania elementów.

0

Też tak myślę, że to ma być wyliczone teoretycznie. Liczba +/- coś. Problem w tym, że kompletnie nie mam pojęcia, jak się za to zabrać.

0

Ale masz podane jakieś konkretne kolekcje? Konkretne implementacje?

0

@Shalom Mam tylko podane, dla jakich kolekcji mam sprawdzić narzut oraz, że mam do nich wrzucać typ int. Czy dobrze rozumiem, że "teoretycznie" oznacza, że nie muszę znać implementacji, a jedynie zasadę działania?

0

wiele prezentacji na YT to rozważa po polsku i angielsku niemal identyczne tematy
szukaj -> Garbage Collector
-> low latency Java

jak mi wpadnie w rękę jakiś link to uzupełnię.

Dodam, że często nie chodzi (tylko) o ilość bajtów,ale ilość sztuk obiektów i ich czas życia (Young old). Zwykle rzucam okiem na kod,czy nie ma rażącego zużycia "sztuk".

1 użytkowników online, w tym zalogowanych: 0, gości: 1