Unsafe 工具类|学习笔记

简介: 快速学习 Unsafe 工具类

开发者学堂课程【Java 高级编程Unsafe 工具类】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/384


Unsafe 工具类


一、 反射

反射是 java 第一大特点,一旦打开了反射的大门,就可以有了更加丰富的类设计形式。

除了 jvm 本身支持的反射处理之外,在 java 里面也提供有一个 unsafe 类(不安全的操作),这个类的主要特点是可以利用反射来获取对象,并且直接使用底层的 c 加加来代替 gvm 执行,即可以绕过 jvm 的相关的对象的管理机制。

如果一旦使用了 unsafe 类,那么你的项目之中将无法继续使用 gvm 的内存管理机制以及垃圾回收处理。

但是如果要想使用 unsafe 类,首先需要确认一下这个类之中定义的构造方法与常量问题:

构造方法:

Private Unsafe(){}

 

私有常量:

Private static final Unsafe theUnsafe = new Unsafe();

但是需要注意的是,在这个 unsafe 类里面并没有提供 Static 方法,即不能够通过类似于传统的单例设计模式之中提供的样式来进行操作,如果要想获得这个类的对象,就必须利用反射机制来完成。

代码如下:

package cn.mldn.demo;

import java.lang.reflect.Field;

import sun.misc.Unsafe;

public class JavaAPIDemo {

public static void main(String[] args) throws Exception {

Fieldfield= Unsafe.class.getDeclaredField("theUnsafe");field.setAccessible(true);

Unsafe unsafeobject =(u.Field.get(null);

}

}

代码执行正常完成。

在传统的开发之中,一个程序类必须要通过实例化对象后,才可以调用类中的普通方法,尤其是以单例设计模式为例。

 

Singleton.getInstance().print();

class Singleton {

private static final Singleton INSTANCE = new Singleton();

private Singleton() (

System.out.println("***** Singleton英构道******);

public static Singleton getInstance(){

return INSTANCE ;

 

代码相当于利用 unsafe 类绕过了 jvm 的管理机制,可以在没有实例化对象的情况下,获取一 个 singleton 类实例化对象。

Unsafe 最大的特征就是绕过实例化对象管理。

Unsafe 只能够说为我们的开发提供了一些更加方便的处理机制,但是这种操作由于不受 jvm 的操作管理,如果不是必须的情况下,不建议使用,而讲解这个类,主要的目的是帮助大家巩固对于反射的理解,同时也帮助大家在笔试时,如果问到单例设计模式的情况下,也可以追加一个 unsafe,以加深对这一概念的理解,从而获得较好效果。

相关文章
|
5月前
|
安全 Java API
14.JDK底层Unsafe类是个啥东西?
14.JDK底层Unsafe类是个啥东西?
73 0
14.JDK底层Unsafe类是个啥东西?
|
4月前
|
安全 Java 数据安全/隐私保护
深入理解java中Unsafe类及其实现原理
深入理解java中Unsafe类及其实现原理
95 0
|
5月前
|
存储 监控 Java
Java 中的 ThreadLocal:概念、应用及代码示例
Java 中的 ThreadLocal:概念、应用及代码示例
103 0
|
安全 Java 编译器
《Java-SE-第二十九章》之Synchronized原理与JUC常用类
《Java-SE-第二十九章》之Synchronized原理与JUC常用类
|
安全 Java 数据库
java Hashtable及其子类Properties 源码分析(通俗易懂)
java 集合篇章——Hashtable 以及子类 Properties 内容分享。
94 0
java Hashtable及其子类Properties 源码分析(通俗易懂)
java202302java学习笔记第十九天-static-静态方法和工具类
java202302java学习笔记第十九天-static-静态方法和工具类
58 0
java202302java学习笔记第十九天-static-静态方法和工具类
java202302java学习笔记第十九天-static-静态方法和工具类3
java202302java学习笔记第十九天-static-静态方法和工具类3
58 0
java202302java学习笔记第十九天-static-静态方法和工具类3
|
缓存 Java API
Java8原子弹类之LongAdder源码分析
JDK 8开始,针对Long型的原子操作, Java又提供了LongAdder. LongAccumulator; 针对Double类型,Java提供了DoubleAdder、DoubleAccumulator。
90 0
|
Oracle 前端开发 算法
JDK源码(21)-Unsafe
JDK源码(21)-Unsafe
167 0
JDK源码(21)-Unsafe
|
安全 Oracle Java
【JAVA】五分钟, 快速介绍 synchronized 底层实现
今天我们将深入了解 synchronize 底层机制,分析其他锁实现和应用场景,五分钟, 快速介绍 synchronized 底层实现;
180 0