Narzut pamięciowy kolekcji

Odpowiedz Nowy wątek
2019-01-10 00:16
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?

Pozostało 580 znaków

2019-01-10 00:26
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

Pozostało 580 znaków

2019-01-10 04:15
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.


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2019-01-10 09:15
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ć.

Pozostało 580 znaków

2019-01-10 09:29
0

Ale masz podane jakieś konkretne kolekcje? Konkretne implementacje?


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2019-01-10 09:32
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?

edytowany 2x, ostatnio: niepamietamloginu, 2019-01-10 11:49

Pozostało 580 znaków

2019-01-10 14:49
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".

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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