private static void ensureJava9Plus() { if (!Jvm.isJava9Plus()) { throw new UnsupportedOperationException("This method is only supported on Java9+ runtimes"); } }
private static void ensureJava9Plus() { if (!Jvm.isJava9Plus()) { throw new UnsupportedOperationException("This method is only supported on Java9+ runtimes"); } }
static boolean isFastJava8IO() { boolean fastJava8IO = Boolean.getBoolean("fastJava8IO") && !Jvm.isJava9Plus() && OS.isLinux(); if (fastJava8IO) System.out.println("FastJava8IO: " + fastJava8IO); return fastJava8IO; }
static boolean isFastJava8IO() { boolean fastJava8IO = Boolean.getBoolean("fastJava8IO") && !Jvm.isJava9Plus() && OS.isLinux(); if (fastJava8IO) System.out.println("FastJava8IO: " + fastJava8IO); return fastJava8IO; }
public static char[] extractChars(StringBuilder sb) { if (Jvm.isJava9Plus()) { final char[] data = new char[sb.length()]; sb.getChars(0, sb.length(), data, 0); return data; } return OS.memory().getObject(sb, SB_VALUE_OFFSET); }
public static char[] extractChars(StringBuilder sb) { if (Jvm.isJava9Plus()) { final char[] data = new char[sb.length()]; sb.getChars(0, sb.length(), data, 0); return data; } return OS.memory().getObject(sb, SB_VALUE_OFFSET); }
public static char[] extractChars(@NotNull String s) { if (Jvm.isJava9Plus()) { return s.toCharArray(); } return OS.memory().getObject(s, S_VALUE_OFFSET); }
public static char[] extractChars(@NotNull String s) { if (Jvm.isJava9Plus()) { return s.toCharArray(); } return OS.memory().getObject(s, S_VALUE_OFFSET); }
@NotNull public static String newString(@NotNull char[] chars) { if (Jvm.isJava9Plus()) { return new String(chars); } //noinspection RedundantStringConstructorCall @NotNull String str = new String(); try { S_VALUE.set(str, chars); if (S_COUNT_OFFSET > -1) OS.memory().writeInt(str, S_COUNT_OFFSET, chars.length); return str; } catch (Exception e) { throw new AssertionError(e); } }
@NotNull public static String newString(@NotNull char[] chars) { if (Jvm.isJava9Plus()) { return new String(chars); } //noinspection RedundantStringConstructorCall @NotNull String str = new String(); try { S_VALUE.set(str, chars); if (S_COUNT_OFFSET > -1) OS.memory().writeInt(str, S_COUNT_OFFSET, chars.length); return str; } catch (Exception e) { throw new AssertionError(e); } }
@Override public void clean(final ByteBuffer buffer) { try { final Method cleanerMethod; cleanerMethod = DirectBuffer.class. getDeclaredMethod("cleaner"); Jvm.setAccessible(cleanerMethod); final Object cleaner = cleanerMethod.invoke(buffer); final String cleanerClassname = Jvm.isJava9Plus() ? JDK9_CLEANER_CLASS_NAME : JDK8_CLEANER_CLASS_NAME; final Method cleanMethod = Jvm.getMethod(Class.forName(cleanerClassname), "clean"); cleanMethod.invoke(cleaner); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) { LOGGER.warn("Failed to clean buffer", e); } }
@Override public void clean(final ByteBuffer buffer) { try { final Method cleanerMethod; cleanerMethod = DirectBuffer.class. getDeclaredMethod("cleaner"); Jvm.setAccessible(cleanerMethod); final Object cleaner = cleanerMethod.invoke(buffer); final String cleanerClassname = Jvm.isJava9Plus() ? JDK9_CLEANER_CLASS_NAME : JDK8_CLEANER_CLASS_NAME; final Method cleanMethod = Jvm.getMethod(Class.forName(cleanerClassname), "clean"); cleanMethod.invoke(cleaner); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) { LOGGER.warn("Failed to clean buffer", e); } }
public static long hash64(@NotNull String s) { long hash = 0; if (Jvm.isJava9Plus()) { final byte[] bytes = StringUtils.extractBytes(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + bytes[i]; } else { final char[] chars = StringUtils.extractChars(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + chars[i]; } return agitate(hash); }
@ForceInline public static boolean isEqual(@Nullable StringBuilder s, @Nullable CharSequence cs) { if (s == cs) return true; if (s == null) return false; if (cs == null) return false; int length = cs.length(); if (s.length() != length) return false; if (Jvm.isJava9Plus()) { for (int i = 0; i < length; i++) // This is not as fast as it could be. if (s.charAt(i) != cs.charAt(i)) return false; return true; } else { char[] chars = StringUtils.extractChars(s); for (int i = 0; i < length; i++) if (chars[i] != cs.charAt(i)) return false; return true; } }
public static long hash64(@NotNull String s) { long hash = 0; if (Jvm.isJava9Plus()) { final byte[] bytes = StringUtils.extractBytes(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + bytes[i]; } else { final char[] chars = StringUtils.extractChars(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + chars[i]; } return agitate(hash); }
public static long hash64(@NotNull StringBuilder s) { long hash = 0; if (Jvm.isJava9Plus()) { final byte[] bytes = StringUtils.extractBytes(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + bytes[i]; } else { final char[] chars = StringUtils.extractChars(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + chars[i]; } return agitate(hash); }
public static long hash64(@NotNull StringBuilder s) { long hash = 0; if (Jvm.isJava9Plus()) { final byte[] bytes = StringUtils.extractBytes(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + bytes[i]; } else { final char[] chars = StringUtils.extractChars(s); for (int i = 0, len = s.length(); i < len; i++) hash = hash * 841248317 + chars[i]; } return agitate(hash); }
protected MappedFile(@NotNull File file, @NotNull RandomAccessFile raf, long chunkSize, long overlapSize, long capacity, boolean readOnly) { this.file = file; this.raf = raf; this.fileChannel = raf.getChannel(); this.chunkSize = OS.mapAlign(chunkSize); this.overlapSize = overlapSize > 0 && overlapSize < 64 << 10 ? chunkSize : OS.mapAlign(overlapSize); this.capacity = capacity; this.readOnly = readOnly; if (Jvm.isJava9Plus()) doNotCloseOnInterrupt9(this.fileChannel); else doNotCloseOnInterrupt(this.fileChannel); assert registerMappedFile(this); }
@Override @NotNull public VanillaBytes append(@NotNull CharSequence str, int start, int end) throws IndexOutOfBoundsException { try { if (isDirectMemory()) { if (str instanceof BytesStore) { write((BytesStore) str, (long) start, end - start); return this; } if (str instanceof String) { if (Jvm.isJava9Plus()) { byte coder = StringUtils.getStringCoder((String) str); appendUtf8(StringUtils.extractBytes((String) str), start, end - start, coder); } else { appendUtf8(StringUtils.extractChars((String) str), start, end - start); } return this; } } super.append(str, start, end); return this; } catch (Exception e) { throw new IndexOutOfBoundsException(e.toString()); } }
public static void parse8bit1(@org.jetbrains.annotations.NotNull @NotNull StreamingDataInput bytes, @org.jetbrains.annotations.NotNull @NotNull StringBuilder sb, int utflen) { assert bytes.readRemaining() >= utflen; sb.ensureCapacity(utflen); if (Jvm.isJava9Plus()) { byte[] sbBytes = extractBytes(sb); for (int count = 0; count < utflen; count++) { int c = bytes.readUnsignedByte(); sbBytes[count] = (byte) c; } } else { char[] chars = StringUtils.extractChars(sb); for (int count = 0; count < utflen; count++) { int c = bytes.readUnsignedByte(); chars[count] = (char) c; } } StringUtils.setLength(sb, utflen); }