The PersonalJava and EmbeddedJava vary on the basis of the task they perform and the API they use. There was a time when two Java APIs served the embedded world: 1)PersonalJava and 2)EmbeddedJava. The PersonalJava FAQ described the PersonalJava application environment as being targeted at Web-connected consumer devices that "are often executing applets from a network." Therfore it follows that an aplication is expected to be connected to some form of network for downloading and executing applets.Their devices are general-purpose consumer devices in that sense;their capabilities can be extended. In contrast, EmbeddedJava devices are dedicated. The functions they perform are very specific, so there's little need to provide a capability for downloading new code to an EmbeddedJava device. Hence, PersonalJava devices expose an extendible Java API;EmbeddedJava devices�having no need for such a device�don't. I hope this shall satisfy your query. A Java Ranch folk, Kavita.
This one often confuses people. Let me explain it for you: 1) PersonalJava is now becoming a J2ME profile based on the Connected Device Configuration (CDC). It's basically a stripped down version of J2SE with a few optional pieces. It's aimed at higher-end devices. 2) EmbeddedJava is a version of Java where everything is optional. A vendor licenses it from Sun to put Java support in their devices, but sign agreements that prevent them from exposing any of that Java to third-party developers. In other words, the Java can only be used internally by their own developers, which is why they can strip out the unnecessary parts. If at any point they want to expose Java to the outside world then they have to become a regular licensee and use one of the "normal" Java implementations, either J2ME or J2SE as appropriate. Then they don't have the option of stripping things out. So EmbeddedJava is strictly for "black box" implementations.