VarHandle package java.lang.invoke; 可以直接进行内存操作 概述:按理说jdk8的unsafe类就够用了,估计是因为不安全的原因,到jdk9出了个varhandle类,到jdk21的时候出了Arena和MemorySegment, 基本就可以取代unsafe类的使用了。这里我主要讲varhandle类,因为大部分人升级jdk顶多升到jdk17。 VarHandle 本身不能直接创建对象,它主要用于操作已经存在的对象。要使用 VarHandle,你需要先有一个对象实例,然后通过 MethodHandles.lookup().findVarHandle() 方法获取该对象的 VarHandle。 varhandle是Java 9中引入的一个新特性,用于更高效地访问对象字段。它提供了一种低级别的、直接的方式来操作对象的字段,而不需 要通过反射。varhandle的主要优点是性能更好,因为它可以直接访问内存,而不需要在Java堆和本地堆之间复制数据。 package org.cyl.spaceutils.varhandle; import org.cyl.spaceutils.pojo.Human; import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; public class VarHandleTest { public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { Human human=new Human(); VarHandle xvarHandle = MethodHandles.lookup().findVarHandle(Human.class, "age", int.class); VarHandle yvarHandle = MethodHandles.lookup().findVarHandle(Human.class, "name", String.class); xvarHandle.set(human,18); yvarHandle.set(human,"zhangsan"); System.out.println("name:"+yvarHandle.get(human)); System.out.println("age:"+xvarHandle.get(human)); System.out.println(human); } }