No Java expert, but I think that C# has advantages because of the following point:
- lightweight objects can be allocated on stack instead of heap and are value types instead of references
- Java VM needs more tweaking of GC parameters to avoid long GC for bigger programs