IntelliJ, Java 8 Refactoring, and Lambda/Stream Performance

My Twitter feed served up this delicious blog:

IntelliJ IDEA Inspection Settings for Java 8 Refactoring

My shop is using IntelliJ and we are converting our Java 6 projects (Inherited from an outsourced vendor 2 years ago) to run on Java 8.  Jetbrains built in some great IDE functionality every developer needs to check-out.

That also generated this question to mind: what about performance?  Lambdas and the Stream API make the code oh-so awesome to read, but is it efficient compared to verbose Java?  I found this nifty blog:

Benchmark: How Misusing Streams Can Make Your Code 5 Times Slower

Benchmarks tend to be pretty treacherous and it’s super hard to get it right.

… it showed {Lambdas and Stream API } … can be around 5 times worse {performance}

The operative words here are “misusing” and “can be” … 

Happy Coding

  • Fshtank

 

IntelliJ importing Maven Project: No Route to Localhost

I will NOT be the only person to encounter this problem.
So here is my quick blog.

Using Intellij on Mac OSX Yosemite 10.10.1:

  • When trying to create a new project from existing maven sources
    the IDE would not switch to the “Select a profile” view.
  • The IDE did not give me a message.  It just wouldn’t advance. This forced me to review the logs

The logs live in :  MacintoshHD ▸ Users ▸ {user-name} ▸ Library ▸ Logs ▸ IntelliJIdea14

I could look at the logs directly through the Finder (open in a text editor) or use the convenient Console application in the application Launchpad.

I was getting this problem:  java.rmi.ConnectIOException: Exception creating connection to: localhost; nested exception is:

It was buried among an unending stack:

....
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - IntelliJ IDEA 14.1.3  Build #IU-141.1010.3 
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - JDK: 1.6.0_65 
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - VM: Java HotSpot(TM) 64-Bit Server VM 
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - Vendor: Apple Inc. 
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - OS: Mac OS X 
2015-07-05 21:40:41,304 [12622480]  ERROR - agnostic.FrequentEventDetector - Last Action: ImportProject 
2015-07-05 21:40:41,314 [12622490]   INFO - agnostic.FrequentEventDetector - Too many events posted
java.lang.Throwable
    at com.intellij.openapi.diagnostic.FrequentEventDetector.eventHappened(FrequentEventDetector.java:61)
    at com.intellij.ide.IdeEventQueue.postEvent(IdeEventQueue.java:1029)
    at java.awt.EventQueue.invokeLater(EventQueue.java:1078)
    at javax.swing.SwingUtilities.invokeLater(SwingUtilities.java:1267)
    at com.intellij.openapi.application.impl.LaterInvocator.b(LaterInvocator.java:248)
    at com.intellij.openapi.application.impl.LaterInvocator.invokeLater(LaterInvocator.java:148)
    at com.intellij.openapi.application.impl.ModalityInvokatorImpl.invokeLater(ModalityInvokatorImpl.java:48)
    at com.intellij.openapi.application.impl.ModalityInvokatorImpl.invokeLater(ModalityInvokatorImpl.java:54)
    at com.intellij.openapi.application.impl.ApplicationImpl.invokeLater(ApplicationImpl.java:471)
    at com.intellij.openapi.vfs.newvfs.RefreshQueueImpl$1.run(RefreshQueueImpl.java:88)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:695)
 
2015-07-05 21:40:41,325 [12622501]  ERROR - agnostic.FrequentEventDetector - Too many events posted
java.lang.Throwable
    at com.intellij.openapi.diagnostic.FrequentEventDetector.eventHappened(FrequentEventDetector.java:61)
...

This problem is driven my maven itself.

Context:  I work for a very large Enterprise with a burdensome amount of rules to access anything either in or out of the network.

Sifting through the code I eventually found the “no route to localhost” error line.

From past experience Maven proxy settings are unable to route to certain internal IPs through the proxy.

I have a “settings.xml” file sitting under my /Users/{user-name}/.m2 directory to enforce usage of certain repos and setting proxy values.  So I had to ensure my <nonProxyHosts> were set correctly:

    <proxies>
        <proxy>
            <active>true</active>
            <protocol>http</protocol>
            <host>144.44.144.14</host>
            <port>80</port>
            <username>{usZer-name}</username>
            <password>{passW0rd}</password>
            <nonProxyHosts>*.local|169.254/16|localhost</nonProxyHosts>
        </proxy>
    </proxies>

My initial mistake was using a “,” comma for a separator.  This is not correct for Maven.  It needs a Pipe {“|”}.

I corrected this and my project import problems have been resolved.

Happy coding.

Reference to the maven proxy settings:  https://maven.apache.org/guides/mini/guide-proxies.html