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]