Re: Check: use of 'short' in TextLayoutManager?

2008-06-22 Thread Andreas Delmelle

On Jun 20, 2008, at 09:34, Max Berger wrote:



The JVM converts all shorts to ints before doing any arithmetic, so
shorts are actually a little bit slower than ints.

As for the size: If you have primitive values, an int takes up 4 byte,
whereas a short takes 2 bytes (+java overhead), meaning 100.000 * 3  
int

rather than shorts should take up 600kbyte of memory more - hardly
noticeable compared to fops overall memory usage.


Thanks for the info.

FYI: Change has been committed with r670422

Since TextLayoutManager now no longer duplicates the char array, the  
increase due to switching to ints is even compensated somewhat...


Greetz

Andreas


Re: Check: use of 'short' in TextLayoutManager?

2008-06-20 Thread Max Berger
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

Andreas,

The JVM converts all shorts to ints before doing any arithmetic, so
shorts are actually a little bit slower than ints.

As for the size: If you have primitive values, an int takes up 4 byte,
whereas a short takes 2 bytes (+java overhead), meaning 100.000 * 3 int
rather than shorts should take up 600kbyte of memory more - hardly
noticeable compared to fops overall memory usage.

When you use the non-primitive types, java = 1.5 uses the flyweight
pattern, meaning there is one instance for every number used, you would
only store a pointer, which has the same size for Integer and Short.

So +1 for making this change.

Max

Andreas Delmelle schrieb:
 
 Hi all
 
 Just checking if anyone would mind terribly if the AreaInfo inner class
 in TextLayoutManager were changed to use 'int' indices rather than 'short'.
 
 AFAIK, this is the only reason we currently need to split up FOText
 instances larger than 32K characters. At the time I introduced this fix,
 I opted to split the FOText instances, since I was a bit concerned about
 a rise in memory consumption. Upon closer inspection, and some browsing
 around, this seems to have far less of an impact than I thought...
 
 I did a quick test, allocating space for an array of 100.000 instances of:
 - a wrapper around three short values (values Short.MAX_VALUE)
 - a wrapper around three int values (values Integer.MAX_VALUE)
 
 The results:
 - 3 shorts - 100.000 instances = (2200K - 800K) = 1600K
 - 3 ints - 100.000 instances = (2980K - 800K) = 2180K
 
 The 800K is subtracted to account for the instance size (8 bytes * 100K).
 
 So three ints do not take up 100% as much space (as I initially
 expected), but only roughly between 30% and 50%...
 
 
 Opinions?
 
 Cheers
 
 Andreas

-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFIW12e+Gr+4pk71JwRAgWoAJwOIDLdgcYEBZQ4Tx0gPZaJe4KAXQCfc+Cs
u2CYsAOxh6HnzLzu81iOH7c=
=WlBi
-END PGP SIGNATURE-