Features

The Java language is a complex programming language and a JEMM adds a lot of additional behaviour. JEMM however is not a clean room implementation of a JVM, so the enhancements occasionally don't always handle edge cases well as the implementation is still in its alpha stages. The below is a list of the scenarios that have been tested to work correctly.

Constructors

  • Entry and exit of constructors tracked and object state saved.
  • Model classes extending from other Model classes, synchronisation and ID only assigned in the leaf class.
  • Constructors creating other Model class constructors

    TODO

  • Constructor calling onto a method with object references.
  • Passing this out of a constructor to another class

Methods

  • Nested method calls within the same object
  • Multiple threads entering and exiting an object.

Synchronisation

  • Synchronized keyword on a method
  • Synchronized block on this
  • Synchronized block on another JEMMObject

Fields

  • All the primitives
  • Object references to other JEMMObjects
  • Transient values are not stored
  • public Objects are null
  • private and protected fields
  • static fields are ignored

    TODO

  • Object equivalents of Primitives - Integer, Float, Double, Boolean etc
  • final field values are restored
  • Field name clash with jemmOIF