Opened 4 years ago

Last modified 4 years ago

#22139 closed defect

[PATCH] Significantly reduce allocations in NodeElement — at Version 2

Reported by: taylor.smock Owned by: team
Priority: normal Milestone: 22.06
Component: Core Version:
Keywords: performance Cc:

Description (last modified by taylor.smock)

  • src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java

    diff --git a/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java b/src/org/openstreetmap/josm/gui/mappaint/styleelement/NodeElement.java
    index 69b05c84b6..2b6852d7ba 100644
    a b import java.awt.Rectangle;  
    77import java.awt.Stroke;
    88import java.util.Objects;
    99import java.util.Optional;
    10 import java.util.stream.IntStream;
    1110
    1211import org.openstreetmap.josm.data.osm.INode;
    1312import org.openstreetmap.josm.data.osm.IPrimitive;
    public class NodeElement extends StyleElement {  
    350349        }
    351350    }
    352351
    353     private static int max(int... elements) {
    354         return IntStream.of(elements).max().orElseThrow(IllegalStateException::new);
     352    private static int max(int a, int b, int c, int d) {
     353        // Profile before switching to a stream/int[] array
     354        // This was 66% give or take for painting nodes in terms of memory allocations
     355        // and was ~17% of the CPU allocations. By not using a vararg method call, we avoid
     356        // the creation of an array. By avoiding both streams and arrays, the cost for this method is negligible.
     357        // This means that this saves about 7% of the CPU cycles during map paint, and about 20%
     358        // of the memory allocations during map paint.
     359        return Math.max(a, Math.max(b, Math.max(c, d)));
    355360    }
    356361
    357362    @Override

Change History (2)

comment:1 by taylor.smock, 4 years ago

Description: modified (diff)

comment:2 by taylor.smock, 4 years ago

Description: modified (diff)
Summary: [PATCH] Significantly reduce allocations in NodeElement and StyledMapRenderer[PATCH] Significantly reduce allocations in NodeElement
Note: See TracTickets for help on using tickets.