Les méthodes statiques sont juste des méthodes, elles ne sont pas stockées sur le tas, ils n'ont tout simplement pas l'habitude d'utiliser un "ce" paramètre.
Les variables statiques servent de "racines" de la GC. En conséquence, sauf si vous explicitement définie sur null, ils vivront aussi longtemps que le programme de vie, et donc, tout est accessible à partir d'eux.
Une situation est considérée que comme une fuite de mémoire si vous avez l'intention pour que la mémoire de devenir libre et il ne deviendra pas gratuit. Si vous avez l'intention de votre variable statique pour contenir une référence à un objet, une partie du temps, et que vous oubliez de le mettre à null lorsque vous avez terminé avec cet objet, vous auriez probablement jusqu'à la fin avec une fuite. Toutefois, si vous le mettez dans une variable statique et l'intention qu'il sera là tant que le programme est en cours d'exécution, alors il n'est certainement pas une fuite, il est plus probable d'un "permanent singleton". Si l'objet reçu récupérée alors que vous vouliez qu'il existe encore, qui aurait été très mauvais.
Quant à votre question sur le tas: Tous les objets en Java exister, soit sur le tas ou sur la pile. Les objets sont créés sur le tas avec l'opérateur new. Une référence est ensuite attaché à eux. Si la référence est ou devient nulle ou est hors de portée (par exemple, la fin du bloc), le GC se rend compte qu'il n'y a aucun moyen d'atteindre l'objet et la reprend-il. Si votre référence est dans une variable statique, il ne tombe jamais hors de portée, mais vous pouvez toujours mettre à null ou à un autre objet.