H3Core.nonZeroLongArrayToList takes too much memory
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Idoneità per principianti
- 45/100
Direzione di ricerca
Inizia in src/main/java/com/uber/h3core/H3Core.java, nella preparazione del risultato di polyfill intorno alla riga 691 e in nonZeroLongArrayToList intorno alle righe 1242-1254. Rielabora la conversione in modo che il risultato preparato non-zero non richieda una ArrayList intermedia sovradimensionata, quindi verifica che polyfillAddress conservi i valori esadecimali generati senza il fallimento per esaurimento della memoria segnalato.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Trying to polyfill big area with resolution 11. I can see that internally algorithm prepared result https://github.com/uber/h3-java/blob/3a1e9bc9bcd1d62e9e8d4361230fe47bb5395242/src/main/java/com/uber/h3core/H3Core.java#L691 but when it tries to copy it to List it gets out of memory on this line:
https://github.com/uber/h3-java/blob/a500880eef493dca44903bf7ad0e249aed5b85b1/src/main/java/com/uber/h3core/H3Core.java#L1242-L1254
As you can see in the stacktrace, result is ready, but it just tries to copy it to ArrayList:

Memory, the arrow shows to the place when nonZeroLongArrayToList started :

Scala code:
import scala.collection.JavaConverters._
import java.util.{Collections => JCollections}
import beam.utils.ProfilingUtils
import com.uber.h3core.AreaUnit
import com.uber.h3core.util.GeoCoord
def main(args: Array[String]): Unit = {
val h3Core = com.uber.h3core.H3Core.newInstance
val xMin = -106.645646
val xMax = -93.508292
val yMin = 25.837377
val yMax = 36.500704
val rectangle = java.util.Arrays.asList(
new GeoCoord(yMin, xMin),
new GeoCoord(yMax, xMin),
new GeoCoord(yMax, xMax),
new GeoCoord(yMin, xMax),
)
val holes = java.util.Collections.emptyList[java.util.List[GeoCoord]]()
val resolution = 11
val hexes = h3Core.polyfillAddress(rectangle, holes, resolution)
println(s"Generated ${hexes.size()}")
}
The easiest fix is just to get the total number of non-zero elements and allocate an array with that size and copy elements over. Other solution can be moving all zero elements in the original array to the end of the array and wrap it by ArrayList via Arrays.asList(array).subList(index, IDX_OF_FIRST_ZERO);. I can create PR if this sounds good.
Thanks.
- Lingua principale
- Java
- Stelle
- 333
- Fork
- 68
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di uber/h3-java
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 55/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 42/100
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 48/100
Tutte le issue di uber/h3-java
Issue simili
-
executions.Query — startDate and timeRange filters are sent with inverted comparison operators Apertaarea/plugin
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
kestra-io/plugin-kestra#190 ·
-
litertlm-android AAR ships no consumer ProGuard rules → "mid == null" SIGABRT in minified apps Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
google-ai-edge/LiteRT-LM#3739 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
integra-team-red/meet-map#249 ·
-
[Studio][Bug] Cancelled create-user dialog keeps the password and admin switch for the next attempt Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
apache/rocketmq-dashboard#5064 ·
-
Consent portal: creating a duplicate Purpose shows a generic error instead of "already exists" Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
wso2/dpdp-accelerator#287 ·