(Unknown Source) comes from VMs that perform "tail call optimisation". This excludes the Sun VM[1], so I'll assume you're using the IBM VM[2]. If I remember rightly[3], there is a switch to the VM to prevent this optimisation. The -g option has nothing to do with anything so you can ignore that little red herring.
[1]
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4726340 Many will claim that Java will die without this RFE filled and I almost agree (I believe it will die anyway, but without this RFE, it will die sooner). This prediction is based on trends within the industry i.e. the invention of functional programming in Java which doesn't cater well for it. You can read about it
On the flip side, the .NET VM includes a tail call instruction (and thus, tail call elimination), which allows "dysfunctional" (impure) languages to compile easily to the platform such as F# (an ML-based impure FP language).
[2] For fun, try this code on Sun VM:
It fails with stack overflow.
Now run it on the IBM VM. It will probably run forever - if it fails, just run it again until eventually (usually immediately or soon thereafter) the VM will optimise the tail call in which case you are in an infinite loop with constant stack size. This is where your "Unknown Source" comes from - the tail call has been eliminated.
[3] ..since last working for The Filth on the IBM VM last year and seldom touching Java since.
[ December 08, 2006: Message edited by: Tony Morris ]