All Projects → platypusguy → jacobin

platypusguy / jacobin

Licence: MPL-2.0 license
A more than minimal JVM written in Go and capable of running Java 17 classes.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to jacobin

loli
A pretty CLI to find animes passing images 👉😳👈
Stars: ✭ 17 (-71.19%)
Mutual labels:  golang-application
java-perf-workshop
Guided walkthrough to understand the performance aspects of a Java web service
Stars: ✭ 53 (-10.17%)
Mutual labels:  jvm
dekart
GIS Visualisation for Amazon Athena and BigQuery
Stars: ✭ 131 (+122.03%)
Mutual labels:  golang-application
procedural
Procedural generation as a service
Stars: ✭ 81 (+37.29%)
Mutual labels:  golang-application
jsonfiddle
JSON Fiddling
Stars: ✭ 14 (-76.27%)
Mutual labels:  golang-application
styx
Programmable, asynchronous, event-based reverse proxy for JVM.
Stars: ✭ 250 (+323.73%)
Mutual labels:  jvm
gchisto
GC日志分析工具,网上不容易找到源码,这里备份一个。不确定工具是否正确,不确定是否有时间研究。
Stars: ✭ 32 (-45.76%)
Mutual labels:  jvm
play-java-chatroom-example
Example Chatroom with Java API
Stars: ✭ 33 (-44.07%)
Mutual labels:  jvm
dragome-sdk
Dragome is a tool for creating client side web applications in pure Java (JVM) language.
Stars: ✭ 79 (+33.9%)
Mutual labels:  jvm
openwhisk-runtime-java
Apache OpenWhisk Runtime Java supports Apache OpenWhisk functions written in Java and other JVM-hosted languages
Stars: ✭ 43 (-27.12%)
Mutual labels:  jvm
nssh
An easy way to manage SSH connections and sshconfig records
Stars: ✭ 25 (-57.63%)
Mutual labels:  golang-application
jstackSeries.sh
Script for capturing a series of thread dumps from a Java process using jstack (on Linux and Windows)
Stars: ✭ 28 (-52.54%)
Mutual labels:  jvm
kotlin-guiced
Convenience Kotlin API over the Google Guice DI Library
Stars: ✭ 17 (-71.19%)
Mutual labels:  jvm
sconfig
Scala configuration library supporting HOCON for Scala, Java, Scala.js, and Scala Native
Stars: ✭ 99 (+67.8%)
Mutual labels:  jvm
SmallVM
TODO: A small and lightweight Java Virtual Machine
Stars: ✭ 23 (-61.02%)
Mutual labels:  jvm
gh
Control GitHub from your Terminal
Stars: ✭ 28 (-52.54%)
Mutual labels:  golang-application
ToRat client
This is the ToRat client, a part of the ToRat Project.
Stars: ✭ 29 (-50.85%)
Mutual labels:  golang-application
aot
Russian morphology for Java
Stars: ✭ 41 (-30.51%)
Mutual labels:  jvm
Cojen
Java bytecode generation and disassembly tools
Stars: ✭ 28 (-52.54%)
Mutual labels:  jvm
play-scala-compile-di-example
Example Play Project using compile time dependency injection and Play WS with ScalaTest
Stars: ✭ 37 (-37.29%)
Mutual labels:  jvm

Go version Workflow Go_report_card GitHub

jacobin

A more-than-minimal JVM written in Go.

Status

Intended feature set:

  • Java 17 functionality, but...
  • No JNI (Oracle intends to replace it; see JEP 389)
  • No security manager (Oracle intends to remove it; see JEP 411)
  • No JIT
  • Somewhat less stringent bytecode verification
  • Does not enforce Java 17's sealed classes

What we've done so far and what we need to do:

Command-line parsing

  • Gets options from the three environment variables. Details here
  • Parses the command line; identify JVM options and application options
  • Responds to most options listed in the java -help output

To do:

  • Handling JAR files ✏️ This is a primary focus of current coding work
  • Handling @files (which contain command-line options)
  • Parsing complex classpaths

Class loading

  • Correctly reads and parses basic classes
  • Extracts bytecode and parameters needed for execution

To do:

  • Handle more-complex classes
  • Handle interfaces
  • Handle arrays
  • Handle inner classes
  • Automate loading of core Java classes (Object, etc.)

Verification, Linking, Preparation, Initialization

To do:

  • Linking and verification
  • Preparation
  • Initialization

Execution

  • Execution of bytecode ✏️ This is a primary focus of current coding work

To do:

  • invokedynamic
  • Calls to superclasses
  • Annotated classes
  • Arrays

Instrumentation

  • Instruction-level tracing (use -trace:inst to enable this feature)
  • Extensive logging data (use -verbose:finest to enable. Caveat: this produces a lot of data)

To do:

  • Emit instrumented data to a port, for reading/display by a separate program. ✏️ This is a primary focus of current coding work

Garbage Collection

GC is handled by the golang runtime, which has its own GC

Understanding the Code

A detailed roadmap to the code base can be found in the wiki.

Thanks

The project's home page carries a lengthy note at the bottom that expresses our thanks to vendors and programmers who have made the Jacobin project possible. They are many and we are deeply grateful to them.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].