Najbardziej wydajny rozmiar początkowy dla StringBuilder?
Piszę dużo rzeczy, aby zalogować się do serii i zoptymalizować ścieżkę danych. Buduję tekst dziennika za pomocąStringBuilder
. Jaka byłaby najbardziej wydajna pojemność początkowa, jeśli chodzi o zarządzanie pamięcią, aby działała dobrze niezależnie od JVM? Celem jest prawie całkowite uniknięcie realokacji, która powinna być objęta początkową pojemnością około 80-100. Ale chcę też zmarnować tak mało bajtów, jak to tylko możliwe, ponieważ instancja StringBuilder może się zawiesić w buforze i zmarnować bajty.
Zdaję sobie sprawę, że zależy to od JVM, ale powinna istnieć jakaś wartość, która zmarnowałaby najmniej bajtów, bez względu na JVM, rodzaj „najmniejszego wspólnego mianownika”. Obecnie używam128-16
, gdzie 128 jest ładną liczbą okrągłą, a odejmowanie służy do przydzielania narzutów. Można to również uznać za przypadek „przedwczesnej optymalizacji”, ale ponieważ odpowiedź, której szukam, to „zasada kciuka”, wiedząc, że będzie ona przydatna również w przyszłości.
Nie oczekuję odpowiedzi „moje najlepsze odgadnięcie” (moja własna odpowiedź jest już taka), mam nadzieję, że ktoś już to zbadał i może podzielić się odpowiedzią opartą na wiedzy.