在微软开始推出 Windows 10 May 2020更新后,这家科技巨头声称它已经找到了一种方法来修复基于Chromium的浏览器的RAM使用。 该修复是 "Segment Heap",它现在包含在Windows 10中,它应该有助于减少一些Win32桌面应用程序的内存使用,如Google Chrome和Edge。
Segment Heap是一项技术性的底层改进,通过 “现代堆的实现方式 ”降低了应用程序的整体内存使用量。换句话说,Segment Heap是开发者需要在他们的应用中使用的东西,微软已经在其Chromium Edge中使用了这个功能。
微软的内部测试记录显示,Edge浏览器的内存使用量减少了27%,如果谷歌能够实现这一功能,你也可以期待Chrome浏览器有一些改善。
根据外媒在今年早些时候发现的Chromium commit,谷歌也打算在Chrome中采用这一功能。不过,谷歌后来澄清说,它对微软提出的节省RAM的修复措施不会在未来的Chrome版本中启用,包括85版本。谷歌表示,Segment Heap确实减少了他们浏览器的RAM使用量,但最终也导致了性能的退步,包括CPU使用率高。
到目前为止,谷歌一直使用.exe清单的方法来启用Segment Heap,这确实节省了一些内存,但却浪费了CPU时间。“节省最多来自于浏览器和网络进程,而成本主要来自于渲染器进程。”谷歌表示。
谷歌新的测试数据表明,如果微软同意在 Windows 中添加一个函数,设置或清除ntdll.dll中RtlpHpHeapFeatures中的 "segment-heap-enabled "位,那么使用segment heap而不出现性能退步是相当容易的。
通过代码检查可以清楚地看到,在HeapCreate和RtlCreateHeap中添加标志来强制启用或强制禁用segment hea也很容易。这些方法可以很好地与manifest配合使用,而manifest本身太不灵活,不是一个完整的解决方案。
Google的高级开发者也在Github上提交了一个正式的帖子,寻求微软协助实现这两个标志。
HEAP_ENABLE_SEGMENT_HEAP--创建一个segment heap而不是NT堆。
HEAP_DISABLE_SEGMENT_HEAP--创建一个NT堆而不是segment heap,即使在应用程序清单中请求了segment heap。
“这些标志将对所有基于Chromium的浏览器有用,”谷歌开发者指出。
谷歌仍在试验Segment Heap,微软也可以在谷歌进行更多测试的同时帮助谷歌。未来当有办法成功实现这个功能,或者微软跳出自己的修复方法时,谷歌会重新考虑对这个功能的支持。