![]() |
1
9
对于Java数组部分, Sun's JNI documentation 包括这个评论,隐藏在关于字符串的讨论中:
最后一个问题,如果你有两个
我相信,在Java和.NET中,如果在一个线程中快速连续地分配许多小对象,那么这些对象就是 可能的 具有良好的参考位置。当GC压缩一个堆时,这可能会改善——或者如果一个具有
被压缩到
(在收集C的地方)-突然之间,A和B,可能已经“接近”了,相距很远。我不知道这是否真的发生在任何垃圾收集器中(周围有负载!)但这是可能的。 基本上,在托管环境中,您对引用位置的控制通常不如在非托管环境中那样多——您必须相信托管环境足够擅长管理它,并且您将通过编码到更高级别的平台来节省足够的时间,从而使您可以花时间在其他地方进行优化。 |
![]() |
2
3
首先,你的头衔是“C”。“托管代码”是微软创造的一个术语,如果我没有弄错的话。 Java原始数组保证是一个连续的内存块。如果你有
你可以从JNI(原生C)获得
我认为,JVM的早期实现将对象作为连续结构,但这不能用新的JVM来假设。(JNI把这个抽象掉了)。 同一对象中的两个整数可能如您所说“更接近”,但它们可能不是。即使使用相同的JVM,这也可能有所不同。 有两个int字段的对象是一个对象,我认为任何JVM都不能保证成员是“关闭”的。一个包含两个元素的int数组很可能由一个8字节长的数组作为后盾。 |
![]() |
3
2
关于数组,这里是来自cli(公共语言基础结构)规范的摘录:
|
![]() |
4
2
好问题!我想我会求助于C++中的扩展,它以更仔细的管理方式处理内存,并且仅仅暴露足够的接口,以允许应用程序的其余部分操作对象。如果我关心性能,我可能会求助于C++扩展。 |
![]() |
5
2
我想没人谈论过蟒蛇,所以我想试试看。
在Python中,数组更像C中的指针数组。因此指针将是相邻的,但实际对象不太可能是。
可能与上述原因不同。实例将只保存指向实际整数的对象的指针。Python没有原生int(像Java),只有boxed Int(在Java语言中)。
大概不会。但是,如果您使用
在Python中,就内存位置而言,它们几乎是相同的!一个将生成指向对象的指针数组,对象将依次包含指向整数的两个指针,另一个将生成指向整数的两个指针数组。 |
![]() |
6
-3
如果您需要优化到这个水平,那么我怀疑基于虚拟机的语言不适合您;) |