My understanding as far as 64 bit Java is concerned is that the JVM is available in 64 bit versions for Solaris, Linux, and Windows - typically for x64 (64 bit x86 processor) architecture. My home PC runs Windows XP 64 bit edition, and the 64 bit JVM with no problems. OFBiz even fires up and runs fine on it. I would believe that the 64 bit JVM would have a few advantages over the 64 bit version - not in terms of memory consumption (and the assertion that a 64 bit system will use double the memory is incorrect*) - but in terms of actual instructions needed to accomplish work.

Internally Java has used pretty wide (bitwise) representations of primitive data types. For example a Java "int" is 32 bits on all JVMs. At the time of it's introduction that was pretty radical as typically a 'C' style "int" was typically 16 bits wide (depending on the vendor of your compiler). So you can imagine the "book-keeping" the JVM might have had to do on earlier operating systems and architectures - needing to use two 16 bit memory locations to store the value of a 32 bit integer, and also needing to keep track of which two 16 bit values went together, etc. The Java "long" type is 64 bits wide. Up until recently this has meant that the JVM has had to provide "emulation" in a manner similar to that described for 32 bit values on older systems for 64 bit values. No longer. A 64 bit JVM should be using native operations capable of 64 bit wide operands to handle 64 bit values.

* as to why 64 bit processors don't suddenly see 1/2 the memory... (a) a byte is defined as 8 bits.
(b) a kilobyte is 1000 bytes.  (actually 1024)
(b) a megabyte is 1000 KB. (actually 1024)

So the sizing of memory values is external to the bit-width of operations and operands on a CPU.

Additionally because x86 processors - even the x64 variants are still "CISC" style chips, they have variable bit length instructions. An ADD instruction might be 4 bits wide (and still work on 64 bit operands), whereas an SSE instruction might be 24 or 32 bits wide. Hence x86 CISC chips have to do more work to "decode" instructions as they come to the CPU... RISC was viewed as an improvement as all operations, and operands were fixed width. So a 32 bit RISC chip all instructions were 32 bits wide, and worked on 32 bit wide operands. Hence binary sizes for RISC chips were typically larger than the equivalent CISC binary - which might be the source of misapprehension concerning memory usage when increasing bit width of a CPU.


BJ Freeman wrote:
the is slightly off topic:
when you increase the bits of a processor, the available ram is decreased.
so 2 gig on a 32 bit is only usable 1 gig on 64 bit.
so unless the code in javaVM at the machine level is taking advantage of
the 64 bit instruction set, you are not gaining anything.
What usually happens it the complied runtime is still using the 32 bit
instruction set, on a 64 bit cpu. until they go in and optimize the
machine code generated.


Walter Vaughan sent the following on 3/29/2007 8:00 AM:
Is anyone working with ofBiz in 64 bit mode? I'm looking at
configuring/leasing a server (dual quad core box), and to get the javaVM
to use more than 2Gig of memory from what I've read, I need to run a 64
bit JavaVM.

I know this probably is way overkill, but the cost is reasonable right
now for these  servers, and we've got time to 'speriment, and if we have
to,we can still run this stuff in 32bit mode.

--
Walter




Reply via email to