当前位置: 首页 > 面试题库 >

为什么存在sun.misc.Unsafe,如何在现实世界中使用它?

赵珂
2023-03-14
问题内容

前几天,我遇到了sun.misc.Unsafe软件包,并对它的功能感到惊讶。

当然,该类是未记录的,但是我想知道是否有充分的理由使用它。在需要使用它的地方会出现什么情况?在现实世界中如何使用它?

此外,如果您确实需要它,这是否表示您的设计可能存在问题?

为什么Java甚至包括此类?


问题答案:

例子

  1. VM“化身”。即无锁哈希表中使用的CAS(比较和交换),例如:sun.misc.Unsafe.compareAndSwapInt,它可以对包含针对CAS的特殊指令的本机代码进行真正的JNI调用

  2. 在此处阅读有关CAS的更多信息http://en.wikipedia.org/wiki/Compare-and-swap

  3. 主机VM的sun.misc.Unsafe功能可用于分配未初始化的对象,然后将构造函数调用解释为任何其他方法调用。

  4. 可以从本机地址跟踪数据。可以使用java.lang.Unsafe类检索对象的内存地址,并通过不安全的get / put方法直接在其字段上进行操作!

  5. JVM的编译时间优化。使用“魔术”的高性能VM,需要低级操作。例如:http : //en.wikipedia.org/wiki/Jikes_RVM

  6. 分配内存sun.misc.Unsafe.allocateMemory例如:-调用ByteBuffer.allocateDirect时,DirectByteBuffer构造函数在内部调用它

  7. 跟踪调用堆栈并重播由sun.misc实例化的值。不安全,对检测很有用

  8. sun.misc.Unsafe.arrayBaseOffset和arrayIndexScale可用于开发arraylet,该技术可有效地将大型数组分解为较小的对象,从而限制了对大型对象进行扫描,更新或移动操作的实时成本

  9. http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java



 类似资料:
  • 问题内容: 我最近一直在看Zookeeper,想知道当前是否有人在使用它,以及他们专门用于存储什么。 最常见的用例是用于配置信息,但是要存储哪种数据和存储多少数据? 问题答案: DOSGi 的Apache CXF实现使用zookeeper为其服务注册存储库。各个容器具有一个分布式软件(dsw)捆绑包,该捆绑包监听所有服务事件以及服务状态更改时的状态,该属性具有指示分发的属性。dsw与发现包进行通信

  • 问题内容: 建议在处理现实世界的货币值时,使用BigDecimal而不是Double。但是我没有令人信服的解释,只是“通常是这样做的”。 您能谈谈这个问题吗? 问题答案: 这称为精度损失,在处理非常大的数字或非常小的数字时非常明显。在许多情况下,带小数的十进制数字的二进制表示形式是近似值,而不是绝对值。要了解为什么需要阅读二进制形式的浮点数表示形式。这是链接:http : //en.wikiped

  • 问题内容: 作为Java编程领域的新手,这个问题一直困扰着我。我首先相信所有Java文件都会被压缩并随后运行,但是我很快意识到情况并非总是如此。有人可以向我解释我们如何将Java应用程序实际上编织到日常生活的真实产品中吗? TL; DR:我们如何实现实际使用的代码? 问题答案: 这取决于应用程序。有许多选项,取决于您希望用户如何使用您的应用程序。通常将其包装为罐子或专用罐子(战争,耳朵)。 从理论

  • 问题内容: 我来自静态语言的背景。有人可以(理想情况下通过示例)解释 使用 kwargs优于命名参数 的现实 优势** 吗? 在我看来,这似乎只会使函数调用变得更加模糊。谢谢。 问题答案: 实际示例: 装饰器-它们通常是通用的,因此您不能预先指定参数: 您想使用未知数量的关键字参数进行魔术操作的地方。Django的ORM可以做到这一点,例如:

  • 问题内容: 我只是对JMS和Apache ActiveMQ有所了解。并且想知道这里的人们将JMS或类似的消息队列技术用于什么吗? 问题答案: JMS(ActiveMQ是JMS代理实现)可以用作允许异步请求处理的机制。您可能希望执行此操作,因为请求需要很长时间才能完成,或者因为实际的请求可能涉及多个方面。使用它的另一个原因是允许多个客户端(可能以不同的语言编写)通过JMS访问信息。ActiveMQ是

  • 我曾看到一些人这样评论单例模式是一种反模式。我想知道为什么?