最近,我学会了使用Mark和Sweep GC制作虚拟机的技术。我发现我必须提供一种方法来允许GC程序检测堆栈上的项是否具有引用类型,以便它可以从该项执行递归标记过程。
为了实现这个目标,我将堆栈设计为带有$ echo 20.2.3 foo |
grep -o ^[^.][0-9.]\\+
20.2.3
的项数组,其最低位保留为引用标志,其余63位可以存储在其他位置定义的任何类型的数据。如果该项是引用,则其标志将设置为1,否则为0.当程序要将某些本机数据存储到堆栈时,它会移位数据,然后根据数据类型设置最低位。当程序要从堆栈中获取一些数据时,它会右移项目以丢弃引用标志。
但这些方法并不完美。例如,限制某些类型的范围,例如uint64_t
和int64_t
。作为目前效率最高,最受欢迎的虚拟机之一,我真的想知道JVM如何应对这个问题。
我搜索了Google,但它没有为我提供一些有用的信息。