It varies depending on the exact VM version, the type of machine you're on (server class or non-server class), whether you use the client or server compiler, what GC algorithm is being used. My non-server class machine running Java 6, in client mode typically has 8 VM threads plus the main application thread plus whatever other application threads you create.
How do you identify these threads?
I can see 8 threads in my 1.5 java process (just running a main) using windows XP task manager, but when I check how many threads there are from within the code, it only looks like 4:
java.lang.ThreadGroup[name=system,maxpri=10]
Thread[Reference Handler,10,system]
Thread[Finalizer,8,system]
Thread[Signal Dispatcher,9,system]
java.lang.ThreadGroup[name=main,maxpri=10]
Thread[main,5,main]
For example, using
Thread.currentThread().getThreadGroup().getParent().list();