Limitations.txt (DC, 01.24.03) -=---------=- TINI SDK 1.11 -=---------=- -------------------------------------------------------------------- Go to http://www.ibutton.com/TINI/book.html for an online version of "The TINI Specification and Developer's Guide". -------------------------------------------------------------------- This file documents some of the current limitations of TINI. This is not a comprehensive list, but does contain most of the items of greatest interest. Current Limitations -=================- - Loader Does not support baud rates below 19200. - MulticastSocket Only 1 local interface can send and receive on a given group. - TINI does not support IP datagram fragmentation/reassembly. - TINI has 24 total allowed socket connections. - TINI does not support IP layer routing. - printStackTrace() is only mostly supported. The fully qualified exception name will be printed, and the call stack trace will be printed for all methods except for ones that are private in the API. - Stack traces only print the previous 20 calls. - Native modules can't be larger than 64k. - The maximum size of any array is 64k. - TINI OS limits the number of processes to 8, with 32 threads per Java process. One process is consumed by the sweeper. The application (typically slush) is the 2nd OS process created and the 1st process running the JVM. - There is a limitation of 63 stack cells for local variables. 32 bit bit variables (such as int, char, byte, etc) take up 1 stack cell. 64 bit variables (long, double) take 2. - The default size of a Thread's stack is 768 stack cells. New methods in the class com.dalsemi.system.TINIOS can be used to change the size of a Thread's Java stack. See the method TINIOS.setStackSize(int). - A class file is limited to 255 static fields (including all super classes' static fields) and 255 instance fields (including all super classes' instance fields). - A method is limited to 63 local variables. - Only 2 ByteToChar (and CharToByte) are supported by default: UTF8, and ISO8859_1. Others can be added by users in their Java programs. - Only the default Locale is supported. Others can be added by users in their Java programs. - Each converted class file can't be larger than 32k. - PPP Dial on demand is not currently supported. These methods are not currently supported: get/setIdleTimeout(). - 1-Wire 2480 is not supported on ports other than serial1. - String's intern() method returns incorrect results. A VM level hashtable has been added for String literals. - TINI DHCP doesn't work with some DHCP servers. Known incompatibilies from the past: vDHCP, MagikDHCP, and Umax Ugate 3000 ADSL-sharing device. - Directories can only hold 254 files. Attempting to add more will result in an IOException. - An IOException will be thrown when attempting to create files with names longer than 247 characters. - The last modified time for files may not be correct if the TINI is reset during file system changes. The time reported could be the file's previous last modified time. - Cannot open a "rw" RandomAccessFile for a file that has been executed. An IOException will be thrown from the constructor. This is also the case for a FileOutputStream with the append flag set to true. - The method Date.toLocaleString() returns the same thing as Date.toString(). This is because TINI does not support any of the date formatting classes. - Dates representing times before January 1, 1970 will not return correct values for their fields, either through a Calendar object or through a Date object. - Calling the 'set(int, int)' or 'clear(int)' method on a GregorianCalendar object has no effect when the 'field' value is one of the following: DAY_OF_WEEK DAY_OF_WEEK_IN_MONTH ERA WEEK_OF_MONTH WEEK_OF_YEAR - The methods Double.toString() and Double.valueOf(String) (and the associated methods in the Float class) do not return correct values. The formatting code and the String parsing code for floating point numbers is as accurate as possible given limitations on API space and processor speed. Floating point numbers may often be printed slightly incorrectly as Strings. For instance, the code: System.out.println(3.05f); may produce the String "3.0499999". Note that floating point calculations are not affected by this statement, only conversions from a String to a floating point number or from a floating point number to a String. - When using a com.dalsemi.shell.server.SystemInputStream directly, reading one character in non-raw mode will cause the rest of the data currently in the stream's buffer to be parsed for backspaces, even if the rest of the data is to be read in raw mode. - Only a total 255 interface methods in an application allowed. This will be changed in future releases. - The static initializer for the java.lang.System class will always run before any application start (causing other static initializers to run as well). This is because important processing takes place in the System class's static initializer that must run before the application is started. The order that any initializers that are thus caused to run, though, will NOT violate the Java VM Specification. - CLASSLOADING * Method getClassLoader() in java.lang.Class will not return correct results. * Byte Code verification is not performed. * The method loadClass(String,boolean) in java.lang.ClassLoader always resolves the class being loaded, i.e. the boolean argument is ignored. * The method resolveClass(Class) in java.lang.ClassLoader does nothing. * The method setSigners(Class,Object[]) in java.lang.ClassLoader does nothing. * Dynamically loaded classes cannot define new native methods. * Class unloading (and resource release) before application termination can only bei accomplished by using the method TINIClassLoader.unloadClasses(ClassLoader). See the JavaDocs for more information on this method. - CAN, I2C, and URL Protocol implementations The CAN, I2C, and URL protocol implementation classes no longer exist in TINI's core API. They are now provided as optional modules, so they can be built into your application. Please see the BuildDependency_README.txt document for more information on building these modules into your application. - REFLECTION * AccessibleObject currently is a bogus class; it does not flag accessibility * getExceptionTypes is not implemented * The strictfp modifier is not reflected in the Method modifiers * To save space, reflection information for private methods, static final fields, private static fields, and private transient fields in API classes has not been included. It IS included in user applications. - SERIALIZATION TINI1.1 is compatible with JDK 1.2.2 with respect to serialization with the following exceptions: * Some classes do not serialize byte-for-byte with the reference implementation (meaning that serializing objects constructed in the exact same manner results in differing byte streams) - java.util.GregorianCalendar: we handle the 'nextStamp' slightly differently than the JDK - java.util.Properties: we use a different default load factor and table size than the JDK - java.util.Stack: we use a different default size of the internal Vector than the JDK - java.net.InetAddress: we set family=1, while JDK1.2.2 set family=2. With JDK1.4, both TINI and JDK set "family" in InetAddress that are corresponding to Inet4Address to 1. - java.net.URL: we will set "port" value for some common protocol. With FTP, for example, we will set port=21. For an URL object constructed in the following manner: url = new URL("ftp://ftp.dalsemi.com"); On TINI, "file" is set to "/", while on JDK, "file" is set to "", an empty String. * TC_LongString (String longer than 64k) will not be supported though as it violates the maximum length of String supported by TINI. All other TINI limitations apply. -=================-