There are two types of Java programming language application programming interfaces (APIs): The official core Java API, contained in the Android (Google), SE (OpenJDK and Oracle), MicroEJ. These packages (java.* packages) are the core Java language packages, meaning that programmers using the Java language had to use them in order to make any worthwhile use of the Java language. Optional APIs that can be downloaded separately. The specification of these APIs are defined according to many different organizations in the world (Alljoyn, OSGi, Eclipse, JCP, E-S-R, etc.). The following is a partial list of application programming interfaces (APIs) for Java. APIs Following is a very incomplete list, as the number of APIs available for the Java platform is overwhelming. Rich client platforms Eclipse Rich Client Platform (RCP) NetBeans Platform Office_compliant libraries Apache POI JXL - for Microsoft Excel JExcel - for Microsoft Excel Compression LZMA SDK, the Java implementation of the SDK used by the popular 7-Zip file archive software (available here) JSON Jackson (API) Game engines Slick jMonkey Engine JPCT Engine LWJGL Real-time libraries Real time Java is a catch-all term for a combination of technologies that allows programmers to write programs that meet the demands of real-time systems in the Java programming language. Java's sophisticated memory management, native support for threading and concurrency, type safety, and relative simplicity have created a demand for its use in many domains. Its capabilities have been enhanced to support real time computational needs: Java supports a strict priority based threading model. Because Java threads support priorities, Java locking mechanisms support priority inversion avoidance techniques, such as priority inheritance or the priority ceiling protocol. To overcome typical real time difficulties, the Java Community introduced a specification for real-time Java, JSR001. A number of implementations of the resulting Real-Time Specification for Java (RTSJ) have emerged, including a reference implementation from Timesys, IBM's WebSphere Real Time, Sun Microsystems's Java SE Real-Time Systems,[1] Aonix PERC or JamaicaVM from aicas. The RTSJ addressed the critical issues by mandating a minimum (only two) specification for the threading model (and allowing other models to be plugged into the VM) and by providing for areas of memory that are not subject to garbage collection, along with threads that are not preempt able by the garbage collector. These areas are instead managed using region-based memory management. Real-Time Specification for Java The Real-Time Specification for Java (RTSJ) is a set of interfaces