32位和64位,以及跨平台的那点儿事

32位和64位,以及跨平台的那点儿事
64位的CPU可以跑 32位或者64位的OS

64位的OS可以跑32位或者64位的JVM

Java是跨平台的, 指得是Java编译成的class文件,可以在(32/64) .* (Oracle/IBM/…) .* (Linux/Win)等不同的JVM实现下面运行,Java源文件在不同的JVM下面不需要重新编译。但在不同的OS下面可能需要安装不同的JVM(这个程度上说,某个JVM实现不是跨平台的)。

怎么判断JVM是多少位的?

http://stackoverflow.com/questions/4574090/installed-jvm-is-64-bit-or-32-bit

怎么得到操作系统级别的信息?

http://stackoverflow.com/questions/4704073/how-can-i-get-system-hardware-info-via-java

http://stackoverflow.com/questions/25552/using-java-to-get-os-level-system-information

http://www.roseindia.net/java/beginners/OSInformation.shtml

http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking

/com/fr/util/OperatingSystem.java

JNI,Java调用的本地库一般是用其他语言实现比如C等等,它们不是跨平台的,会遇到什么问题?

比如System.loadLibrary(“FRElite4″);在WIN下对应的是个DLL,在Linux下面是个.so/.a文件

再比如,Linux下面,32位下面编译的库,放到64位的JVM(不是OS?)中加载中会出现如下的错误,据说换成32bit的JVM就可以(这个需要测试一下)

http://www.linuxquestions.org/questions/linux-software-2/working-with-32-bit-jvm-on-64-system-sapgui-problem-654041/

1
2
3
4
5
6
7
8
9
10
java.lang.UnsatisfiedLinkError: /usr/lib/libFRElite4.so: /usr/lib/libFRElite4.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Sense4.Elite4.(Elite4.java:41)
at com.fr.base.core.FRCoreContext.getLockBytes(Unknown Source)
at com.fr.base.core.FRCoreContext.getBytes(Unknown Source)
at com.fr.web.ReportServlet.init(Unknown Source)
飘忽不定的java.library.path,以及操作系统文件访问权限Java加载库文件,就是从System.getProperty(“java.library.path”)这个Path中寻找库的,但是这个默认属性值是由JVM确定的,其规律不太确定-Djava.library.path ..可以控制此属性,但是作为中间件,这个往往不能控制,需要Web服务器或者Resin提供设置,更何况很麻烦System.setProperty(“java.library.path”, “usr/lib:lib”);的做法虽然能动态改变属性值,但是测试过似乎库又不能正常加载。
操作系统文件访问权限这个问题很少遇到上次WIN在下,cache文件位置遇到过一次,这次加密所虽然没遇到过,不过很有可能还会遇到这个问题,作为一个应用程序,只是个Servlet,不是宿主进程,如何获得root权限,修改文件会遇到权限的很多限制。
怎么判断JVM是多少位的?

http://stackoverflow.com/questions/4574090/installed-jvm-is-64-bit-or-32-bit

怎么得到操作系统级别的信息?

http://stackoverflow.com/questions/4704073/how-can-i-get-system-hardware-info-viajava

http://stackoverflow.com/questions/25552/using-java-to-get-os-level-systeminformation

http://www.roseindia.net/java/beginners/OSInformation.shtml

http://nadeausoftware.com/articles/2008/03/java_tip_how_get_cpu_and_user_time_benchmarking

JNI,Java调用的本地库一般是用其他语言实现比如C等等,它们不是跨平台的,会遇到什么问题?比如System.loadLibrary(“XXX”);在WIN下对应的是个DLL,在Linux下面是个.so/.a文件再比如,Linux下面,32位下面编译的库,放到64位的JVM(不是OS?)中加载中会出现如下的错误,据说换成32bit的JVM就可以(这个需要测试一下)

http://www.linuxquestions.org/questions/linux-software-2/working-with-32-bit-jvm-on-64-system-sapgui-problem-654041/

java.lang.UnsatisfiedLinkError: /usr/lib/libXXX.so: /usr/lib/libXXX.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)

at java.lang.ClassLoader$NativeLibrary.load(Native Method)

at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1803)

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728)

at java.lang.Runtime.loadLibrary0(Runtime.java:823)

at java.lang.System.loadLibrary(System.java:1028)

Java..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值