Java-Gaming.org
Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
Featured games (78)
games approved by the League of Dukes
Games in Showcase (406)
games submitted by our members
Games in WIP (293)
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 2609 times)
0 Members and 1 Guest are viewing this topic.
Offline erikd

JGO Knight


Medals: 3
Projects: 3


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

Online princec
« League of Dukes »

JGO Kernel


Medals: 196
Projects: 3


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!
Play the free demo of Revenge of the Titans!
Offline erikd

JGO Knight


Medals: 3
Projects: 3


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 Knight


Medals: 3
Projects: 3


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.

Play Revenge of the Titans! The situation is critical. We need fancy commanders to defend Earth, the moon, Mars!
 
Browse for soundtracks for your game!

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

The first screenshot will be displayed as a thumbnail.

The invasion has landed! On Mars! And you're there to beat 'em!
cubemaster21 (84 views)
2013-05-17 21:29:12

alaslipknot (92 views)
2013-05-16 21:24:48

gouessej (123 views)
2013-05-16 00:53:38

gouessej (117 views)
2013-05-16 00:17:58

theagentd (127 views)
2013-05-15 15:01:13

theagentd (114 views)
2013-05-15 15:00:54

StreetDoggy (158 views)
2013-05-14 15:56:26

kutucuk (180 views)
2013-05-12 17:10:36

kutucuk (180 views)
2013-05-12 15:36:09

UnluckyDevil (187 views)
2013-05-12 05:09:57
Complex number cookbook
by Roquen
2013-04-24 12:47:31

2D Dynamic Lighting
by Oskuro
2013-04-17 16:46:12

2D Dynamic Lighting
by Oskuro
2013-04-17 16:45:57

2D Dynamic Lighting
by Oskuro
2013-04-17 16:23:20

Noise (bandpassed white)
by Roquen
2013-04-05 17:36:01

Noise (bandpassed white)
by Roquen
2013-04-03 16:17:38

Java Data structures
by Roquen
2013-03-29 13:21:12

Topic Request
by kutucuk
2013-03-22 21:42:01
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!
Page created in 0.097 seconds with 21 queries.