我正在进行一个NLP实验,在这个实验中,概念是一个系统中的代理,其目的是生成由新概念组成的紧急属性(对于那些不知道出现是什么的人来说,这里有一个链接)。Smalltalk (特别是法老方言)似乎是这种应用程序的理想选择,因为我可以轻松地创建完全封装的概念对象,这些对象作为独立代理相互关联,而且SmallTalk允许我在系统运行时检查系统的状态。
我担心的是,如果存在太多的对象,并且所有的对象都相互发送消息,系统是否会开始窒息。理论上,我的实现可能会产生数百万的概念对象,如果系统不能处理这么大的事情,我不想花时间在SmallTalk中解决这个问题。
提前感谢您的帮助!
发布于 2013-10-31 23:24:49
我相信,法老内部对象指针的内部工作大小仍然是32位。有64b版本的传言,但在64b机器上运行32b虚拟机是一回事,而通过虚拟机运行64b是另一回事。
因此,这里有一个隐含的限制,但仍然有“数百万”物体的空间。开始进入“上百万人”的行列,你很可能会遇到一些限制。
最终拥有数以百万计的对象并不是一个真正的问题,现在它转移到控制线程,而法老在这种情况下不会做太多的线程处理。因此,真正需要的是如何拥有多少实际不同的上下文,而不一定是对象本身。
拥有数以百万计的对象相互交谈并不是什么大不了的事情,您只需查看底层VM中传递的任何消息,以限制原始性能。法罗相当快,但它不是Java快。对你来说是否足够快,你就可以回答了。
我也说不出法罗GC如何处理数百万活的物体,我只能说这是2013年,Squeak (法老的基础)从90年代中期开始,GC技术已经相当成熟,我不怀疑法罗的GC在这方面非常可怕。
我只会做一些微基准,并为自己尝试。
发布于 2013-10-31 23:24:17
关于1:对象的数量受到虚拟机可用的虚拟地址空间的限制--按照标准构建,虚拟地址空间只有几百MBs。我当前的Squeak映像包含超过350万个处于空闲状态的Object
实例--这将给您一个可能的印象。
关于2:我的Squeak图像在我的最新英特尔核心i7 2620 M上每秒发送大约2600万条信息(当然,它只使用一个核心)。
然而,我怀疑你是否会对你目前的做法的结果感到满意。你说过要检查系统的状态--这在Squeak/法老中是非常棒的--但是你不能(手动)检查数百万个物体的状态。但话又说回来,我不知道你到底在做什么;)
https://stackoverflow.com/questions/19718142
复制相似问题