I\'am struggling with unreachable objects in my JVM heap (Java 1.7). As you can see from the picture (all classes on the picture are unreachable), we have more than 74 % objects
There are several aspects in the behaviour you are facing. First and foremost, having unreachable objects inside heap at any given time is perfectly normal. Garbage Collection will clean the unreachable objects during the next run and will clean the heap from them. So, seeing unreachable data structures in heap dump is not evil nor abnormal.
But when facing java.lang.OutOfMemoryError: Java heap space error, these unreachable references should have been cleaned. You can check this via adding -XX:+HeapDumpOnOutOfMemoryError to your startup parameters, triggering heap dump on next OutOfMemoryError generated. When you now crawl this dump, you should not see the unreachable objects, at least not of any significant size.
After understanding this, the underlying problem is still unclear, one of the possible causes can definitely be a heap leak. For this, you can either try to go ahead with the same memory dump gotten during the JVM crash with OutOfMemoryError, or you can make your life easier and attach a Java memory leak detector to find the exact location of the leak in your source code.