Java sun的奇怪行为。杂项不安全。在Solaris-sparcv9上放置…()

Java sun的奇怪行为。杂项不安全。在Solaris-sparcv9上放置…(),java,solaris,unsafe,Java,Solaris,Unsafe,我遇到以下简单代码的JVM崩溃 错误是: Java运行时环境检测到一个致命错误: pc=0xFFFFFF7E178CF0处的SIGBUS 0xa,pid=22073,tid=2 JRE版本:6.0_27-b07 Java VM:Java HotSpotTM 64位服务器VM 20.2-b06混合模式solaris sparc压缩oops 有问题的框架: V[libjvm.so+0x978cf0]Unsafe_SetNativeShort+0x138 包含详细信息的错误报告文件另存为: /home

我遇到以下简单代码的JVM崩溃

错误是: Java运行时环境检测到一个致命错误: pc=0xFFFFFF7E178CF0处的SIGBUS 0xa,pid=22073,tid=2 JRE版本:6.0_27-b07 Java VM:Java HotSpotTM 64位服务器VM 20.2-b06混合模式solaris sparc压缩oops 有问题的框架: V[libjvm.so+0x978cf0]Unsafe_SetNativeShort+0x138 包含详细信息的错误报告文件另存为: /home/eqbeqa/Core/DC_Testing/SK_solarisBug/hs_err_pid22073.log 如果您想提交错误报告,请访问:

如果我将iBlockSize更改为4、8或16等,它会起作用。 我在Sun_jdk和JRockit上都试过了。 以下是一些重要的系统属性, java.runtime.name=JavaTM SE运行时环境 java.runtime.version=1.6.0_27-b07 java.specification.name=java平台API规范 java.specification.vendor=太阳微系统公司。 java.specification.version=1.6 java.vendor=太阳微系统公司。 java.version=1.6.0_27 java.vm.info=混合模式 java.vm.name=java HotSpotTM 64位服务器vm java.vm.specification.name=java虚拟机规范 java.vm.specification.vendor=太阳微系统公司。 java.vm.specification.version=1.0 java.vm.vendor=太阳微系统公司。 java.vm.version=20.2-b06 os.arch=sparcv9 os.name=SunOS os.version=5.10 sun.arch.data.model=64 sun.cpu.endian=big sun.management.compiler=热点64位分层编译器

我只在solaris上得到这个,它在Windows、Linux、AIX等平台上工作


可能是什么问题代码/jdk\u问题/??

请打印出lStartAdd和地址以进行调试。分段错误可能与Solaris中奇怪的内存对齐有关-只是猜测,抱歉,我没有在Solaris中编程的经验。因为这是内存对齐问题已定义:。我们通过在对齐的地址位置上写入来处理这个问题。
import sun.misc.Unsafe;
public class TestProgram {
       static Unsafe unsafe = Util.getUnsafe();
       public static void main(String args[]){
         long iBlockSize = 3;
         long address = unsafe.allocateMemory((iBlockSize*1024));
         short val = -1;
         byte val2 = -1; 
         long endAddress = address + (iBlockSize*1024);
         for(long lStartAdd = address; lStartAdd < endAddress; 
                                       lStartAdd += iBlockSize)
         {           
             unsafe.putShort(lStartAdd, val);
             unsafe.putByte(lStartAdd+2, val2);
         }
         unsafe.freeMemory(address);
         System.out.println("Completed sucessfully ...");
       }
}