Ich muss viele String-Objekte im Speicher halten (Hunderte von MB) und ich möchte sie im UTF-8-Format halten, da in den meisten Fällen die Hälfte der Speicher die Standardimplementierung erfordert benutzen.
Die Standard-String-Klasse erfordert für eine Zeichenfolge mit 12 Zeichen 60 Byte (siehe http://blog.griddynamics.com/2010/01/java-tricks-reducing-memory-consumption.html).
Die meisten meiner Strings sind 10-20 Zeichen lang.
Ich frage mich, ob es eine Open-Source-Bibliothek gibt, die einen Wrapper für solche Strings bietet?
Ich kann String in UTF-8-Byte-Array konvertieren, aber ich bin auf der Suche nach einer Wrapper-Klasse, die alle erforderlichen Dienstfunktionen (Hash, Equal, ToString, fromString, usw.) zur Verfügung stellt.UTF-8 String-Klasse für Java
Antwort
Apache Avro hat ein UTF8 wrapper class die CharSequence
implementiert, aber ich weiß nicht, den Speicherverbrauch solcher Objekte
Hadoop hat die Text class, die ganz die Art der Schnittstelle hat Sie
wünschen Wenn Sie ein möchten distinct-Objekt für jeden String und Sie wollen sie so kompakt wie möglich, dann verwenden Sie Byte-Arrays. Das ist 1 Byte pro Zeichen gegenüber 2, und Sie haben nicht den Overhead des String-Headers (der wahrscheinlich 32 Bytes pro Objekt hinzufügt).
Aber natürlich könnten Sie keine String-Methoden verwenden, ohne zuerst in String zu konvertieren.
Aber wenn Sie wirklich Platz sparen möchten, speichern Sie die Zeichenfolgen Rücken an Rücken in einigen größeren Arrays mit "Dope-Vektoren", um die einzelnen Zeichenfolgen zu finden.
- 1. JAVA Komparator für UTF8 Buchstaben
- 2. Java + Mysql UTF8 Problem
- 3. java UTF8 - Zeichen, String-Typen
- 4. Java BASE64 utf8 Zeichenfolge Decodierung
- 5. Mit str_word_count für UTF8 Texte
- 6. Verwendung von Regex für utf8 in Ruby
- 7. Gibt es Begrenzerbytes für UTF8-Zeichen?
- 8. utf8 unterstützt nicht für andere Sprachen warum?
- 9. Wie stelle ich UTF8 für 404 Seite
- 10. MYSQL case sensitive Suche (mit Ruhezustand) für utf8
- 11. java: wie man eine Datei nach utf8 konvertiert
- 12. Fall unempfindlich utf8
- 13. Firebird - UTF8 VarChar Größe
- 14. PHP Utf8 Dekodierung Ausgabe
- 15. PHP utf8 Problem
- 16. Substring oder characterAt-Methode für UTF8-Strings mit 2+ Bytes in JAVA
- 17. Beispiel ungültige utf8 Zeichenfolge?
- 18. knitr und UTF8 encoding
- 19. Python unbekannte Codierung utf8
- 20. Rapidxml und UTF8
- 21. Ruby to_yaml utf8 string
- 22. PHP preg_split utf8 Zeichen
- 23. MySQL UTF8 Charaktere Last
- 24. decode utf8 zu big5
- 25. UTF8-Verarbeitung in C
- 26. asp.net Zeichencodierungsproblem utf8
- 27. SetThreadLocale und UTF8
- 28. utf8 Zeichensatz mit Thymoleaf
- 29. NodeJS, MySQL und UTF8
- 30. Zeichenfolge in UTF8 konvertieren
http://docs.oracle.com/javase/tutorial/i18n/text/string.html – Doorknob
Java speichert alle Zeichenfolgen intern in UTF-16, so dass Sie 12 Zeichenfolgen intern 24 Byte enthalten. Ohne den obligatorischen Objektaufwand, woher kommt diese 60-Byte-Zahl? – fge
... mindestens 24 Bytes, da UTF-Kodierungen variable Länge haben (vorausgesetzt, Sie müssten einige sehr exotische Zeichen verwenden, um 24 Bytes im OP-Beispiel zu überschreiten) –