Taher,

That's right at the moment. The point, as Sokolenko made it, is this is not set in stone and could be changed later. It's still not a strong argument I agree, but note that what initially worried me is not performance but correctness: the Brian Goetz's footnote.

Also, I put the Sokolenko link and a title with a plural to options because I think we should also check the other options he suggests. Even if I agree, that most of the time it's not a good idea to change the default parameters

So back to the main subject, really the correctness aspect is worrying, don't you think so? Maybe it's not longer an issue with Java 8, but I did not search about that...

Jacques

Le 10/06/2016 à 09:40, Taher Alkhateeb a écrit :
Hi Jacques,

So it seems for Oracle's JVM the only place where this makes an impact is
in Windows 32 bit architectures.

I am not sure, but I think it would be better not to pass the flag. Why?
Because the documentation provided by Oracle states that if you omit
-server then the JVM will decide based on hardware spects, more
specificailly: "For Java SE 6, the definition of a *server-class* machine
is one with at least 2 CPUs and at least 2GB of physical memory. "
Reference below with grid.

http://docs.oracle.com/javase/8/docs/technotes/guides/vm/server-class.html

So if you omit the -server flag on an old piece of hardware, then it will
consider it a client. and the main difference between client and server has
to do with the JIT compiler and startup time vs memory management (server
has more over head but more optimization long term). It makes sense not to
consider old hardware as server to avoid the overhead.

The only exception, again, is windows 32. Again not sure but I suspect we
do not have a lot of new hardware Windows 32 servers running OFBiz, but I
could be wrong of course.

Regards,

Taher Alkhateeb

On Thu, Jun 9, 2016 at 8:28 PM, Jacques Le Roux <
[email protected]> wrote:

Hi,

I was reading  "Java Concurrency in Practice" (again!) when I (again!)
stumbled upon the 6th footnote p. 38 (my edition is from 2011)

You can find a summary at
https://www.goodreads.com/work/quotes/123207-java-concurrency-in-practice
:

“Debugging tip: For server applications, be sure to always specify the
-server JVM command line switch when invoking the JVM, even for
development and testing. The server JVM performs more optimization than
the client JVM, such as hoisting variables out of a loop that are not
modified in the loop; code that might appear to work in the development
environment (client JVM) can break in the deployment environment (server
  JVM)...(more explanation and examples)”

Since this book was written in 2006 for Java 5, I checked what the
situation is with Java 8

http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#compiler_types

http://blog.sokolenko.me/2014/11/javavm-options-production.html#make-server-a-server

Oracle says

“Since Java SE 5.0, with the exception of 32-bit Windows, the server VM
will automatically be selected on server-class machines. The definition of
a server-class machine may change from release to release, so please check
the appropriate ergonomics document for the definition for your release.
For 5.0, it'sErgonomics in the 5.0 Java[tm] Virtual Machine <
http://www.oracle.com/technetwork/java/ergo5-140223.html>.”

Hence Sokolenko's comment:

“Though this option is implicitely enabled for x64 virtual machines, it
still makes sense to use it as according to documentation behaviour
maybe changed in the future.”

So this is still true and I wonder if we should not add this option (and
some others, see Sokolenko's link above) in some ant targets like "start"

Opinions?

Jacques



Reply via email to