DebugMemoryUntracker.java

com.mojang.blaze3d.platform.DebugMemoryUntracker

信息

  • 全限定名:com.mojang.blaze3d.platform.DebugMemoryUntracker
  • 类型:public class
  • 包:com.mojang.blaze3d.platform
  • 源码路径:src/main/java/com/mojang/blaze3d/platform/DebugMemoryUntracker.java
  • 起始行号:L13
  • 职责:

    TODO

字段/常量

  • UNTRACK
    • 类型: MethodHandle
    • 修饰符: private static final
    • 源码定位: L14
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

public static void untrack(long address) @ L29

  • 方法名:untrack
  • 源码定位:L29
  • 返回类型:void
  • 修饰符:public static

参数:

  • address: long

说明:

TODO

代码

@OnlyIn(Dist.CLIENT)
public class DebugMemoryUntracker {
    private static final @Nullable MethodHandle UNTRACK = GLX.make(() -> {
        try {
            Lookup lookup = MethodHandles.lookup();
            Class<?> debugAllocator = Class.forName("org.lwjgl.system.MemoryManage$DebugAllocator");
            Method reflectionUntrack = debugAllocator.getDeclaredMethod("untrack", long.class);
            reflectionUntrack.setAccessible(true);
            Field allocatorField = Class.forName("org.lwjgl.system.MemoryUtil$LazyInit").getDeclaredField("ALLOCATOR");
            allocatorField.setAccessible(true);
            Object allocator = allocatorField.get(null);
            return debugAllocator.isInstance(allocator) ? lookup.unreflect(reflectionUntrack) : null;
        } catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException | ClassNotFoundException var5) {
            throw new RuntimeException(var5);
        }
    });
 
    public static void untrack(long address) {
        if (UNTRACK != null) {
            try {
                UNTRACK.invoke((long)address);
            } catch (Throwable var3) {
                throw new RuntimeException(var3);
            }
        }
    }
}

引用的其他类

  • GLX
    • 引用位置: 方法调用
    • 关联成员: GLX.make()