我有一个由两部分组成的程序:
问题在于,只要没有处理大图像,虚拟机就能够快速运行。在处理大图像之后,虚拟机的性能下降约为5倍。我想这是因为当一个大图像出现时,属于虚拟机的对象的内存缓冲区会从缓存中删除。通常,处理器为代码保留单独的高速缓存,为数据分开,但在解释我的程序时则不行。
问题: 是否有任何方法可以使解释代码相同,即以某种方式将内存缓冲区标记为高速缓存内存的高优先级,或以某种方式分配一个可保证保留在缓存中的内存缓冲区?
让我补充一点,尽管图像处理比解释程序要慢得多,但有时会出现第二部分变得严重的情况 - 例如,想一想对图像上检测到的一组点进行后处理 - 这些是简单的算术运算,然后在虚拟机上速度太慢。
答案 0 :(得分:2)
没有精灵尘埃。
您需要以缓存友好的方式非常仔细地编写代码。看一下CPU Caches and Why You Care,绝对肯定会得到The Software Optimization Cookbook的副本并仔细阅读它。
作为一方,OS平台允许固定进程内存(不可交换,这是一个与L2代码/数据缓存不同的主题,但你还远远没有证明L2缓存是你案件中的罪魁祸首...)但101%的情况下,操作系统比您的应用程序更清楚,并且防止交换导致性能下降,而不是更好。