You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Maksim Zhuravkov (Jira)" <ji...@apache.org> on 2024/03/26 10:16:00 UTC

[jira] [Created] (IGNITE-21847) Marshallers. Remove unnecessary boxing introduced in IGNITE-16088

Maksim Zhuravkov created IGNITE-21847:
-----------------------------------------

             Summary: Marshallers. Remove unnecessary boxing introduced in IGNITE-16088
                 Key: IGNITE-21847
                 URL: https://issues.apache.org/jira/browse/IGNITE-21847
             Project: Ignite
          Issue Type: Improvement
          Components: sql
            Reporter: Maksim Zhuravkov


Patch IGNITE-16088 introduced unnecessary boxing by replacing direct calls to varhandles with indirection with generics.

Example:
{code:java}
public class Reader {

  private VarHandle h;

  public int readInt(Object src) {
    return (int) h.get(src);
  }

  public <T> T get(Object src) {
    return (T) h.get(src);
  }

  public int readIntGen(Object src) {
    return (int) get(src);
  }
}
{code}

{code}
# javac Reader.java
# javap Reader.class

public int readInt(java.lang.Object);
    descriptor: (Ljava/lang/Object;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: getfield      #7                  // Field h:Ljava/lang/invoke/VarHandle;
         4: aload_1
         5: invokevirtual #13                 // Method java/lang/invoke/VarHandle.get:(Ljava/lang/Object;)I
         8: ireturn
      LineNumberTable:
        line 8: 0

  public <T extends java.lang.Object> T get(java.lang.Object);
    descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: getfield      #7                  // Field h:Ljava/lang/invoke/VarHandle;
         4: aload_1
         5: invokevirtual #19                 // Method java/lang/invoke/VarHandle.get:(Ljava/lang/Object;)Ljava/lang/Object;
         8: areturn
      LineNumberTable:
        line 12: 0
    Signature: #33                          // <T:Ljava/lang/Object;>(Ljava/lang/Object;)TT;

  public int readIntGen(java.lang.Object);
    descriptor: (Ljava/lang/Object;)I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: aload_0
         1: aload_1
         2: invokevirtual #22                 // Method get:(Ljava/lang/Object;)Ljava/lang/Object;
         5: checkcast     #23                 // class java/lang/Integer
         8: invokevirtual #25                 // Method java/lang/Integer.intValue:()I
        11: ireturn
      LineNumberTable:
        line 16: 0
}
{code}





--
This message was sent by Atlassian Jira
(v8.20.10#820010)