Статические методы - это просто методы, они не хранятся в куче, они просто не могут использовать параметр "this".
Статические переменные служат «корнями» для ГХ. В результате, если вы явно не установите для них значение null, они будут жить столько, сколько длится программа, и поэтому все, что можно с ними сделать, доступно.
Ситуация считается утечкой памяти только в том случае, если вы намерены освободить память и она не станет свободной. Если вы намерены, чтобы ваша статическая переменная содержала ссылку на объект в течение некоторого времени, и вы забыли установить ее в null, когда закончите с этим объектом, вы, скорее всего, в конечном итоге получите утечку. Однако, если вы поместите его в статическую переменную и намереваетесь, чтобы он оставался там до тех пор, пока программа работает, то это определенно не утечка, а скорее «постоянный синглтон». Если бы объект был восстановлен, пока вы хотели, чтобы он все еще существовал, это было бы очень плохо.
Что касается вашего вопроса о куче: все объекты в Java существуют либо в куче, либо в стеке. Объекты создаются в куче с новым оператором. Ссылка затем прилагается к ним. Если ссылка становится нулевой или выходит из области видимости (например, конец блока), GC понимает, что нет никакого способа достичь этого объекта когда-либо снова, и восстанавливает его. Если ваша ссылка находится в статической переменной, она никогда не выпадает из области видимости, но вы все равно можете установить для нее значение null или другой объект.