草庐IT

unsafe-perm

全部标签

java - sun.misc.Unsafe 是否在 JDK9 中公开?

我刚刚尝试了JDK9并发现sun.misc.Unsafe现在不包含本地方法,而是将它们委托(delegate)给一些jdk.internal。misc.Unsafe,例如:@ForceInlinepublicintgetInt(Objecto,longoffset){returntheInternalUnsafe.getInt(o,offset);}反过来,最新的看起来实际上像旧的sun.misc.Unsafe,但现在这些方法用一些注释进行了注释:@HotSpotIntrinsicCandidatepublicnativevoidputObject(Objecto,longoffset

java - 为 Unsafe.putOrdered*() 的发布实现获取?

您认为在Java中实现发布/获取对的获取部分的最佳正确方法是什么?我正在尝试使用经典的发布/获取语义(没有StoreLoad并且没有跨线程的顺序一致性)对我的应用程序中的一些操作进行建模。有几种方法可以在JDK中实现大致相当于商店发布的效果。java.util.concurrent.Atomic*.lazySet()和底层sun.misc.Unsafe.putOrdered*()是最常被引用的方法。但是,没有明显的方法来实现加载获取。允许lazySet()的JDKAPI大多在内部使用volatile变量,因此它们的存储发布与易变加载配对。从理论上讲,volatile加载应该比加载获取更

java - 使用 Unsafe.getUnsafe().throwException 抛出异常

我在java.lang.Class#newInstance0中发现了一些有趣的代码://Runconstructortry{returntmpConstructor.newInstance((Object[])null);}catch(InvocationTargetExceptione){Unsafe.getUnsafe().throwException(e.getTargetException());//Notreachedreturnnull;}查看Unsafe.getUnsafe().throwException语句。看起来一个已检查的异常是从一个没有声明要抛出的方法中抛出的!

java - 为什么 JNI 调用本地方法比 sun.misc.Unsafe 中的类似方法慢?

我正在开发一个类似于sun.misc.Unsafe但具有扩展内存管理的JNI实现。为什么来自sun.misc.Unsafe和我开发的库的本地方法的调用时间截然不同?一些数字:sun.misc.Unsafe.getInt(address)需要~1ns当我的类似方法需要~10ns两种实现方式大体相同,都沿用了OpenJDK的源码,只是通过指针返回变量。两者的注册方式相同。如何加速JNI调用?是什么让不安全性能如此特别?谢谢,尤里/ 最佳答案 如果您在Unsafe类中寻找native方法的来源,您会发现它不使用JNI实现。相反,不安全的方

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

前几天我遇到了sun.misc.Unsafe包,并对它的功能感到惊讶。当然,这个类没有记录,但我想知道是否有充分的理由使用它。您可能会在哪些情况下需要使用它?在现实场景中如何使用它?此外,如果您确实需要它,这是否表明您的设计可能有问题?为什么Java甚至包含这个类? 最佳答案 例子虚拟机“内在化”。即CAS(Compare-And-Swap)用于Lock-FreeHashTables例如:sun.misc.Unsafe.compareAndSwapInt它可以对包含CAS特殊指令的native代码进行真正的JNI调用在这里阅读更多关

导致虚拟机故障的 Java 映射/nio/NFS 问题 : "a fault occurred in a recent unsafe memory access operation in compiled Java code"

我已经为特定的二进制格式(nfdump如果有人感兴趣)编写了一个解析器类,它使用了java.nio的MappedByteBuffer。读取每个几GB的文件。二进制格式只是一系列header和大部分固定大小的二进制记录,通过调用nextRecord()将其馈送到被调用方,nextRecord()会推送状态机,完成后返回null。它表现良好。它在开发机器上运行。在我的生产主机上,它可以运行几分钟或几小时,但似乎总是抛出“java.lang.InternalError:afaultoccurredinarecentunsafememoryaccessoperationincompiledJa

java - 什么时候收集 perm gen?

我正在开发一个Tomcat应用程序,它使用CMS收集器和内存条来触发GC。当我重新加载webapps时,我有时会遇到这样一种情况,即老一代已满足以触发GC,但死掉的类加载器不会被收集。我读到类被分配到permgen并猜测它们因此被Oldgen集合忽略。我写了下面的测试类来测试这个理论。packagetest;importjava.io.IOException;importjava.io.InputStream;importorg.apache.commons.io.IOUtils;/*JVMOptions:-server-XX:+UseMembar-XX:+UseConcMarkSwe

java - 我可以用 sun.misc.Unsafe 覆盖对象吗?

如果一个对象是同一类的实例,它们的大小相同,我可以使用sun.misc.Unsafe覆盖另一个对象吗?编辑:“覆盖”是指“删除”第一个对象,用第二个对象填充内存。可能吗? 最佳答案 By"override"Imeanto"delete"firstobject,anttofillthememorywiththesecondone.Isitpossible?是也不是。是-如果您使用Unsafe分配一些内存并写入long,然后在其中写入另一个long(例如),那么是的,您已经删除了第一个对象并用第二个对象填充了内存。这类似于您可以使用By

java - 为什么 XX :MaxDirectMemorySize can't limit Unsafe. 分配内存?

下面的代码将分配大量直接内存但不会导致java.lang.OutOfMemoryError:Directbuffermemory://JVMargs:-Xms10m-Xmx10m-XX:MaxDirectMemorySize=10mpublicclassDirectMemoryOOM{publicstaticvoidmain(String[]args)throwsNoSuchFieldException,IllegalAccessException{Fieldf=Unsafe.class.getDeclaredFields()[0];f.setAccessible(true);Unsa

java - 反射如何影响 Perm 大小?

我的理解是permsize用于存储元数据,其中包括字节码、静态内容等。我的问题是,反射的使用如何影响烫发大小(如果有的话)。我的意思是,如果Program-A使用正常的方式运行对象而Program-B全部使用反射,两个程序的perm-size如何比较? 最佳答案 当您执行将加载新类或内部化字符串的代码时,perm空间将会增加。必须加载反射类,这是肯定的。我不确定反射API是否大量使用内部化字符串,但应该不难发现。例如方法getDeclaredMethod(Stringname,Class...parameterTypes)名称参数将