Portál AbcLinuxu, 3. května 2025 00:32
Kdybych měl pokaždý psát blogspot, když se chytim za nos , ale dobrý ...
Já vim. Jsou věci v životě, co člověka naučí nadhledu a věci, co rozšíří obzory.
System.gc()
by se pokud možno nemělo volat nikdy.
OutOfMemoryError
. V první fázi jsem to řešil tou nejhorší možnou cestou - volat explicitně System.gc()
. Program se zpomalil naprosto brutálně, takže bylo hned jasné, že tudy cesta nevede BTW ani jsem netušil (a zjistil jsem to až teď), že existuje věda stringologieKdysi jsem kdesi sehnal 220stránkové PDFko celé věnované algoritmům hledání podřetězce v řetězci. Velmi poučné
Ale 70 ms na mém docela silném stroji mi vyrazilo dech.To buďte rád, že ne 10 minut (sic!).
A kdyz zacinate s Javou, tak kazdy si asi projde spojovani retezcu pomoci String += anebo StringBuffer().Spojování pomocí
String
+= každý relativně snadno zavrhne, až zjistí, že je to O(n^2). Tedy spíše mu bude divné, že je to najednou nějak strašně pomalé. Ale StringBuffer
je z jiného soudku, už proto, že StringBuilder
je až záležitost verze 1.5, takže leckdo může StringBuffer
používat čistě ze zvyku.
+=
neefektivní, je známá věc. Ale jak je to s těma ostatníma, hlavně se StringBuilderem
, budu muset nastudovat, nebo otestovat (a nebo mi to někdo osvětlíte?) Vnukli jste mi dobrou myšlenku na studium. Díky+=
, maximálně StringBuffer.append()
stačilo :)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.