Re:For Better Computing, Liberate CPUs from Garbage Collection
by p_l on Thursday May 09, 2019 @04:46AM
(#19866479)
Lisp Machines didn't use tags for tracking liveness/evacuation of objects, though. They used them for safety, which automatically gave them precise, as opposed to conservative, GC which always knew whether it was dealing with a pointer. They also had special, CPU-handled type of forwarding pointers, which when accessed "normally" would transparently redirect you to forwarded location.
Re:For Better Computing, Liberate CPUs from Garbage Collection
by _old_dude_ on Thursday May 09, 2019 @09:44AM
(#19868194)
The forwarding pointer you are describing is equivalent to a ZGC colored pointer with the evacuation bit set that a GC barrier (a load barrier) will rewrite to the evacuation address.
and yes ZGC doesn't use colored pointer to track if a value is an integer or a pointer because Java unlike Lisp is typed so the VM derives those information from the bytecode.
Re:For Better Computing, Liberate CPUs from Garbage Collection
by lispm on Thursday May 09, 2019 @11:33AM
(#19869169)
Most Lisp implementations use typed memory via tags. Lisp doesn't have pointers, but references and usually knows if something is an integer or a reference - because it's encoded in the tags.
You have a lot useless bits in a 64 bits pointers and thanks to the virtual memory, you can manage to have an untagged address and its corresponding tagged address referencing the same physical memory. This give you free bits that you can use to track the liveness/evacuation of a graph of objects.
[1] https://wiki.openjdk.java.net/display/zgc/Main