Даже если это деталь реализации, каждый поток в системе имеет свой собственный стек. Куча представляет собой изображение из сегментированной модели 70-х годов и не имеет никакого смысла ни для какого процесса, кроме Java в современной ОС: когда процессу требуется больше памяти, он просто запрашивает его у ядра и не имеет предварительно выделенной кучи. В некотором смысле все процессы в системе (за исключением Java) используют один и тот же доступный пул памяти, но это не то, что называется кучей.
Java отличается, потому что программа Java выполняется в JVM, и у JVM есть выделенная память, и процесс не может требовать память от системы. Таким образом, в JVM весь процесс имеет кучу, а каждый поток имеет стек. И если вы запустите 2 независимых Java программы, у вас будет 2 независимых JVM, каждая со своей кучей.