[JAVA] String lengte

Pagina: 1
Acties:

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Misschien een arbitraal vraagje, maar hoe lang kan een String worden in Java? En daarmee bedoel ik, hoeveel karakters kan ik er in kwijt?

Ik heb nu een methode die een nogal lange String als resultaat heeft. (+/- 3000 karakters) Vraag me niet waarom, tis een noodoplossing omdat de door mij gewenste methode niet mogelijk blijkt te zijn onder Java/JSP :) Ik pas het later nog wel aan, of eerder, als String niet veel meer karakters aan kan.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Zolang als de heap nog geheugen vrij heeft dacht ik

  • pjonk
  • Registratie: November 2000
  • Laatst online: 29-12-2025
In principe net zo veel bytes als de hoeveelheid geheugen die beschikbaar is.
De hoeveelheid geheugen die beschikbaar is hangt af van het aantal objecten de code etc. die zich in je geheugen bevindt.
De hoeveelheid geheugen die je beschikbaar hebt wordt geregeld door de heap size

It’s nice to be important but it’s more important to be nice


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
ahah, der is dus wel een beperking. Dan moek dus wel eff oppassen. Hij flikkert nu al 3K in zijn geheugen. Het wordt niet veel meer, maar een andere oplossing is dus wel wenselijk :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Als je aan de vm geen bijzondere memory parameters meegeeft kan je maximaal 64mb reserveren. Maar je kan natuurlijk die parameters anders instellen.

  • nxt
  • Registratie: November 2001
  • Laatst online: 26-08 13:51

nxt

JonkieXL schreef op 12 augustus 2002 @ 20:31:
In principe net zo veel bytes als de hoeveelheid geheugen die beschikbaar is.
...
als ik naar de source van String.class kijk
valt me het volgende op
/** The value is used for character storage. */
private char value[];
/** The offset is the first index of the storage that is used. */
private int offset;
/** The count is the number of characters in the String. */
private int count;
dit suggereert dat een string als maximum lengte
Integer.MAX_VALUE heeft

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 07:40
nxt schreef op 12 augustus 2002 @ 21:29:
dit suggereert dat een string als maximum lengte
Integer.MAX_VALUE heeft
Veel meer dan 2 gigabyte in een string stoppen gaat je in verband met (onder andere) de addresseringsbeperkingen van een 32-bits operating system toch niet lukken. De werkelijke grens wordt natuurlijk eerder bereikt, maar waarschijnlijk pas wanneer het geheugen opraakt (en niet bij een of andere door de implementatie opgelegde grens).

Een string is trouwens niet bedoeld om ontzettend groot te worden; afhankelijk van wat je er mee wilt doen, kun je misschien beter overstappen op een rope (die helaas niet standaard bij Java zit) of een andere gegevensstructuur.

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Ja ik weet. Tis een kutoplossing. Maar voor nu wel de snelste. En een ruime schatting van de te verwachten grote van de String is max 10.000 karakters. Dus tis niet zon ramp voor nu. vs 2 zal beter in elkaar zitten :)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Soultaker schreef op 12 augustus 2002 @ 21:35:
[...]

Veel meer dan 2 gigabyte in een string stoppen gaat je in verband met (onder andere) de addresseringsbeperkingen van een 32-bits operating system toch niet lukken. De werkelijke grens wordt natuurlijk eerder bereikt, maar waarschijnlijk pas wanneer het geheugen opraakt (en niet bij een of andere door de implementatie opgelegde grens).

Die grens is trouwens 2 GB op windows systemen omdat die denken dat er van de 4GB max voor een 32bits systeem 2GB nodig is voor systeem-geheugen.
Linux beperkt dat tot 1GB van de 4GB, maar een applicatie kan dus nooit meer dan 4GB geheugen innemen op een 32bits doos en dat wordt door de os-en gelimiteerd op 3 of zelfs 2GB per proces.

  • vinnux
  • Registratie: Maart 2001
  • Niet online
Trouwens als je veel data in een string gaat proppen en telkens gaat concateneren kun je ivm met de performence beter een BufferedString gebruiken.
edit:
Ja het is is StringBuffer

[ Voor 0% gewijzigd door vinnux op 13-08-2002 14:10 . Reden: StringBuffer :) ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

vgouw schreef op 13 augustus 2002 @ 12:22:
Trouwens als je veel data in een string gaat proppen en telkens gaat concateneren kun je ivm met de performence beter een BufferedString gebruiken.

Heet die niet StringBuffer? Of is dat een ander? :)

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het is de StringBuffer, maar ik vind BufferedString ook wel duidelijk ;)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Wat natuurlijk ook een probleem is, is dat als je een string hebt van 1G, en je wilt er 1 karaketer aanhangen, dat je dan die hele 1G string naar een 1G+1 buffer moet kopieren. Dan heb je dus tijdelijk 2G+1 bytes nodig (of je moet de source string eerst zippen, en dan on-the-fly decomprimeren ;) )

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Neuh, dan had je al moeten bedenken dat een StringBuffer efficienter is :P

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
hehe, als die String echt 1 gig wordt ga ik gillen. Dat betekent namelijk dat er een kleine 100.000 records in de tabel staan waar ik die functie voor gebruik. Dan gaat er al lang wat meer mis dan alleen die String :)

De te verwachten max voor die tabel is 150 records, dusss. Zit wel goed :)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-09 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

ergens krijg ik het idee dat je opzet niet goed is :)

wat doe je er eigenlijk mee? je hele html pagina in 1 String opslaan?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
.oisyn schreef op 13 augustus 2002 @ 23:29:
ergens krijg ik het idee dat je opzet niet goed is :)

wat doe je er eigenlijk mee? je hele html pagina in 1 String opslaan?
Mjah, zoiets :)

Ik had een recursieve functie nodig om door een hierarchische lijst van items te lopen. Of, ik moest allerlei irritant meuk meegeven aan die functie, of de functie een String terug laten geven. Ik heb voor het tweede gekozen.

Is later zo aan te passen, zit geen enkele afhankelijkheid in.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dus jij maakt een string waarin een hele structuur zit? Ik moet denk ik maar eens babbelen met Sinema ;)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 01-09 21:01

.oisyn

Moderator Devschuur®

Demotivational Speaker

kun je eens een voorbeeld geven van hoe de structuur eruit ziet en wat je ermee wilt bereiken?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 24-08 21:59

Macros

I'm watching...

String in Java zijn toch unicode. Dus elke char is 16bit, remember that :)

"Beauty is the ultimate defence against complexity." David Gelernter


  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Alarmnummer schreef op 14 augustus 2002 @ 00:40:
Dus jij maakt een string waarin een hele structuur zit? Ik moet denk ik maar eens babbelen met Sinema ;)
Gelukkig is die met pensioen, en heb ik mijn diploma al :)

Er zit een html structuurtje in. Per item: <tr><td>item</td></tr>. Nix schokkends.

Verwijderd

Ik heb hier een StringBuffer van 1,5 Mb vol met html :+
En dat waren 5100 records uit een database. Alleen gaat java keihard op z'n bek als ik het met 55.000 records wil doen.
Maar vanwege wat onhandig programmeerwerk moet ik nu heel veel zooi ombouwen, ik weet dat servlets met buffers kunnen werken die data na x kb eruit gooien. Dat is mijn hoop dan maar :)

  • zneek
  • Registratie: Augustus 2001
  • Laatst online: 08-02-2025
Verwijderd schreef op 14 augustus 2002 @ 15:20:
Ik heb hier een StringBuffer van 1,5 Mb vol met html :+
En dat waren 5100 records uit een database. Alleen gaat java keihard op z'n bek als ik het met 55.000 records wil doen.
Maar vanwege wat onhandig programmeerwerk moet ik nu heel veel zooi ombouwen, ik weet dat servlets met buffers kunnen werken die data na x kb eruit gooien. Dat is mijn hoop dan maar :)
Je kunt ook de JspWriter mee geven, dan schrijft ie alle muk direct in de uitvoer. Alleen moet je dan steeds try catch om je writes heen gooien. Das precies de reden dat ik met een String werk. Die wordt gereturned en dan in 1 keer in de uitvoer geplakt.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

zneek schreef op 14 augustus 2002 @ 23:59:
[...]

Alleen moet je dan steeds try catch om je writes heen gooien.
En jij dacht dat dat van die String gebruiken iets ergs was? ;) :D
Als je een exception niet wil vangen: daar hebben ze throws voor uitgevonden.

Verder: zoals al gezegd, als je 150 keer iets wilt toevoegen gaat dat 150x sneller als je een StringBuffer ipv een String pakt. Als je al ongeveer een idee hebt van hoeveel chars er in je StringBuffer komen is dat ook handig om dat bij het instantieren van je StringBuffer mee te geven. Standaard is een StringBuffer maar 16 chars groot, en iedere keer als je er iets bij probeert te voegen wat er niet meer inpast verdubbeld de buffer in grootte (of als dat niet genoeg is net groot genoeg om je nieuwe data in kwijt te kunnen). Iedere keer als de buffer van grote veranderd moet ie z'n eigen inhoud kopieeren, en dat kan nog behoorlijk oplopen.

Misschien zou je beter een ArrayList ofzo kunnen gebruiken ipv een String of StringBuffer maar nu wordt het wel heel offtopic! (Ja wat wil je Alarmnummer heeft de vraag al beantwoord :P)

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


Verwijderd

zneek schreef op 14 augustus 2002 @ 23:59:
[...]


Je kunt ook de JspWriter mee geven, dan schrijft ie alle muk direct in de uitvoer. Alleen moet je dan steeds try catch om je writes heen gooien. Das precies de reden dat ik met een String werk. Die wordt gereturned en dan in 1 keer in de uitvoer geplakt.


Daar kwam ik eergisteren ook achter ja, maar het 'leuke' is dat die StringBuffer uit een paar klasses verderop moet komen en er op het laatste moment boven aan de html nog wat bijgezet moet worden :)

Maar dat ik ga nu met layers in html proberen, lijkt het precies hetzelfde :)
Pagina: 1