码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Unsafe类的使用


    Unsafe类的使用

    Unsafe可用来直接访问系统内存资源并自主管理,在提升Java运行效率、增强Java语言底层操作能力方面起了很大的作用——可以认为,Unsafe类是Java中留下的后门,提供了一些低层次操作,如直接内存访问、线程调度等。

    Unsafe不属于Java标准。 官方并不建议使用Unsafe,并且从JDK 9开始,官方开始去Unsafe!
    相关Issue:https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6852936

    因此,Unsafe类对于项目实战,意义并不大。然而目前业界有很多好用的类库大量使用了Unsafe类,例如
    java.util.concurrent.atomic 包里的一堆类、Netty、Hadoop、Kafka等。所以了解一下还是有好处的。

    不同的JDK版本中,Unsafe类也有区别,例如:

    • 在JDK 8中归属于sun.misc包下;
    • 在JDK 11中归属于sun.misc包或jdk.internal.misc下,其中jdk.internal.misc下的Unsafe类功能更强。(应该是从JDK 9开始的,笔者未亲测)

    快速上手

    import sun.misc.Unsafe;
    import java.lang.reflect.Field;
    
    public class DirectMemoryTest1 {
        private static final int _1MB = 1024 * 1024;
    
        public static void main(String[] args) throws IllegalAccessException {
            //通过反射获取Unsafe类并通过其分配直接内存
            Field unsafeField = Unsafe.class.getDeclaredFields()[0];
            unsafeField.setAccessible(true);
            Unsafe unsafe = (Unsafe) unsafeField.get(null);
            int i = 0;
            while (true) {
                unsafe.allocateMemory(_1MB);
                System.out.println(++i);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    Unsafe类的使用

    详见:

    • https://www.jb51.net/article/140726.htm
    • https://blog.csdn.net/ahilll/article/details/81628215
    • https://www.jianshu.com/p/dd2be4d3b88e

    JDK 11如何使用Unsafe类

    TIPS

    • 再次强调,实际项目中,除非情非得已,尽量不要用Unsafe类,官方不建议使用
    • 从JDK 10开始,Unsafe类的部分功能已经被VarHandle取代,建议用VarHandle
    • 创建一个JDK 11的项目

    • 在项目源码路径下创建module-info.java ,内容如下:

      module unsafe {
        requires jdk.unsupported;
      }
      
      • 1
      • 2
      • 3

      创建后,代码结构如下:

      |____src
      | |____main
      | | |____java
      | | | |____module-info.java
      | | | |____com
      | | | | |____example
      | | | | | |____demo
      | | | | | | |____UnsafePlayer.java
      | | | | | | |____DirectMemoryTest1.java
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
    • 测试代码:

      import sun.misc.Unsafe;
      import java.lang.reflect.Field;
      
      public class DirectMemoryTest1 {
          private static final int _1MB = 1024 * 1024;
      
          public static void main(String[] args) throws IllegalAccessException {
              //通过反射获取Unsafe类并通过其分配直接内存
              Field unsafeField = Unsafe.class.getDeclaredFields()[0];
              unsafeField.setAccessible(true);
              Unsafe unsafe = (Unsafe) unsafeField.get(null);
              int i = 0;
              while (true) {
                  unsafe.allocateMemory(_1MB);
                  System.out.println(++i);
              }
        }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18

    参考文档

    • 一篇看懂Java中的Unsafe类
    • Using sun.misc.Unsafe in Java 9
  • 相关阅读:
    DBC配置SecOC属性
    C语言 const详解
    自定义Kotlin协程调度器
    第十四届蓝桥杯省赛C++ B组(个人经历 + 题解)
    正则表达式匹配html中的图片地址
    Set接口的实现类---TreeSet
    elment-plus图标input上面带的图标为什么不显示
    docker——知识点回顾(2)
    唯品会关键词搜索API接口(item_search-按关键字搜索唯品会商品API接口),唯品会API接口
    Android12窗口模糊(二)高斯模糊API源码解析
  • 原文地址:https://blog.csdn.net/Little_fxc/article/details/125543369
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号