我想问一个关于技术概念的一般性问题,我不知道它是否存在或是否可行。
这个想法如下:
我有垃圾收集语言的对象(例如C#或Java)。对象本身可能包含多个对象,但不能引用任何不是对象子元素(或对象本身)的其他对象。 从理论上讲,可以获得此对象使用的内存,这很可能不是连接的内容。因为我对这些对象有一些了解,所以我可以找到所有引用变量/属性和指针,它们最终指向另一块内存(可能是间接的,取决于编程语言和虚拟机的实现)。我可以把这些内存组合成一个更大的内存(纠正引用/指针,使它们仍然完好无损)。这段内存,基本上是字节,可以写入存储器,例如数据库或redis缓存。在另一台机器上,我理论上可以再次加载此对象并将其放入虚拟机的内存中(如果它们是绝对的而不是相对的,则可能再次更正引用/指针)。然后我应该在另一个VM上拥有相同的对象。该对象可以像我想要的那样复杂,也可能包含事件或其他任何东西,我将能够将对象的状态转移到另一个VM(在另一台计算机上运行)。唯一的条件是它不包含对象之外的东西的引用。当然,我必须知道另一个VM上对象的类类型。
我问这个问题,因为我想分享一个对象的状态,我认为所有这些序列化工作只是一个开销,如果我可以冻结内存并传输到另一个VM,那将非常简单。
这样的事情是可能的,我会说是的,虽然它可能很复杂。也许由于他们的架构,一些VM是不可能的。在任何编程语言中都存在这样的东西吗?甚至可能在非垃圾收集语言中?
注意:除了编程语言之外,我不确定应该在这个问题中添加什么标签,我也不确定是否有更好的地方可以提出这样的问题。所以请原谅我。
修改:
也许这个概念可以与Linux上的initrd或一般的休眠进行比较。
答案 0 :(得分:1)
所以:我从来没有听说过这样的解决方案。它似乎在理论上可行,但由于某种原因,没有人这样做过。每个人都提供简单的程序化序列化。也许你会发现新的,更好的方式,但请记住,你会反对人群