your postulate 1) is incorrect.
After the method call x and x2 refer to different instances of X. Therefore assigning x2 to x will cause 1 instance (the one created in the method) to become elligable for garbage collection.
Remember that
Java is pass by value. A new instance is created and returned in the method, the fact that one is passed in as a parameter is a smokescreen to put you on to the wrong idea and it worked with you
The method could have simply been static X m1(){return new X();} as nothing is ever done to mx which will have any consequences to the Object passed to the method.