JavOSize is a young company bringing a new performance tool to the Java world. The command line interface version is absolutely free of cost, a commercial graphical user interface version will be available soon. And JavOSize thinks about putting the source code of the core system under an open-source license in the future.
A look at the feature list reveals two interesting features: First of all, hot replacement of code changes after a bug is found is supported. Plus you can record and save the steps for finding common performance issues to recipes which can be replayed later.
Connecting to local running virtual machines is known from other tools in this category. Simply pass the PID of your running process as a parameter to JavOSize and the tool connects to the running instance without the need to restart or reconfigure your application. You will feel familiar with this when using tools like JVisualVM, JProfiler or YourKit. From here on, you can use a bash-like command-line interface to show information of your running system. Remote profiling is a missing feature in this early version, which you’ll maybe miss in enterprise environments.
I said that the interface is bash-like so you can navigate to the functions with a “cd..” command. In the /REPOSITIORY folder you will find some recipes to analyze your system. A recipe is a kind of a recorded macro. A macro recorder can be used to record an own recipe. JSON/XML-based definitions are possible too. This enables you to save recurrent steps and analyze a problem with a simple script.
Looking at some well-known performance issues shows that the product is in an early development phase and still misses some features which are standard in competitors’ products. But many efforts are being made by the company to bridge these gaps. So it’s worth to take a look at this product from time to time to find out if your requirements are fulfilled.
So, for example, memory leaks can only be found in case of statically referenced variables, and finding the origin of memory leaks by gc root path references and heap walker functionality is missing. If you have some kind of container-managed components, like Spring components or EJB’s it’s not possible to find leaking instance variables (which very often aren’t static) at the moment.
In case of thread synchronization issues, we can find deadlocks. What I miss here is a visualization of temporarily blocking threads which cause thread-execution to slow down in performance.
Very nice is the feature of code injection and class decompilation. It’s possible to decompile classes at runtime, modify them in vi or any other editor and then hot deploy this class at runtime. Another funny thing is to write interceptors at runtime which you can use for profiling purposes.
As a summary, JavOSize is still in its infancy and other tools provide much more tooling for profiling and application process monitoring at the moment. But after speaking with the founders of JavOSize, I come to the conclusion that they are about to add missing features to their platform.
So JavOSize is an interesting project worth keeping an eye on it.