本文的网络地址:http://james-gone.github.io/develop/2016/05/28/java不同版本的区别和使用

1. Google 和 Oracle 的java法律纠纷

  • Java 历史简述

    没有Java的时代,相同功能的软件,在不同的系统平台都需要单独编写特定的代码。

    1995年Sun Microsystem (升阳微系统,太阳计算机系统,下文简称Sun) 开发出Java语言。 java的口号是一次编写,处处运行(write once, run anywhere)。要实现这样的目标,java是通过给不同环境安装1个java运行环境虚拟机(jvm)的方式,将一次编写的程序,通过不同环境的jvm运行时编译为适应的字节码。

    2010年Oracle(甲骨文)公司收购Sun。此后关于JAVA的版权就归Oracle所有了。

    更多关于java 的介绍见wikipedia Java

  • API和版权

    google android 系统内应用程序运行的虚拟机是Dalvik VM,是java虚拟机的另一种实现。该环境也是运行java程序,有一些接口是与java通用的,但是有一些不一样。由此也导致,专门为android系统编写的程序在普通的jdk环境是不能运行的,即违反了java 一次编写处处运行的口号。

    oracle 起诉google主要就是因为这样会导致java虚拟机的不兼容,发展下去会导致java分裂和碎片化,android系统的碎片化已经很严重了。当然另一方面,开源软件一直是推广分支使用的方式的,原维护方做的不够好的时候,任何人都可以开一个新的分支让应用程序更好的发展。

    google 在Dalvik技术中并不是使用了JVM的代码,而是保留了一些API接口的一致。从JAVA语言的开发和使用历史看,一直是推广免费使用的,其协议并没有明显的限制使用。同样的,大部分的开源软件为广泛的推广使用,也是不限制非商业使用的。从软件的开发和通用使用看,不限制的方式更利于推广、分享和广泛的使用。

    此次诉讼最新的判决是google赢了,免于给oracle支付昂贵的权利费用。

  • Android N 计划使用openJDK

    openJDK 是使用GNU GPL协议的自由开源软件,google已经计划在下一版本的 Android N上迁移到使用openJDK的API,此后就不再依赖JAVA JDK了。

2. 各个版本的JDK/JRE

查看java的具体版本,使用以下命令。不同的JDK/JRE显示不同的内容信息。

java -version    
  • Sun JDK

    Windows 环境

    32位 安装程序名称和版本

    jdk-7u80-windows-i586.exe 
    
    c:\Java32\jdk1.7.0_80\bin>java -version
    java version "1.7.0_80"
    Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
    Java HotSpot(TM) Client VM (build 24.80-b11, mixed mode, sharing)

    64位 安装程序名称和版本

    jdk-7u80-windows-x64.exe
    
    c:\Java64\jdk1.7.0_80\bin>java -version
    java version "1.7.0_80"
    Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
    Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
  • openJDK

    java version "1.7.0_101"
    OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)
    OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
    

    更多关于openJDK的介绍见 wikipedia OpenJDK

  • JRockit

    JRockit最早第三方开发的工具,后来被BEA收购,而BEA又被ORACLE收购,所以JRockit现在是属于ORACLE的产品。JRockit的性能同样版本下,比Sun的标准JDK稍高些。 JRockit只更新到对应JDK1.6.0_45的版本。不过JAVA Mission Control的工具已经在JDK1.7.0_80内提供了。应用该工具可以跟踪和查看当前系统使用情况和java线程信息等。

    更多关于JRockit的介绍见 wikipedia JRockit

3. 32位还是64位?

JAVA 32位的时候,开发的应用程序能用到的最大内存理论上是2G多。在不同的平台,使用不同的JDK有些区别。

1 标准Windows 32 位环境能分配给应用程序的最大内存,即-Xmx参数。

	* Sun 标准JDK是 1.5G 多一些
	* JRockit可以接近2G

2 标准Linux 32位环境 RHEL6

	* openJDK 和Sun JDK可以设置接近1.7G
	* JRockit可以设置为2G

3 Sparc硬件架构,Solaris操作系统 32位环境

	* 此环境是一切最优调整情况下,应用能够调用的内存最多接近2.2G多。

当开发的应用还是32位架构的时候,单个java虚拟机能调用的还是有限的内存(具体如上)。最优环境设置的内存可用量越大,越能处理比较大的任务,而且会减少java虚拟机垃圾回收系统消耗。此时,即使服务器装在多的内存,对1个java虚拟机来说,实际并没有用。当然做软件负载均衡,同时开启多个java进程能更好的利用硬件资源,不过这样做又使得软件系统架构比较复杂,也会有session同步等其它问题了。

还好时代终究是进步的,现在主流的应用程序都有64位版本的,或者只有64位版本了。在64位应用程序的环境下,可以使用的内存量大大增加。此时适当调整java -Xmx等参数能更好的协调系统资源更好的系统应用的效率。

4. 和TC相关的JRE/JDK

TC版本

TC8还是32位的程序,所以需要运行在32位的JRE环境。 从TC9开始同时提供32位版本和64位版本。TC10也还有32位版本。 到TC11就只有64位版本了,过渡已经完成。 不过TC的运行环境调用的JRE是tc自己附带的jre,而不是当前操作系统环境变量指向的jre或者安装的其它jre。

  • TC8两层胖客户端 的jre位置在
d:\Siemens\Teamcenter8\portal\jre\bin\java.exe

TC8.3附带的jre版本如下

d:\Siemens\Teamcenter8\portal\jre>bin\java.exe -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode)

TC8两层胖客户端是以下命令启动的

D:\Siemens\Teamcenter8\portal\portal.bat

该文件的内容如下:

@echo off
rem 
rem TPR is short for TC_PORTAL_ROOT to reduce command line length
title Teamcenter Rich Client
set TPR=D:\Siemens\TEAMCE~1\portal
if not defined FMS_HOME set FMS_HOME=D:\Siemens\TEAMCE~1\fcc	\\设置FMS_HOME
set PATH=%FMS_HOME%\bin;%FMS_HOME%\lib;%TPR%;%PATH%
set JAVA_HOME=D:\Siemens\TEAMCE~1\portal\jre             	\\设置当前JAVA_HOME
set JRE_HOME=D:\Siemens\TEAMCE~1\portal\jre			\\设置当前的JRE_HOME
start "TAO ImR" /min cmd /c "D:\Siemens\Teamcenter8\iiopservers\start_imr.bat"
\\启动两层的iiop服务
:start_portal
cd /d %TPR%
set CLASSPATH=.;
@echo Starting Teamcenter Rich Client...
start Teamcenter.exe %*						\\启动Teamcenter.exe

Teamcenter.ini是最后启动Teamcenter.exe的配置文件,内容如下:

-vm				\\设定使用的jvm
D:\Siemens\TEAMCE~1\portal\jre\bin
-vmargs				\\意思是设置JVM参数
-Xmx512m			\\JVM最大分配的内存由-Xmx指定,默认是物理内存的1/4
-XX:MaxPermSize=128m        	\\java垃圾回收设置的参数,永久代最大设置内存为128MB
-Xbootclasspath/a:D:\Siemens\TEAMCE~1\portal\jre\lib\plugin.jar;D:\Siemens\TEAMCE~1\portal\jre\lib\deploy.jar;D:\Siemens\TEAMCE~1\portal\jre\lib\javaws.jar
  • TC8四层胖客户端 的jre位置在
d:\Siemens\Teamcenter\OTW8\otw\jre\bin\java.exe

TC8.3.3附带的jre版本如下

d:\Siemens\Teamcenter\OTW8\otw\jre\bin\java.exe -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode)

TC8四层胖客户端是以下命令启动的

D:\Siemens\Teamcenter\OTW8\rac\portal.bat

该文件的内容如下:

@echo off
call "d:\Siemens\Teamcenter\OTW8\otw\otw.bat"
start /min cmd /c "d:\Siemens\Teamcenter\OTW8\rac\otwportal.bat" %* 

以上脚本中,otw.bat是调用和检查4层的安装。otwprotal.bat类似两层的portal.bat,设置TPR、fcc、path、java_home、jre_home等,最后启动Teamcenter.exe。

而Teamcenter.ini文件同2层的文件几乎一致,除了"-vm"参数指定的java路径是"OTW8\otw\jre\bin\“。

环境变量

win7 win2008 以上环境用setx设置环境变量

setx java_home d:\java\jdk1.7.0_80
setx jre_home d:\java\jre7
setx path d:\java\jdk1.7.0_80\bin;%path%

以上的环境变量设置到个人当前用户下的环境变量 如果需要设置为系统环境变量,则需要加"-m"的参数,比如:

setx -m java_home d:\java\jdk1.7.0_80

Windows的环境变量不区分大小写。以上执行方式也可以写成一个Windows批处理.bat脚本运行。

winxp 到系统高级设置内设置环境变量 计算机–> 右键属性 –> 系统属性–>高级–>环境变量 内设置

浏览器内的java插件

otw安装4层胖客户端的时候,必须先安装jre的插件到浏览器。如果先安装了jre环境,后重新安装过浏览器,或者升级过浏览器会导致jre 的插件不会工作,此时需要重新安装jre环境。

tem 的启动

如前面所述,Teamcenter的实际运行并不依赖系统新安装的java环境。但是首次安装时运行tem还是需要java环境的,所以安装Teamcenter的标准安装方式还是要先安装java,并设置环境变量。

如果系统没有其它应用需要java环境,也可以不安装(服务器不需要安装4层的时候),因为jre并不是必须安装的,只要将1个兼容的java复制到系统内就可以了。或者有时候,环境变量设置有问题,或者有多个java环境的时候,tem也可以手工指定 jre的位置的方式启动来启动安装。

tem -jre d:\java\jdk1.7.0_80 

weblogic的jar包安装

weblogic新版本12.1.0.2提供的安装包是1个jar包的方式,需要安装的服务器有jre运行环境才能安装。安装命令如下:

java -jar fmw_12.1.3.0.0_wls.jar

静默安装jre

Windows平台下

  • jdk7和jre7静默安装
jdk-7u80-windows-i586.exe /s
jdk-7u80-windows-x64.exe /s
  • jre8的静默安装 需要先设置1个配置文件,暂命名为:jrecfg.txt ,内容如下:
INSTALL_SILENT=Enable
INSTALLDIR=C:\java\jre
WEB_JAVA_SECURITY_LEVEL=VH

然后安装执行命令:

jre-8u92-windows-i586.exe INSTALLCFG=d:\jrecfg.txt
  • 其它版本的静默安装方式未进行详细测试。

本文的网络地址:http://james-gone.github.io/develop/2016/05/28/java不同版本的区别和使用