Java can call a C function through the Java Native Interface (JNI), and that C function can contain assembly code. Vasya Drobushkov’s 2019 “Java-C-Assembly Matryoshka” demonstrates the layers with a small program that adds two integers: first in Java, then in C reached through JNI, and finally in Visual C++ inline assembly. It is a conceptual example, not a performance technique.
What “Java-C-Assembly Matryoshka” demonstrates
The tutorial builds the same operation in three stages. Each stage moves the implementation of sum while keeping the command-line program’s basic job—read two integer arguments and print their sum—intact.
- Java implementation: Java parses the two arguments, adds them in a Java method, and prints the result.
- JNI and C: Java declares the method as native and loads a native library with
System.loadLibrary. A C function supplies the implementation using the JNI naming and calling conventions. - Visual C++ inline assembly: The C implementation performs the addition in a Visual C++
__asmblock, moving the integer operands through registers and returning the result to Java through the native method.
The “matryoshka” is the nesting of those boundaries: Java calls native C through JNI, and the C code delegates the arithmetic to assembly. The author’s original tutorial is “Java-C-Assembly Matryoshka”, published June 4, 2019.
How Java reaches the C implementation
JNI is the bridge that lets Java code invoke a method implemented in a native library. In this example, the Java method is declared native rather than given a Java body, and System.loadLibrary loads the library containing its implementation. The C function must follow JNI’s expected interface so the JVM can call it and receive the result.
Free tools Windows power users keep installed
One-click scans. No signup required.
The tutorial’s historical workflow uses javah to generate a JNI header. That command and the displayed Java output belong to the article’s 2019, Java 8-era context; they should not be treated as current setup instructions. Consult current official Java and toolchain documentation before choosing a header-generation or build workflow.
What changes—and what does not—between the three stages
| Stage | Where the addition happens | How Java reaches it | Platform or toolchain qualification |
|---|---|---|---|
| Java version | A Java method | Direct Java call | Java example |
| JNI version | C function | Native method declaration and loaded library | Native-library setup required |
| Assembly variation | Visual C++ inline __asm block inside the C implementation |
Still through JNI and the native library | Windows-oriented and specific to Visual C++ inline assembly |
The interface from Java remains the native method; the assembly block is an implementation detail inside the native side. This distinction matters: JNI does not itself execute assembly, and the tutorial does not replace Java’s call mechanism with an assembly interface.
Rank #2
Why the example is not a speedup recipe
Adding two integers is too small a workload to show a meaningful benefit from crossing into native code. JNI and native-library setup add complexity, and the tutorial reports no benchmark or measured speedup. Drobushkov explicitly cautions that the delegation “won’t speed up anything” in a real-world program. The example’s value is showing how the layers connect, not establishing that native code or assembly makes Java faster.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Why the instructions are platform-specific
The assembly shown is Visual C++ inline assembly, and the tutorial is Windows-oriented. The author warns that macOS and Linux differ significantly from the instructions. Do not assume the same source or build steps will work across operating systems or compilers; the article does not provide a portable assembly implementation or current cross-platform setup guide.
The tutorial and its companion author-site index are dated 2019; the latter lists the title with the date 2019/06/04: krossovochkin.com. Treat its commands and tool references as historical unless checked against the documentation for the Java version, operating system, and compiler you intend to use.
Quick Recap
Best Value
Rank #4
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

