< prev index next >

src/java.base/share/classes/java/lang/foreign/SymbolLookup.java

Print this page
@@ -27,11 +27,10 @@
  
  import jdk.internal.access.JavaLangAccess;
  import jdk.internal.access.SharedSecrets;
  import jdk.internal.foreign.MemorySessionImpl;
  import jdk.internal.foreign.Utils;
- import jdk.internal.javac.PreviewFeature;
  import jdk.internal.loader.BuiltinClassLoader;
  import jdk.internal.loader.NativeLibrary;
  import jdk.internal.loader.RawNativeLibraries;
  import jdk.internal.reflect.CallerSensitive;
  import jdk.internal.reflect.Reflection;

@@ -117,13 +116,12 @@
   * Linker nativeLinker = Linker.nativeLinker();
   * SymbolLookup stdlib = nativeLinker.defaultLookup();
   * MemorySegment malloc = stdlib.find("malloc").orElseThrow();
   *}
   *
-  * @since 19
+  * @since 22
   */
- @PreviewFeature(feature=PreviewFeature.Feature.FOREIGN)
  @FunctionalInterface
  public interface SymbolLookup {
  
      /**
       * Returns the address of the symbol with the given name.

@@ -164,11 +162,11 @@
       * current: it reflects all the libraries associated with the relevant class loader, even if they were loaded after
       * this method returned.
       * <p>
       * Libraries associated with a class loader are unloaded when the class loader becomes
       * <a href="../../../java/lang/ref/package.html#reachability">unreachable</a>. The symbol lookup
-      * returned by this method is associated with a fresh {@linkplain MemorySegment.Scope scope} which keeps the caller's
+      * returned by this method is associated with a {@linkplain MemorySegment.Scope scope} which keeps the caller's
       * class loader reachable. Therefore, libraries associated with the caller's class loader are kept loaded
       * (and their symbols available) as long as a loader lookup for that class loader, or any of the segments
       * obtained by it, is reachable.
       * <p>
       * In cases where this method is called from a context where there is no caller frame on the stack

@@ -188,11 +186,11 @@
                  ClassLoader.getSystemClassLoader();
          Arena loaderArena;// builtin loaders never go away
          if ((loader == null || loader instanceof BuiltinClassLoader)) {
              loaderArena = Arena.global();
          } else {
-             MemorySessionImpl session = MemorySessionImpl.heapSession(loader);
+             MemorySessionImpl session = MemorySessionImpl.createHeap(loader);
              loaderArena = session.asArena();
          }
          return name -> {
              Objects.requireNonNull(name);
              if (Utils.containsNullChars(name)) return Optional.empty();

@@ -213,12 +211,11 @@
       * associated with the returned lookup will be unloaded when the provided confined arena is
       * {@linkplain Arena#close() closed}.
       * <p>
       * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
       * Restricted methods are unsafe, and, if used incorrectly, their use might crash
-      * the JVM or, worse, silently result in memory corruption. Thus, clients should refrain from depending on
-      * restricted methods, and use safe and supported functionalities, where possible.
+      * the JVM or, worse, silently result in memory corruption.
       *
       * @implNote The process of resolving a library name is OS-specific. For instance, in a POSIX-compliant OS,
       * the library name is resolved according to the specification of the {@code dlopen} function for that OS.
       * In Windows, the library name is resolved according to the specification of the {@code LoadLibrary} function.
       *

@@ -247,12 +244,11 @@
       * associated with the returned lookup will be unloaded when the provided confined arena is
       * {@linkplain Arena#close() closed}.
       * <p>
       * This method is <a href="package-summary.html#restricted"><em>restricted</em></a>.
       * Restricted methods are unsafe, and, if used incorrectly, their use might crash
-      * the JVM or, worse, silently result in memory corruption. Thus, clients should refrain from depending on
-      * restricted methods, and use safe and supported functionalities, where possible.
+      * the JVM or, worse, silently result in memory corruption.
       *
       * @implNote On Linux, the functionalities provided by this factory method and the returned symbol lookup are
       * implemented using the {@code dlopen}, {@code dlsym} and {@code dlclose} functions.
       * @param path the path of the library in which symbols should be looked up.
       * @param arena the arena associated with symbols obtained from the returned lookup.
< prev index next >