如题: Unsafe类能否获取一个独立对象的offset(这个对象不是某个其他对象的field)? 比如这个普通类User, 有一个对象:
@Data
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
public static void main(String[] args) {
// 1. 一个普通的独立User对象
User u = new User("u1", 20);
// 2. 获取Unsafe对象
// 通过反射得到theUnsafe对应的Field对象
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true); // 设置该Field为可访问
Unsafe unsafe = (Unsafe) field.get(null); // 通过Field得到对应的对象,传入null是因为该Field为static
// 3. ? 有没有什么方式获取到User的u对象的内存地址(offset)?
}
- 能否获取到u对象的内存地址?
- 或者, 有没有什么办法可以直接把u传入一个方法, 永久改变他的引用值?
Unsafe应该不行,好像没有提供获取对象地址的api,可以用c/c++试试,不过不同虚拟机实现可能也有差别。
这应该是个伪需求,u = new User 就可以改变引用值了