java - 无法在 Linux 中找到正确的架构类型

标签 java linux

问题 如何从外部java程序检查Ubuntu 16.04操作系统上安装的java是32位还是64位

我的研究 -

1)我使用 uname -a 命令检查了我的 Ubuntu 架构,该命令显示它是 64 位

Linux jalaj-SVF14212SNB 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13  00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

2)我使用检查了给定路径中安装的java版本 java -XshowSettings:全部

VM settings:
Max. Heap Size (Estimated): 853.50M
Ergonomics Machine Class: server
Using VM: Java HotSpot(TM) Server VM

Property settings:
awt.toolkit = sun.awt.X11.XToolkit
file.encoding = UTF-8
file.encoding.pkg = sun.io
file.separator = /
java.awt.graphicsenv = sun.awt.X11GraphicsEnvironment
java.awt.printerjob = sun.print.PSPrinterJob
java.class.path = /home/jalaj/Java/jdk1.7.0_80/bin
    /home/jalaj/Java/jdk1.7.0_80/jre/bin
    JAVA_HOME/lin
    .
java.class.version = 51.0
java.endorsed.dirs = /home/jalaj/Java/jdk1.7.0_80/jre/lib/endorsed
java.ext.dirs = /home/jalaj/Java/jdk1.7.0_80/jre/lib/ext
    /usr/java/packages/lib/ext
java.home = /home/jalaj/Java/jdk1.7.0_80/jre
java.io.tmpdir = /tmp
java.library.path = /usr/java/packages/lib/i386
    /lib
    /usr/lib
java.runtime.name = Java(TM) SE Runtime Environment
java.runtime.version = 1.7.0_80-b15
java.specification.name = Java Platform API Specification
java.specification.vendor = Oracle Corporation
java.specification.version = 1.7
java.vendor = Oracle Corporation
java.vendor.url = http://java.oracle.com/
java.vendor.url.bug = http://bugreport.sun.com/bugreport/
java.version = 1.7.0_80
java.vm.info = mixed mode
java.vm.name = Java HotSpot(TM) Server VM
java.vm.specification.name = Java Virtual Machine Specification
java.vm.specification.vendor = Oracle Corporation
java.vm.specification.version = 1.7
java.vm.vendor = Oracle Corporation
java.vm.version = 24.80-b11
line.separator = \n 

os.arch = i386 os.name = Linux

os.version = 4.4.0-31-generic
path.separator = :

sun.arch.data.model = 32

sun.boot.class.path = /home/jalaj/Java/jdk1.7.0_80/jre/lib/resources.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/rt.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/sunrsasign.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/jsse.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/jce.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/charsets.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/lib/jfr.jar
    /home/jalaj/Java/jdk1.7.0_80/jre/classes
sun.boot.library.path = /home/jalaj/Java/jdk1.7.0_80/jre/lib/i386
sun.cpu.endian = little
sun.cpu.isalist = 
sun.desktop = gnome
sun.io.unicode.encoding = UnicodeLittle
sun.java.launcher = SUN_STANDARD
sun.jnu.encoding = UTF-8
sun.management.compiler = HotSpot Tiered Compilers
sun.os.patch.level = unknown
user.country = IN
user.dir = /home/jalaj/Downloads
user.home = /home/jalaj
user.language = en
user.name = jalaj
user.timezone = 

Locale settings:
default locale = English
default display locale = English (India)
default format locale = English (India)
available locales = ar, ar_AE, ar_BH, ar_DZ, ar_EG, ar_IQ, ar_JO, ar_KW, 
    ar_LB, ar_LY, ar_MA, ar_OM, ar_QA, ar_SA, ar_SD, ar_SY, 
    ar_TN, ar_YE, be, be_BY, bg, bg_BG, ca, ca_ES, 
    cs, cs_CZ, da, da_DK, de, de_AT, de_CH, de_DE, 
    de_LU, el, el_CY, el_GR, en, en_AU, en_CA, en_GB, 
    en_IE, en_IN, en_MT, en_NZ, en_PH, en_SG, en_US, en_ZA, 
    es, es_AR, es_BO, es_CL, es_CO, es_CR, es_DO, es_EC, 
    es_ES, es_GT, es_HN, es_MX, es_NI, es_PA, es_PE, es_PR, 
    es_PY, es_SV, es_US, es_UY, es_VE, et, et_EE, fi, 
    fi_FI, fr, fr_BE, fr_CA, fr_CH, fr_FR, fr_LU, ga, 
    ga_IE, hi_IN, hr, hr_HR, hu, hu_HU, in, in_ID, 
    is, is_IS, it, it_CH, it_IT, iw, iw_IL, ja, 
    ja_JP, ja_JP_JP_#u-ca-japanese, ko, ko_KR, lt, lt_LT, lv, lv_LV, 
    mk, mk_MK, ms, ms_MY, mt, mt_MT, nl, nl_BE, 
    nl_NL, no, no_NO, no_NO_NY, pl, pl_PL, pt, pt_BR, 
    pt_PT, ro, ro_RO, ru, ru_RU, sk, sk_SK, sl, 
    sl_SI, sq, sq_AL, sr, sr_BA, sr_BA_#Latn, sr_CS, sr_ME, 
    sr_ME_#Latn, sr_RS, sr_RS_#Latn, sr__#Latn, sv, sv_SE, th, th_TH, 
    th_TH_TH_#u-nu-thai, tr, tr_TR, uk, uk_UA, vi, vi_VN, zh, 
    zh_CN, zh_HK, zh_SG, zh_TW
Usage: java [-options] class [args...]
       (to execute a class)
or  java [-options] -jar jarfile [args...]
       (to execute a jar file)
where options include:
-d32      use a 32-bit data model if available
-d64      use a 64-bit data model if available
-client   to select the "client" VM
-server   to select the "server" VM
-hotspot      is a synonym for the "client" VM  [deprecated]
              The default VM is server,
              because you are running on a server-class machine.


-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
              A : separated list of directories, JAR archives,
              and ZIP archives to search for class files.
-D<name>=<value>
              set a system property
-verbose:[class|gc|jni]
              enable verbose output
-version      print product version and exit
-version:<value>
              require the specified version to run
-showversion  print product version and continue
-jre-restrict-search | -no-jre-restrict-search
              include/exclude user private JREs in the version search
-? -help      print this help message
-X            print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
              enable assertions with specified granularity
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
              disable assertions with specified granularity
-esa | -enablesystemassertions
              enable system assertions
-dsa | -disablesystemassertions
              disable system assertions
-agentlib:<libname>[=<options>]
              load native agent library <libname>, e.g. -agentlib:hprof
              see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
              load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
              load Java programming language agent, see    java.lang.instrument
-splash:<imagepath>
              show splash screen with specified image
See http://www.oracle.com/technetwork/java/javase/documentation/index.html for more details.

从上面的命令可以清楚地看出我们在 32 位操作系统上使用 32 位 jre。 不过,第一点和第二点是矛盾的。

3) 另外,下面是我执行 which java 时得到的输出:

/home/jalaj/Java/jdk1.7.0_80/bin/java

Can anyone guide how to install java correctly on given operating system and whether it is 32 bit or 64 bit.

最佳答案

如果您想知道 JVM 是 32 位 还是 64 位 风格,在不运行 JVM 的情况下,您可以检查 java 二进制文件的体系结构。

检查java二进制文件,它是根据PATH环境变量找到的

file -L `which java`

64 位和 32 位二进制的示例输出

/usr/bin/java: ELF 64-bit LSB executable, ...
/usr/bin/java: ELF 32-bit LSB executable, ...

检查特定目录中的二进制文件

file -L /path/to/jre/java

获取预期的 Oracle JDK 检查 Java SE Development Kit 8 Downloads

获得预期的 Oracle JRE 检查 Java SE Runtime Environment 8 Downloads

获取 Ubuntu 的预期 OpenJDK 版本(指令取自 http://openjdk.java.net/install/ )

sudo apt-get install openjdk-8-jre

关于java - 无法在 Linux 中找到正确的架构类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45024613/

相关文章:

java - 如何在 Avro 中定义 LogicalType。 ( java )

java - java和android的加密区别

linux - 如何通过ssh让node app在 digital ocean 上存活

c - 即使在处理程序中重置,SIGALRM 的信号处理程序也不起作用

java - 悲观锁不起作用

java - 使用 Jackson 将 JSON 字符串或对象反序列化为 String 字段

java - 如何使用 FTP 知道服务器上的文件是否完整?

c - 对象WMA(虚拟内存区域:) and PTE (Page Table Entry)?)之间有什么区别

linux - Svn 项目,获取干净的文件

c - C 中的 "UDP datagrams only"套接字