Kompaktní stringy

S tímhle blogem možná skončím. Možná. Rozhodně sem vysypu všechny rozepsané články z bufferu a pak se uvidí.

Četl jsem Java 9: Compact Strings Vojtěcha Růžičky o kompaktní reprezentaci řetězců. Stringy, jejichž znaky spadají do ASCII, jsou reprezentovány kompaktně jako byte[]. V článku jsem narazil na:

Java 9 brings a new improved string, which in most cases, will reduce String memory consumption to half.

To není tak úplně pravda. Platí to asymptoticky pro nekonečně dlouhé stringy, ale pro ty kratší to nebude tak slavné. String má konstantní režii, která není úplně zanedbatelná. Javě je String tvořen dvěma objekty. String objekt obsahuje ukazatel na pole charů (v Javě 9 pole bytů). V paměti to vypadá takhle (na 64 bitovém stroji s komprimovanými pointery):

Oba objekty začínají 12B hlavičkami. Pole obsahuje 4B s informací o délce. String objekt obsahuje 4B komprimovaný pointer, 4B kešovaný hashCode a nevyužité 4B ztracené kvůli zarovnání objektů na 8B hranice.

Prázdný string tedy zabere 40 bajtů, krátké stringy budou tuhle cenu platit a relativní úspora kompaktních stringů bude o něco méně výrazná. Bude záležet jaké délky řetězců budou v aplikaci převládat.


K tématu:

Flattr this!

This entry was posted in Java, JVM. Bookmark the permalink.

6 Responses to Kompaktní stringy

  1. Jan Novotný says:

    Je to asi dost o konkrétní aplikaci a vyzkoušení. Mluvil jsem o tom s Juergenem Hoellerem (Spring) a říkal mi, že on s tímto má velmi dobré zkušenosti a že úspora paměti je obvykle dost výrazná.

    Btw. nekonči s psaním, moc rád jsem tě četl.

  2. Mate samozrejme pravdu, dopustil jsem se hrubeho zjednoduseni, aktualizuji clanek ;)

  3. Jakub Vrána says:

    Škoda toho konce, rád jsem to tu četl.

  4. Augi says:

    Také se hlásím jako věrný čtenář :-)

  5. Ondrej Galbavy says:

    Tiez si vzdy rad precitam nieco poucne :)

  6. Petr Vitek says:

    Tenhle blog mi bude moc chybet pokud opravdu skonci!

    Neustale me fascinuje ze i v Jave se skrz JVM se da programovat efektivne s ohledem na HW, tady jsem konecne aspon trochu pochopil jak funguje hyperthreading a vylety do FP jsou pro me velmi prijemne zpestreni rani cesty do prace v MHD.

    Muzu rict ze se na kazdy clanek odsud tesim.

Leave a Reply

Your email address will not be published. Required fields are marked *