Java-Gaming.org    
Featured games (91)
games approved by the League of Dukes
Games in Showcase (577)
games submitted by our members
Games in WIP (498)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  The story with String literals?  (Read 3361 times)
0 Members and 1 Guest are viewing this topic.
Offline erikd

JGO Ninja


Medals: 15
Projects: 4
Exp: 14 years


Maximumisness


« Posted 2003-03-03 20:30:56 »

Hi there,

This is a non-gameprogramming-and-although-java-still-off-topic-question (tm)   Roll EyesTongue

I read that Strings literals are stored in an internal pool of unique String values.
This implies that every next String literal you have, takes longer to be created because it needs to check if there is another literal String instance in the pool with the same value.
Is this really true? Doesn't this also indirectly imply that the bigger your program gets, string literals get slower?

I found this somewhat disturbing, but I don't know how this impacts real-life programs: I could also imagine that it could in fact be faster in real-life programs than with String being a primitive like C (although I could also imagine that if this is in fact true, such optimizations can be done at compile time in C).

Has someone done tests/has experience with this? (if not, I'll might do it myself).

Greetings,
Erik

Offline princec

JGO Kernel


Medals: 282
Projects: 3
Exp: 16 years


Eh? Who? What? ... Me?


« Reply #1 - Posted 2003-03-03 20:43:16 »

You're half right I think; literals are stored in a pool, which might slow classloading a teeny weeny bit, but new instances of strings aren't. As they're not literals, of course.

Cas Smiley

Offline cfmdobbie

Senior Member




Who, me?


« Reply #2 - Posted 2003-03-03 20:51:53 »

Yeah, unless you intern() your created Strings, they won't appear in the internal pool.

Hellomynameis Charlie Dobbie.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline erikd

JGO Ninja


Medals: 15
Projects: 4
Exp: 14 years


Maximumisness


« Reply #3 - Posted 2003-03-03 20:55:56 »

... but I was talking about literals wasnt I (not explicitly created String objects)?  Smiley

But of course you're right that it will only affect class loading and not negatively affect runtime performance.
It will even speed up runtime performance when doing String literal comparing by using == instead of String.equals()  Tongue

Heh, I understand again  Smiley

Offline leknor

Junior Member




ROCK!!!


« Reply #4 - Posted 2003-03-04 02:52:14 »

I don't mean to hijack ericd's thread but since we have an answer to that I'd like to extend the thread by asking:

When is it desireable to use String.intern();?

Offline Ceranith

Senior Newbie





« Reply #5 - Posted 2003-03-04 03:39:30 »

Quote
I don't mean to hijack ericd's thread but since we have an answer to that I'd like to extend the thread by asking:

When is it desireable to use String.intern();?

I've never found it useful myself, but maybe if you want to speed up performance if you have a high number of String comparisons over creation of Strings. You'd gain efficiency checking if the references are equal rather than checking the contents of the String.
Offline Herkules

Senior Member




Friendly fire isn't friendly!


« Reply #6 - Posted 2003-03-04 06:03:57 »

If the pool is implemented as a HashSet e.g., checking for existance is O(1). So time can be constant no matter how much literals are there.

HARDCODE    --     DRTS/FlyingGuns/JPilot/JXInput  --    skype me: joerg.plewe
Offline Themroc

Junior Member





« Reply #7 - Posted 2003-03-04 08:39:41 »

I wouldn't use String.intern() unless there is a method to free the Strings again (I didn't found one when I looked some time ago at it).
String-pools can be very nice, I once built my own little log-file-scanner for my website and as many log-entries had same Strings (like requested path, address etc) I could save several MB of memory by using a pool for them.
Offline erikd

JGO Ninja


Medals: 15
Projects: 4
Exp: 14 years


Maximumisness


« Reply #8 - Posted 2003-03-04 09:12:35 »

You mean the pool is not subject for garbage collecting?  Huh
I kind of assumed it would.

Offline Themroc

Junior Member





« Reply #9 - Posted 2003-03-04 10:27:20 »

Quote
You mean the pool is not subject for garbage collecting?  Huh
I kind of assumed it would.

The API description does offer no hint that there might be some special treament of interned Strings, which would mean no GC.

But here is what I found in the net:

http://mindprod.com/jglossinterned.html

Intern and garbage Collection
In the early JDKs, any string you interned could never be garbage collected because the JVM had to keep a reference to in its Hashtable so it could check each incoming string to see if it already had it in the pool. With JDK 1.3 came weak references. Now unused intered strings will be garbage collected.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (25 views)
2014-04-15 18:08:23

BurntPizza (20 views)
2014-04-15 03:46:01

UprightPath (35 views)
2014-04-14 17:39:50

UprightPath (18 views)
2014-04-14 17:35:47

Porlus (34 views)
2014-04-14 15:48:38

tom_mai78101 (60 views)
2014-04-10 04:04:31

BurntPizza (118 views)
2014-04-08 23:06:04

tom_mai78101 (218 views)
2014-04-05 13:34:39

trollwarrior1 (185 views)
2014-04-04 12:06:45

CJLetsGame (192 views)
2014-04-01 02:16:10
List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:05:20
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!