From d87542a9491182de57fcf91e6a245f45d9759733 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Tue, 28 Nov 2023 09:37:00 -0500 Subject: [PATCH] Reduces JC usage by creating arrays with the exact amount of bytes when deserializing events. --- .../main/java/com/vitorpamplona/quartz/events/Event.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt index eb9f8c96d..9102363d0 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -272,13 +272,14 @@ open class Event( private class GossipDeserializer : StdDeserializer(Gossip::class.java) { override fun deserialize(jp: JsonParser, ctxt: DeserializationContext): Gossip { val jsonObject: JsonNode = jp.codec.readTree(jp) + val tagList = jsonObject.get("tags") return Gossip( id = jsonObject.get("id")?.asText()?.intern(), pubKey = jsonObject.get("pubkey")?.asText()?.intern(), createdAt = jsonObject.get("created_at")?.asLong(), kind = jsonObject.get("kind")?.asInt(), - tags = jsonObject.get("tags")?.map { - it.mapNotNull { s -> if (s?.isNull ?: true) null else s.asText().intern() } + tags = tagList.mapTo(ArrayList>(tagList.size())) { + it.mapNotNullTo(ArrayList(it.size())) { s -> if (s.isNull) null else s.asText().intern() } }, content = jsonObject.get("content")?.asText() ) @@ -360,13 +361,14 @@ open class Event( ) fun fromJson(jsonObject: JsonNode): Event { + val tagList = jsonObject.get("tags") return EventFactory.create( id = jsonObject.get("id").asText().intern(), pubKey = jsonObject.get("pubkey").asText().intern(), createdAt = jsonObject.get("created_at").asLong(), kind = jsonObject.get("kind").asInt(), - tags = jsonObject.get("tags").map { - it.mapNotNull { s -> if (s.isNull) null else s.asText().intern() } + tags = tagList.mapTo(ArrayList>(tagList.size())) { + it.mapNotNullTo(ArrayList(it.size())) { s -> if (s.isNull) null else s.asText().intern() } }, content = jsonObject.get("content").asText(), sig = jsonObject.get("sig").asText()