Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
Snappy-Java Source Code
Snappy-Java is a Java port of the "snappy", a fast C++ compresser/decompresser developed by Google.
Snappy-Java Source Code files are provided in the source packge (snappy-java-1.1.8.4-sources.jar). You can download it at Snappy Maven Website.
You can also browse Snappy-Java Source Code below:
✍: FYIcenter.com
⏎ org/xerial/snappy/pool/DirectByteBuffers.java
package org.xerial.snappy.pool; import static java.lang.invoke.MethodHandles.constant; import static java.lang.invoke.MethodHandles.dropArguments; import static java.lang.invoke.MethodHandles.filterReturnValue; import static java.lang.invoke.MethodHandles.guardWithTest; import static java.lang.invoke.MethodHandles.lookup; import static java.lang.invoke.MethodType.methodType; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles.Lookup; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.nio.ByteBuffer; import java.security.AccessController; import java.security.PrivilegedExceptionAction; import java.util.logging.Level; import java.util.logging.Logger; /** * Utility to facilitate disposing of direct byte buffer instances. */ final class DirectByteBuffers { /** * Sun specific mechanisms to clean up resources associated with direct byte buffers. */ @SuppressWarnings("unchecked") static final Class<? extends ByteBuffer> DIRECT_BUFFER_CLAZZ = (Class<? extends ByteBuffer>) lookupClassQuietly("java.nio.DirectByteBuffer"); static final MethodHandle CLEAN_HANDLE; static { // this approach is based off that used by apache lucene and documented here: https://issues.apache.org/jira/browse/LUCENE-6989 // and https://github.com/apache/lucene-solr/blob/7e03427fa14a024ce257babcb8362d2451941e21/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java MethodHandle cleanHandle = null; try { final PrivilegedExceptionAction<MethodHandle> action = new PrivilegedExceptionAction<MethodHandle>() { @Override public MethodHandle run() throws Exception { MethodHandle handle = null; if (DIRECT_BUFFER_CLAZZ != null) { final Lookup lookup = lookup(); try { // sun.misc.Unsafe unmapping (Java 9+) final Class<?> unsafeClass = Class.forName("sun.misc.Unsafe"); // first check if Unsafe has the right method, otherwise we can give up // without doing any security critical stuff: final MethodHandle unmapper = lookup.findVirtual(unsafeClass, "invokeCleaner", methodType(void.class, ByteBuffer.class)); // fetch the unsafe instance and bind it to the virtual MH: final Field f = unsafeClass.getDeclaredField("theUnsafe"); f.setAccessible(true); final Object theUnsafe = f.get(null); handle = unmapper.bindTo(theUnsafe); } catch (Exception e) { Logger.getLogger(DirectByteBuffers.class.getName()).log(Level.FINE, "unable to use java 9 Unsafe.invokeCleaner", e); // sun.misc.Cleaner unmapping (Java 8 and older) final Method m = DIRECT_BUFFER_CLAZZ.getMethod("cleaner"); m.setAccessible(true); final MethodHandle directBufferCleanerMethod = lookup.unreflect(m); final Class<?> cleanerClass = directBufferCleanerMethod.type().returnType(); /* * "Compile" a MethodHandle that basically is equivalent to the following code: * void unmapper(ByteBuffer byteBuffer) * { * sun.misc.Cleaner cleaner = ((java.nio.DirectByteBuffer) byteBuffer).cleaner(); * if (nonNull(cleaner)) * { * cleaner.clean(); * } * else * { * // the noop is needed because MethodHandles#guardWithTest always needs ELSE * noop(cleaner); * } * } */ final MethodHandle cleanMethod = lookup.findVirtual(cleanerClass, "clean", methodType(void.class)); final MethodHandle nonNullTest = lookup.findStatic(DirectByteBuffers.class, "nonNull", methodType(boolean.class, Object.class)).asType(methodType(boolean.class, cleanerClass)); final MethodHandle noop = dropArguments(constant(Void.class, null).asType(methodType(void.class)), 0, cleanerClass); handle = filterReturnValue(directBufferCleanerMethod, guardWithTest(nonNullTest, cleanMethod, noop)).asType(methodType(void.class, ByteBuffer.class)); } } return handle; } }; cleanHandle = AccessController.doPrivileged(action); } catch (Throwable t) { Logger.getLogger(DirectByteBuffers.class.getName()).log(Level.FINE, "Exception occurred attempting to lookup Sun specific DirectByteBuffer cleaner classes.", t); } CLEAN_HANDLE = cleanHandle; } private static Class<?> lookupClassQuietly(String name) { try { return DirectByteBuffers.class.getClassLoader().loadClass(name); } catch (Throwable t) { Logger.getLogger(DirectByteBuffers.class.getName()).log(Level.FINE, "Did not find requested class: " + name, t); } return null; } static boolean nonNull(Object o) { return o != null; } /** * Provides jvm implementation specific operation to aggressively release resources associated with <i>buffer</i>. * * @param buffer The {@code ByteBuffer} to release. Must not be {@code null}. Must be {@link ByteBuffer#isDirect() direct}. */ public static void releaseDirectByteBuffer(final ByteBuffer buffer) { assert buffer != null && buffer.isDirect(); if (CLEAN_HANDLE != null && DIRECT_BUFFER_CLAZZ.isInstance(buffer)) { try { final PrivilegedExceptionAction<Void> pea = new PrivilegedExceptionAction<Void>() { @Override public Void run() throws Exception { try { CLEAN_HANDLE.invokeExact(buffer); } catch (Exception e) { throw e; } catch (Throwable t) { //this will be an error throw new RuntimeException(t); } return null; } }; AccessController.doPrivileged(pea); } catch (Throwable t) { Logger.getLogger(DirectByteBuffers.class.getName()).log(Level.FINE, "Exception occurred attempting to clean up Sun specific DirectByteBuffer.", t); } } } }
⏎ org/xerial/snappy/pool/DirectByteBuffers.java
Or download all of them as a single archive file:
File name: snappy-java-1.1.8.4-sources.jar File size: 1962098 bytes Release date: 2021-01-25 Download
⇒ Download and Install Snappy-Java Binary Package
2021-07-13, 15288👍, 0💬
Popular Posts:
commons-io-1.4.jar is the JAR file for Commons IO 1.4, which is a library of utilities to assist wit...
commons-collections4-4.4 -sources.jaris the source JAR file for Apache Commons Collections 4.2, whic...
SLF4J API is a simple API that allows to plug in any desired logging library at deployment time. Her...
How to download and install JDK (Java Development Kit) 1.3? If you want to write Java applications, ...
Apache Log4j API provides the interface that applications should code to and provides the adapter co...