• They must completely implement the Java language specification.
• Profiles are lists of packages. Profiles should usually be identical to the package
of the same name in the full Java SE platform, and any exceptions (which
should be very rare) must be explicitly called out.
• A Profile may declare that it is larger than another package. In this case, it must
be a strict superset of that Profile.
As a consequence of the second requirement, all Profiles must include all classes
and packages that are explicitly mentioned in the Java language specification.
The general purpose of Profiles is to reduce the size of rt.jar . This is helpful for
reduced capability platforms, which may not need the full features of Java SE (such
as the Swing/AWT graphical toolkits).
Profiles can be seen, in this light, as a step toward modernizing the Java ME plat‐
form and harmonizing (or even unifying) it with Java SE. However, it is also possi‐
ble to conceive of using a Profile as the basis for a server application or other envi‐
ronment, where deploying unnecessary capability is seen as undesirable.
Finally, it is worth noting that a large number of Java's security vulnerabilities in
recent years have been connected to Java's graphical client features, as implemented
in Swing and AWT. By not deploying the packages that implement such features, a
modest amount of additional security for server applications is achieved.
Let's move on to discuss each of the three standard profiles (the Compact Profiles)
that Java 8 ships with.
Compact 1 is the smallest set of packages that it is feasible to deploy an application
on. It contains the packages: