Określanie odpowiedniego rozmiaru bufora

Używam ByteBuffer.allocateDirect (), aby przydzielić trochę pamięci buforowej do odczytu pliku do pamięci, a następnie do mieszania hashowania plików bajtów i uzyskania z niego skrótu pliku (SHA). Pliki wejściowe mają bardzo duży rozmiar, od kilku KB do kilku GB.

Przeczytałem kilka wątków i stron (nawet niektóre na SO) dotyczących wyboru rozmiaru bufora. Niektórzy doradzali próbę wybrania takiego, którego używa natywny system plików w celu zminimalizowania szans operacji odczytu dla częściowego bloku itp. Takich jak bufor 4100 bajtów i NTFS domyślnie 4096, więc dodatkowe 4 bity wymagałyby oddzielnej operacji odczytu, co byłoby bardzo marnotrawstwem.

Trzymając się mocy 2, 1024, 2048, 4096, 8192 itd. Widziałem kilka polecanych buforów o rozmiarze 32 KB, a inne zalecają, aby bufor był wielkości pliku wejściowego (prawdopodobnie dobrze dla małych plików, ale co o dużych plikach?).

Jak ważne jest trzymanie się rodzimych buforów o rozmiarze bloku? Współcześnie (zakładając nowoczesny dysk SATA lub lepszy z co najmniej 8 MB pamięci podręcznej dysku i inną nowoczesną „magię” systemu operacyjnego, aby zoptymalizować I / O), jak krytyczny jest rozmiar bufora i jak najlepiej określić, jaki rozmiar mam ustawić? Mogę go statycznie ustawić lub dynamicznie określić? Dziękuję za wgląd.

questionAnswers(1)

yourAnswerToTheQuestion