srowen commented on a change in pull request #34846:
URL: https://github.com/apache/spark/pull/34846#discussion_r767166912



##########
File path: core/src/main/scala/org/apache/spark/memory/MemoryManager.scala
##########
@@ -255,7 +256,15 @@ private[spark] abstract class MemoryManager(
     }
     val size = ByteArrayMethods.nextPowerOf2(maxTungstenMemory / cores / 
safetyFactor)
     val default = math.min(maxPageSize, math.max(minPageSize, size))
-    conf.get(BUFFER_PAGESIZE).getOrElse(default)
+    val sizeAsBytes = conf.get(BUFFER_PAGESIZE).getOrElse(default)
+    if (conf.get(MEMORY_ONHEAP_PAGESIZE_OPTIMIZE_ENABLED) &&
+      tungstenMemoryMode == MemoryMode.ON_HEAP &&
+      sizeAsBytes % (1024 * 1024) == 0 &&
+      Utils.isHumongousAllocation(sizeAsBytes)) {
+      sizeAsBytes - Platform.LONG_ARRAY_OFFSET

Review comment:
       Yes. I think the current logic is good, just wondering if it matter much 
if we do it in all cases. Maybe it's bad for small allocations, but is the 
offset ever significant relative to the allocation size I wonder? probably not. 
I wonder if there are future cases, different GCs, that we're not checking here 
that also need this treatment




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to