Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Info dla ludzi używających trove4j, i pytanie czy ktoś zna inne repo?


Rekomendowane odpowiedzi

Opublikowano

TL;DR: Trove 3.0.3 ma fajną linijkę kodu która potrafi znacząco zwiększyć użycie pamięci, domyślnie "tylko" 2x, i nie ma nowszej wersji trove4j w repo mavena pomimo że kod jest poprawiony już od bardzo dawna.

 

SRC: https://bitbucket.org/trove4j/trove/src/a4f8d76a0cfa9e72159268d38e9e8566f4614088/core/src/main/java/gnu/trove/impl/hash/TPrimitiveHash.java?at=master&fileviewer=file-view-default#TPrimitiveHash.java-97

 

Tak spokojnie pisząc mój projekt, postanowiłem zrobić mini-profilowanie, za pomocą eclipse MemoryAnalyzer, wyskoczylo mi naprawdę sporo int[], nie zdziwiło mnie to za mocno, bo przechowuje tam mapę, w paczkach po 2k intow, ale po posortowaniu po wielkości array, okazało się że jest też masakrycznie dużo array o rozmiarach jak 10k, 20k, 25k i innych dość sporych.

Okazało się że trovy zamiast oszczędzać pamięć, zjada ją, podczas tworzenia mapy podajmy jak zawsze wielkość początkową i loadfactor, jak się można domyślić, wielkość array w której przechowywane są klucze czy wartości w takim np TIntIntMap, będzie równa lub podobna do tej początkowej wielkości... Jednak trove uznało że znacznie śmieszniej będzie jak podzielą ją przez loadfactor (domyślnie 0.5 w trove) (+ zaokrąglenie w górę do najbliższej wartości pierwszej), więc tworząc zoptymalizowaną mapkę na 650 elementów która w razie potrzeby ma się tylko delikatnie powiększyć (0.1f) stworzyłem 2x array intow po ponad 6500 każda. (+ jedno array bajtow, tych samych rozmiarow)

Przy jednym array to nie jest duży problem, ale jak używasz tego w kilkuset miejscach to nagle się okazuje że 60% pamięci się marnuje na puste miejsce w trove.

 

I pytanie: nie zna ktoś może repo z nowszymi wersjami? czy muszę kompilować i wgrać sam?

1438614356923701010629.png

 

Opublikowano
Opublikowano

ale to już nie jest trove że tak to ujmę, wszystko jest inaczej poukładane itd, to kompletnie edytowana wersja, wszystko poprzestawiane, API nie zachowane, więc odpada ;/

'A packaging of the IntelliJ Community Edition trove4j library'

 

Jak nie, jak tak? Poka przyklad. Moze przepakowane bylo ale bez przesady.

Opublikowano

'A packaging of the IntelliJ Community Edition trove4j library'

 

Jak nie, jak tak? Poka przyklad. Moze przepakowane bylo ale bez przesady.

wszystko jest przepakowane....

powinno byc:

hmAstRN.png

 

A tam masz:

nqgvxq2.png

1438614356923701010629.png

 

Opublikowano

Co popsuje? Skoro jest funkcjonalne.

 

Od biedy mozesz sam sobie przeciez skompilowac do mavena?

... Proszę cię, przestań odpowiadać.

Nie mam zamiaru nagle zmieniać biblioteki na jakiegoś dziwnego forka, uproszczonego, z brakującymi klasami itd... i porpawiac wszystkie jej użycia w publicznym projekcie.

 

Jak masz zamiar pomagać podając takie bezsensowne odpowiedzi to po prsotu nie pomagaj, nie po to zadaje tu pytanie by kompilować samemu, bo to już dawno zrobiłem, pomijam dziwne określenie "skompilować do mavena" cokolwiek by to miało znaczyć.

 

A tak to temat do zamknięcia...

1438614356923701010629.png

 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...