SquirrelJME aims to be compatible with most programs however there are situations and rare edge cases where there will be no compatibility. This is to make the implementation easier.

Flushable Classes

Class which were made Flushable to match Java SE, since in Java ME they were not marked as being flushable. Since Java ME is designed to be a subset and there were some errors made when updating Java ME, it is assumed that this was intended to be done but was forgotten.

Reader's lock is initialized to null instead of this

Since SquirrelJME uses a reference counted garbage collector the Reader's lock object in the default constructor is set to null instead of this. This is so that readers do not remain in memory unable to be freed because objects still refer to them and such.

SUPER is always assumed to be set.

In all clases the SUPER flag is assumed to be set, this flag just modifies the behavior of invokespecial. When it is not set then that instruction can invoke nearly every method directly (it was called before invokenonvirtual). However, the Java compiler since Java 1.1 always set the flag for classes it compiled. Since CLDC 1.0 was released well after Java 2 was and is defined as a Java 2 virtual machine all code written for J2ME should have classes where this flag is set. As such instead of supporting the logic to handle cases where it is not set, the flag will just be ignored and assumed to be set.

Supported Encodings

Only the following character encodings are supported:

Note that UTF codepoints above U+FFFF are not fully supported and are not available in Java ME. Surrogate pairs in UTF-16 will be encoded in UTF-8 as six bytes. Additionally when decoding, if a sequence that is above U+FFFF is read then it will decode to the replacement character. This may cause a loss of or mutation of data when processing files.