The issue of memory management has been a very delicate one for many years in the area of programming languages implementation. This has driven research in this area towards implementation models capable of handling memory in an effective and efficient way. The WAM represents a good example of good balancing in memory usage; the abstract machine has been designed in such a way to make garbage collection a consequence of the execution process itself (e.g., backtracking allows direct recovery of memory used by the discarded parts of the computation).
This leaves two major questions open:
The answer to the first question is debatable. On one hand the technology trend has lead to architectures whose memory capacity go far beyond what are the needs of average real-life Prolog programs. This may allow for simpler memory management schemes with less sophisticated (and less expensive) garbage collection mechanisms. On the other hand, a careless memory management scheme may lead to an overuse of memory, which will itself negatively affect the performance of the system (by increasing the amount of virtual memory's page faults and introducing irregular cache behaviour). This is particularly true for parallel systems, where the amount of memory used tends to increase proportionally to the amount of parallelism exploited.
The considerations above can be synthesized in a simple answer to the second question: yes, memory management may have a profound impact on the system performance. In particular:
The general observation is that a correct balance has to be found. Garbage collection is required but should not become an obstacle to efficiency. This is true, in particular, in the case of and-parallelism, where memory management is considerably more complex and garbage collection becomes a challenging and expensive task.