Skip to content
David Vernet edited this page Jul 29, 2017 · 1 revision

JCoz

Welcome to the JCoz GitHub page!

What is JCoz?

JCoz is the world's first causal profiler for Java (and eventually all JVM) programs. It was inspired by coz, the original causal profiler.

What is causal profiling?

Causal profiling, as explained in the original coz paper (Coz: Finding Code that Counts with Causal Profiling), is a technique for profiling programs by testing how "virtually" speeding up certain lines of code will affect performance. If you're new to causal profiling, we encourage you to watch Charlie Curtsinger's excellent presentation on Coz from SOSP (https://www.youtube.com/watch?v=jE0V-p1odPg&t=0m28s). For more details, we encourage you to read the coz paper itself.

Why should I care about JCoz if I already have coz?

JCoz is a tool for causally profiling Java programs, whereas coz is meant for native C and C++ programs. Performant and highly parallel Java programs are becoming more and more common, as Java allows developers to write fast programs without incurring the developer overhead of writing native programs. JCoz also provides several nifty features, including:

  • Local and remote profiling of Java programs. You can profile a program running locally on your machine, or instead connect to a remote JVM process over an RMI connection and have the results sent (and rendered) to you locally.
  • Simplicity: You don't need to recompile your Java programs to use JCoz - just specify that you want to use the JCoz native agent when you spin up the process you're trying to profile, and our configuration interface takes care of the rest.
  • Configurability. JCoz allows developers to specify profiling parameters through a convenient interface rather than having to update the source code. For example, rather than setting throughput points in the code, you can specify the source file and line number where you want to measure throughput, and click 'Go'. Other configuration options are specified (TODO: add link to configuration page).
  • Extensible: JCoz has a multi-tier service architecture, which allows a clean separation of concerns between your client service, and the JVM process you're trying to run. There are plans in the works to extend JCoz to multi-process and eventually distributed Java applications.
Clone this wiki locally