Claude Warren created DATASKETCHES-14:
-----------------------------------------

             Summary: NioBits throws an exception on Java 21.
                 Key: DATASKETCHES-14
                 URL: https://issues.apache.org/jira/browse/DATASKETCHES-14
             Project: Apache Datasketches
          Issue Type: Bug
            Reporter: Claude Warren


When running on Java 21 the NioBits method throws an exception.  This issue is 
noted in the NioBits code where indicates there are 2 methods that  in Java 17 
and later take a long and not an int.

 

It issue is in this code block form NioBits:

 

{{ static {}}
{{    try {}}
{{      isPageAligned = VirtualMachineMemory.getIsPageAligned();}}
{{      maxDBBMemory = VirtualMachineMemory.getMaxDBBMemory();}}{{      
NIO_BITS_CLASS = Class.forName("java.nio.Bits");}}{{      
NIO_BITS_RESERVE_MEMORY_METHOD = NIO_BITS_CLASS}}
{{          .getDeclaredMethod("reserveMemory", long.class, int.class); //JD16 
requires (long, long)}}
{{      NIO_BITS_RESERVE_MEMORY_METHOD.setAccessible(true);}}{{      
NIO_BITS_UNRESERVE_MEMORY_METHOD = NIO_BITS_CLASS}}
{{          .getDeclaredMethod("unreserveMemory", long.class, int.class); 
//JD16 requires (long, long)}}
{{      NIO_BITS_UNRESERVE_MEMORY_METHOD.setAccessible(true);}}{{      final 
Field countField = 
NIO_BITS_CLASS.getDeclaredField(NioBitsFields.COUNT_FIELD_NAME);}}
{{      countField.setAccessible(true);}}
{{      nioBitsCount = (AtomicLong) (countField.get(null));}}{{      final 
Field reservedMemoryField = 
NIO_BITS_CLASS.getDeclaredField(NioBitsFields.RESERVED_MEMORY_FIELD_NAME);}}
{{      reservedMemoryField.setAccessible(true);}}
{{      nioBitsReservedMemory = (AtomicLong) 
(reservedMemoryField.get(null));}}{{      final Field totalCapacityField = 
NIO_BITS_CLASS.getDeclaredField(NioBitsFields.TOTAL_CAPACITY_FIELD_NAME);}}
{{      totalCapacityField.setAccessible(true);}}
{{      nioBitsTotalCapacity = (AtomicLong) (totalCapacityField.get(null));}}{{ 
   } catch (final ClassNotFoundException | NoSuchMethodException |  
IllegalAccessException}}
{{        | IllegalArgumentException | SecurityException |  
NoSuchFieldException e) {}}
{{      throw new RuntimeException("Could not acquire java.nio.Bits class: " + 
e.getClass());}}
{{    }}}
{{{}  }{}}}{{{}{}}}

{{if when NIO_BITS_RESERVE_MEMORY_METHOD and 
}}{{{}NIO_BITS_UNRESERVE_MEMORY_METHOD were discovered we instead looked for 
the function name without the parameters and accept a function definition that 
takes either (long, long) or (long, int) I think this might work.{}}}{{{}{}}}

{{{}The current code base always passes an int as the second parameter so it 
should work with the (long, long) version of the method as well as the (long, 
int).{}}}{{{}{}}}

 



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

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

Reply via email to