1. Cannot write to the filesystem. Must use Data Store for persistence.
2. Cannot open a socket or access another host directly.
3. Cannot spawn a sub-process or thread.
4. Cannot make other kinds of system calls.
5. Cannot create a new java.lang.ThreadGroup nor a new java.lang.Thread. However, operations against the current thread, such as Thread.currentThread().dumpStack() is allowed.
6. The features of the java.lang.System class that do not apply to App Engine are disabled.
7. The System methods such as: exit(), gc(), runFinalization() and runFinalizersOnExit() do nothing.
8. Cannot directly invoke JNI code
9. Application is allowed full, unrestricted, reflective access to its own and JRE classes. However, An application cannot reflect against any other classes not belonging to itself, and it can not use the setAccessible() method to circumvent these restrictions.
Related Post: Overview of Google App Engine for Java