Win a copy of Mastering Non-Functional Requirements this week in the Design forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Java 1.8.0_60 Problem (OSX) - revert to 1.8.0_51  RSS feed

 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I run Eclipse and Java on my MacBook Pro. 2 days ago I installed the latest JDK on my machine and noticed that the whole application became very sluggish. Further tests seem to indicate that any network comms, including the TCP/IP socket connection between jdbc and mysql are experiencing serious delays. I read the release notes for the latest JDK and there were some passing references to DNS. This only seems to effect my app on OS X, I've tried Windows and it does not seem to occur.

The following

InetAddress.getLocalHost().getHostName()

takes much longer on my Mac with 1.8.0.60 than it does with the previous version.

So - how do I revert the default JDK on my Mac to the previous version. Re-installing the older JDK does not seem to help and nothing in the Java control panel appears to let you select the default. I'm assuming I need to do something at the Command prompt.

Any advice on how to back out the current JDK would be great, also any confirmation of this problem with this version on a OS X machine would be re-assuring. I found mySQL database io particularly noticeable.

Dave
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Check out the java_home utility. It helps you manage multiple versions of Java on OS X. Here's a function I defined as part of my shell environment to make the utility easier to use:

I put this function in a file called .aliases.bash which I source from .bash_profile:


This makes my terminals default to the latest JDK 1.8 version I have installed. I can easily change the version temporarily by running java_home with an appropriate argument in a new terminal window. I could also change the default by changing the appropriate line in .bash_profile.

To use a prior version of the JDK, I would run something like:
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
More info about java_home: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/java_home.1.html
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
In Eclipse, you can define different JDK versions and specify which one to use by default or for a particular project. Use the output of the java_home utility to see where the different installed versions of the JDK reside. On my machine, the output is like this:
 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I was aware of the JAVA_HOME environment variable but what had me a little confused was that when I used the command "set" to see all my current environment variables it was not shown. So in my mind I assumed the current binary for java must be included on a path (excuse windows terminology).

The implication of JAVA_HOME therefore - in my mind at least it that when you run a java program the OS must load the "default" java executable which then determines that it's not the default being pointed to by JAVA_HOME and re-executes the one which is ?

That sounds horrible and is probably wrong, but for the sake of clarity if I open up a command prompt and type "java -version" how does the OS find the current java executables (with and without the presence of JAVA_HOME)

Sorry if I'm over analysing only I like to have it clear in my mind if possible.

Dave
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Perhaps I gave you too much information all at once.

Here are a few of the important points:

1. JAVA_HOME is an environment variable. On the other hand, java_home is a utility program that comes with XCode tools -- you must download and install it. Follow the link I gave earlier. You can run it directly with the appropriate command line arguments as explained in the OS X man page I cited or use the shell function I provided or whatever variation you prefer. The java_home utility helps you easily manage the value of the JAVA_HOME environment variable.

2. To see just the environment variables in bash, use the env command instead. Or just use echo $JAVA_HOME to see what the current value of JAVA_HOME is

3. Please read through my previous posts carefully.

If you install JDKs in OS X with default options, which I highly recommend, the link /usr/bin/java is created. If you want to see what that link points to, issue the command ls -l /usr/bin/java

If you issue the command echo $PATH, /usr/bin should be included in it.

That's about as far as I really care to follow the path to the Java that gets executed. The rest that goes on under that I leave to the java_home utility to manage for me.
 
Jesper de Jong
Java Cowboy
Sheriff
Posts: 15939
86
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
About the problem you have with your program:

The method InetAddress.getHostName() will, in some circumstances, try to do a reverse DNS lookup to determine the hostname from a numerical IP address. That can be a slow operation.

I'd be very surprised if there's a difference between Java 8 update 51 and update 60 which causes this to behave differently. I've looked at the Java 8u60 release notes but the only thing about DNS has something to do with some specific Kerberos security thing, which is most likely not relevant for your program.

Are you sure something else hasn't changed in the configuration of your program, or in the network so that the reverse DNS lookup is slower?
 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Regarding the initial problem with Java 1.8.0_60. Although the 1 line of code regarding name lookup was an easy example to quote the main problem for me is the net effect it has on jdbc. Specifically running against a local mySQL database.

I have just performed the same tests as before, which is 1) running my application from Eclipse specifying 1.8.0_51 as the runtime environment and updating a single record in a database table. This was instant, certainly in the milliseconds department.

Then I repeated the same test again using 1.8.0_60 (both from Eclipse) and running the jar file from the command prompt picking up the default runtime environment. The same single row in the same database table took 1-2 seconds to update.

No code changes whatsoever.

Dave
 
Jesper de Jong
Java Cowboy
Sheriff
Posts: 15939
86
Android IntelliJ IDE Java Scala Spring
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Interesting...

Isn't there a way for your program to avoid calling getHostName()? For example, can't you just use "localhost", "127.0.0.1" or the actual IP address in numerical form of your machine?
 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I don't need to use that at all. It's just simpler to illustrate what I think it a bug in Java 1.8.0.60.

Let me be a little more scientific. I have created the following test program.



Please note this only seems to be an issue on OS X, I've not seen it with Windows.

When I run in Java 1.8.0_51 the output looks like this.

1.8.0_51
Iteration 1 current elapsed time 6
Iteration 2 current elapsed time 6
Iteration 3 current elapsed time 6
Iteration 4 current elapsed time 6
Iteration 5 current elapsed time 6
Iteration 6 current elapsed time 6
Iteration 7 current elapsed time 6
Iteration 8 current elapsed time 7
Iteration 9 current elapsed time 7
Iteration 10 current elapsed time 7
Iteration 11 current elapsed time 7
Iteration 12 current elapsed time 7
Iteration 13 current elapsed time 7
Iteration 14 current elapsed time 7
Iteration 15 current elapsed time 7
Iteration 16 current elapsed time 7
Iteration 17 current elapsed time 7
Iteration 18 current elapsed time 7
Iteration 19 current elapsed time 7
Iteration 20 current elapsed time 7
Iteration 21 current elapsed time 7
Iteration 22 current elapsed time 7
Iteration 23 current elapsed time 7
Iteration 24 current elapsed time 7
Iteration 25 current elapsed time 7
Iteration 26 current elapsed time 7
Iteration 27 current elapsed time 7
Iteration 28 current elapsed time 7
Iteration 29 current elapsed time 7
Iteration 30 current elapsed time 7
Iteration 31 current elapsed time 7
Iteration 32 current elapsed time 7
Iteration 33 current elapsed time 7
Iteration 34 current elapsed time 7
Iteration 35 current elapsed time 7
Iteration 36 current elapsed time 7
Iteration 37 current elapsed time 7
Iteration 38 current elapsed time 7
Iteration 39 current elapsed time 7
Iteration 40 current elapsed time 7
Iteration 41 current elapsed time 7
Iteration 42 current elapsed time 7
Iteration 43 current elapsed time 7
Iteration 44 current elapsed time 7
Iteration 45 current elapsed time 7
Iteration 46 current elapsed time 7
Iteration 47 current elapsed time 8
Iteration 48 current elapsed time 8
Iteration 49 current elapsed time 8
Iteration 50 current elapsed time 8
Iteration 51 current elapsed time 8
Iteration 52 current elapsed time 8
Iteration 53 current elapsed time 8
Iteration 54 current elapsed time 8
Iteration 55 current elapsed time 8
Iteration 56 current elapsed time 8
Iteration 57 current elapsed time 8
Iteration 58 current elapsed time 8
Iteration 59 current elapsed time 8
Iteration 60 current elapsed time 8
Iteration 61 current elapsed time 8
Iteration 62 current elapsed time 8
Iteration 63 current elapsed time 8
Iteration 64 current elapsed time 8
Iteration 65 current elapsed time 8
Iteration 66 current elapsed time 8
Iteration 67 current elapsed time 8
Iteration 68 current elapsed time 8
Iteration 69 current elapsed time 8
Iteration 70 current elapsed time 8
Iteration 71 current elapsed time 8
Iteration 72 current elapsed time 8
Iteration 73 current elapsed time 8
Iteration 74 current elapsed time 8
Iteration 75 current elapsed time 8
Iteration 76 current elapsed time 8
Iteration 77 current elapsed time 8
Iteration 78 current elapsed time 8
Iteration 79 current elapsed time 9
Iteration 80 current elapsed time 9
Iteration 81 current elapsed time 9
Iteration 82 current elapsed time 9
Iteration 83 current elapsed time 9
Iteration 84 current elapsed time 9
Iteration 85 current elapsed time 9
Iteration 86 current elapsed time 9
Iteration 87 current elapsed time 9
Iteration 88 current elapsed time 9
Iteration 89 current elapsed time 9
Iteration 90 current elapsed time 9
Iteration 91 current elapsed time 9
Iteration 92 current elapsed time 9
Iteration 93 current elapsed time 9
Iteration 94 current elapsed time 9
Iteration 95 current elapsed time 9
Iteration 96 current elapsed time 9
Iteration 97 current elapsed time 9
Iteration 98 current elapsed time 9
Iteration 99 current elapsed time 9
Iteration 100 current elapsed time 9
Total test elapsed time :9


When I run against Java 1.8.0_60 the output is like this.

1.8.0_60
Iteration 1 current elapsed time 5027
Iteration 2 current elapsed time 10097
Iteration 3 current elapsed time 15163
Iteration 4 current elapsed time 20233
Iteration 5 current elapsed time 25253
Iteration 6 current elapsed time 30313
Iteration 7 current elapsed time 35316
Iteration 8 current elapsed time 40380
Iteration 9 current elapsed time 45446
Iteration 10 current elapsed time 50488
Iteration 11 current elapsed time 55546
Iteration 12 current elapsed time 60595
Iteration 13 current elapsed time 65618
Iteration 14 current elapsed time 70691
Iteration 15 current elapsed time 75764
Iteration 16 current elapsed time 80836
Iteration 17 current elapsed time 85889
Iteration 18 current elapsed time 90961
Iteration 19 current elapsed time 96010
Iteration 20 current elapsed time 101079
Iteration 21 current elapsed time 106095
Iteration 22 current elapsed time 111166
Iteration 23 current elapsed time 116170
Iteration 24 current elapsed time 121244
Iteration 25 current elapsed time 126316
Iteration 26 current elapsed time 131388
Iteration 27 current elapsed time 136449
Iteration 28 current elapsed time 141521
Iteration 29 current elapsed time 146588
Iteration 30 current elapsed time 151662
Iteration 31 current elapsed time 156732
Iteration 32 current elapsed time 161804
Iteration 33 current elapsed time 166876
Iteration 34 current elapsed time 171919
Iteration 35 current elapsed time 176962
Iteration 36 current elapsed time 182028
Iteration 37 current elapsed time 187095
Iteration 38 current elapsed time 192151
Iteration 39 current elapsed time 197207
Iteration 40 current elapsed time 202279
Iteration 41 current elapsed time 207341
Iteration 42 current elapsed time 212416
Iteration 43 current elapsed time 217490
Iteration 44 current elapsed time 222565
Iteration 45 current elapsed time 227579
Iteration 46 current elapsed time 232589
Iteration 47 current elapsed time 237595
Iteration 48 current elapsed time 242600
Iteration 49 current elapsed time 247613
Iteration 50 current elapsed time 252683
Iteration 51 current elapsed time 257693
Iteration 52 current elapsed time 262710
Iteration 53 current elapsed time 267720
Iteration 54 current elapsed time 272790
Iteration 55 current elapsed time 277830
Iteration 56 current elapsed time 282903
Iteration 57 current elapsed time 287976
Iteration 58 current elapsed time 293031
Iteration 59 current elapsed time 298084
Iteration 60 current elapsed time 303129
Iteration 61 current elapsed time 308201
Iteration 62 current elapsed time 313267
Iteration 63 current elapsed time 318331
Iteration 64 current elapsed time 323379
Iteration 65 current elapsed time 328412
Iteration 66 current elapsed time 333487
Iteration 67 current elapsed time 338552
Iteration 68 current elapsed time 343591
Iteration 69 current elapsed time 348645
Iteration 70 current elapsed time 353700
Iteration 71 current elapsed time 358733
Iteration 72 current elapsed time 363809
Iteration 73 current elapsed time 368859
Iteration 74 current elapsed time 373875
Iteration 75 current elapsed time 378941
Iteration 76 current elapsed time 384008
Iteration 77 current elapsed time 389075
Iteration 78 current elapsed time 394084
Iteration 79 current elapsed time 399110
Iteration 80 current elapsed time 404184
Iteration 81 current elapsed time 409215
Iteration 82 current elapsed time 414283
Iteration 83 current elapsed time 419299
Iteration 84 current elapsed time 424349
Iteration 85 current elapsed time 429421
Iteration 86 current elapsed time 434489
Iteration 87 current elapsed time 439539
Iteration 88 current elapsed time 444614
Iteration 89 current elapsed time 449685
Iteration 90 current elapsed time 454756
Iteration 91 current elapsed time 459807
Iteration 92 current elapsed time 464834
Iteration 93 current elapsed time 469901
Iteration 94 current elapsed time 474968
Iteration 95 current elapsed time 480037
Iteration 96 current elapsed time 485040
Iteration 97 current elapsed time 490115
Iteration 98 current elapsed time 495121
Iteration 99 current elapsed time 500147
Iteration 100 current elapsed time 505220
Total test elapsed time :505220


In my application I only perform this once at startup so it's not an issue. But I suspect whatever is causing this command to become very slow is also responsible for the dramatic hit I'm seeing with mysql
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I ran your program multiple times on my MacBook Pro (OS X 10.9.5), 2.3 GHz Intel Core i7, 16 GB 1600 Mhz DDR3 ram

1.8.0_51: between 7 and 11
1.8.0_60: initial 23, a couple of 431, but subsequently all between 8 and 11

1.8.0_60 did seem to trend more towards 9 & 10 while 1.8.0_51 trended more towards 8 & 9 but that seems negligible. I repeated the runs for each version about 10 to 15 times.

Edit: ran the program some more and there were occasional spikes with 1.8.0_60 to 12/14 but 1.8.0_51 would also occasionally spike up to 11/13. There does seem to be a consistently slightly longer run time with 1.8.0_60. Interesting.
 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
On my machine as you can see the results are significantly different. I wonder why.
 
David Garratt
Ranch Hand
Posts: 216
Eclipse IDE Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Well, I've tried safe mode, checked my hosts file, uninstalled vm software and basically run out of ideas. Any troubleshooting diagnostics ideas would be welcome at this point.
 
Junilu Lacar
Sheriff
Posts: 10917
158
Android Debian Eclipse IDE IntelliJ IDE Java Linux Mac Spring Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
This fellow found a deadlock: https://github.com/neo4j/neo4j/issues/5242

You may not have the same problem but perhaps it's time for a session with a proper profiler.
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!