Short version is that Go has structs and Java has classes.
Each class/object has an overhead whereas structs do not.
Go can embed structs, Java doesn't. This means that you always have an additional pointer when using another object/class.
Go also has slices and arrays for structs (non-primitives). You don't have to have a pointer per element in the array.
All of this results in less memory use and less memory fragmentation.
Of course that's not the full story; Java also pre-allocates more memory at the start for the GC and runtime, it also uses memory for JITing... etc. So there are runtime differences as well.
+ Egon