/* * Copyright 2016 Gil Tene * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * <p> * This package captures hints that may be used by some * runtimes to improve code performance. It is intended to provide a portable * means for using performance hinting APIs across Java and JDK versions, * such that calling code can avoid maintaining version-specific sources * for various JDK or Java version capabilities. * </p> * <p> * All the features supported by this package are (by definition) hints. * A no-op implementation of a hint is always considered valid. * </p> * <p> * When executing on Java versions for which corresponding capabilities exist * and are specified in the Java version spec, the hint implementations in this * package will attempt to use the appropriate JDK calls. * </p> * <p> * Some JDKs may choose to "intrinsify" some APIs in this package to e.g. * provide runtime support for certain hints on java versions that do not * yet have specified support for those capabilities. * </p> * <p> * A good example of the purpose of this package and an example of how it may * be used can be found with * {@link org.agrona.hints.ThreadHints#onSpinWait ThreadHints.onSpinWait()}: * Per JEP285, it is anticipated that Java SE 9 will include a <code>Thread.onSpinWait()</code> * method with specified behavior identical to * {@link org.agrona.hints.ThreadHints#onSpinWait ThreadHints.onSpinWait()}. * However, earlier Java SE versions do not include this behavior, forcing code * that wants to make use of this hinting capability to be written and * maintained separately when targeting Java versions before and after Java SE 9. * </p> * <p> * The implementation * of {@link org.agrona.hints.ThreadHints#onSpinWait ThreadHints.onSpinWait()} * resolves this problem by calling <code>Thread.onSpinWait()</code> if it exists, * and doing nothing if it does not. This allows code that wants to include spin wait * hinting to remain portable across Java versions, without needing separate * implementations for versions prior to and following Java SE 9. The mechanism * used to conditionally make this call was specifically designed and tested for * efficient inlining and by common JVMs, such that there is no extra no overhead * associated with making the hint call: in JIT'ted code it becomes either an nop * or an efficient, inlined intrinsic. * </p> * <p> * In addition, JDKs that wish to introduce support for newer hinting capabilities * in their implementations of older Java SE versions can do so by "inrinsifying" * associated org.agrona.hints classes and methods. Code that makes use of * org.agrona.hints hinting methods will then benefit from potential * performance improvements even on prior java SE versions. E.g. the * example onSpinWait capability discussed above can be added in such a way to * Java SE 6, 7, 8 by JDKs who wish to do so. */ package org.agrona.hints;