① jrockit 出现Illegal memory access.问题;急求帮助
下面贴上所有的jrockit内容;
java代码
===== BEGIN DUMP =============================================================
JRockit mp proced after 0 days, 18:44:54 on Fri Oct 25 10:57:33 2013
**************************************************************************
* If you see this mp, please go to *
* http://download.oracle.com/docs/cd/E15289_01/go2troubleshooting.html *
* for troubleshooting information. *
**************************************************************************
Additional information is available in:
/usr/local/tomcat6/jrockit.18529.mp
No snapshot file (core mp) will be created because core mps have been
disabled. To enable core mping, try "ulimit -c unlimited"
before starting JRockit again.
Error Message: Illegal memory access. [54]
Signal info : si_signo=11, si_code=1 si_addr=0x7fa7c4cd8ab0
Version : Oracle JRockit(R) R28.2.7-7-155314-1.6.0_45-20130329-0641-linux-x86_64
CPU : Intel (null) (HT) SSE SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 Intel64
Number CPUs : 24
Tot Phys Mem : 16702332928 (15928 MB)
OS version : Red Hat Enterprise Linux Server release 6.3 (Santiago)
Linux version 2.6.32-279.el6.x86_64 ([email protected]) (gcc version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 EDT 2012 (x86_64)
Thread System: Linux NPTL
LibC release : 2.12-stable
Java locking : Lazy unlocking enabled (class banning) (transfer banning)
State : JVM is running
Command Line : -Djava.util.logging.config.file=/usr/local/tomcat6/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/tomcat6/endorsed -Dcatalina.base=/usr/local/tomcat6 -Dcatalina.home=/usr/local/tomcat6 -Djava.io.tmpdir=/usr/local/tomcat6/temp -Dsun.java.command=org.apache.catalina.startup.Bootstrap start -Dsun.java.launcher=SUN_STANDARD org.apache.catalina.startup.Bootstrap start
Repository : /usr/local/tomcat6/temp/2013_10_24_16_12_40_18529
java.home : /root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre
j.class.path : /usr/local/tomcat6/bin/bootstrap.jar
j.lib.path : /usr/java/packages/lib/amd64:/root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/lib/amd64/jrockit:/root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/lib/amd64:/root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/../lib/amd64
JAVA_HOME : /root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0
_JAVA_OPTIONS: <not set>
LD_LIBRARY_PATH: /root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/lib/amd64/jrockit:/root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/lib/amd64:/root/jrockit-jdk1.6.0_45-R28.2.7-4.1.0/jre/../lib/amd64
LD_ASSUME_KERNEL: <not set>
LD_PRELOAD : <not set>
StackOverFlow: 0 StackOverFlowErrors have occured
OutOfMemory : 0 OutOfMemoryErrors have occured
C Heap : Good; no memory allocations have failed
GC Strategy : Mode: throughput, with strategy: genparpar (basic strategy: genparpar)
GC Status : OC is not running. Last finished OC was OC#508.
: YC is not running. Last finished YC was YC#1946.
YC Promotion : Last YC successfully promoted all objects
YC History : Ran 1 YCs before OC#504.
: Ran 8 YCs before OC#505.
: Ran 1 YCs before OC#506.
: Ran 3 YCs before OC#507.
: Ran 2 YCs before OC#508.
: Ran 0 YCs since last OC.
Heap : 0x3fffe000 - 0x4db57000 (Size: 219 MB)
Heap History : OC#6 - 0x43ffe000 (64 MB -> 77 MB; +13108 KB)
: OC#11 - 0x44ccb000 (77 MB -> 92 MB; +15732 KB)
: OC#12 - 0x45c28000 (92 MB -> 111 MB; +18876 KB)
: OC#411 - 0x46e97000 (111 MB -> 154 MB; +44604 KB)
: OC#414 - 0x49a26000 (154 MB -> 180 MB; +26356 KB)
: OC#475 - 0x4b3e3000 (180 MB -> 219 MB; +40400 KB)
Compaction : (no compaction area)
Allocation : TLA-min: 2048, TLA-preferred: 65536 TLA-waste limit: 2048
NurseryList : 0x453869a8 - 0x46ae9320
KeepArea : 0x464c1bf0 - 0x46ae9320
KA Markers : [ 0x45e78ab8, 0x464c1bf0 , 0x46ae9320 ]
Forbidden A : (none)
Previous KA : 0x464be488 - 0x46fe6d68
Previous FA : (none)
CompRefs : References
② Linux 下启动 weblogic startWebLogic.sh 报错
jdk版本问题,你用的jdk应该是官方的,weblogic一般用自带的jdk,可以使用jrockit的选项。
检查下启动的sh,path变量,把里头jdk相关的内容再检查检查,应该指向weblogic自带的jdk位置
③ Sun的jdk和Jrockit有什么相同和不同~
Oracle JRockit (原来的 Bea JRockit)系列产品是一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案。 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM。JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒计的JVM响应时间,适合财务前端办公、军事指挥与控制和电信网络的需要。使用JRockit产品,客户已经体验到了显着的性能提高(一些超过了70% )和硬件成本的减少(达50%)。
Oracle JRockit 5.0是专门为在基于英特尔处理器的高性能服务器上运行大规模的关键任务型的服务器端应用而设计,包括支持64位的英特尔至强和英特尔安腾处理器。 最新版本的BEA JRockit 5.0支持多种平台,包括Solaris OS、Red Flag Linux服务器以及基于SPARC的系列。
JDK:jdk是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。
④ linux系统安装jdk1.5环境变量怎样写,为什么一直报错,求大师指点
以下是我本机Red hat jdk的环境变量配置,请参考
⑤ 如何用Java程序改变系统环境变量
最近在做一个项目的时候,遇到一个要在java程序中改变linux的PATH环境变量的问题。我们知道在linux中PATH环境变量保存在用户根目录下的“.bashrc”和“.bash_profile这两个隐藏文件中。用户登录的过程中便会把这两个文件中的PATH路径记录的该用户的shell中。如果用户已经登录,这时可通过命令 export PATH=add_path:$PATH来增加一个路径为add_path的路径。但通过此种方式增加的PATH路径只在当前shell中有效(也就是说,当用户通过另一个shell登录时,PATH又变成了原来的值)。在windows中用户已经登录的情况下则是通过命令set来更改环境变量的。
Java语言是一门跨平台的语言,具有一次编写到处运行的特点。在java的1.0版本中有System.getenv(String key)可以来取得操作系统的环境变量,但由于getenv()具有与操作系统紧密相关的特性,这与java的跨平台的跟本特征相冲突,所以在java1.2中该方法被不推荐使用。而程序员在编程的过程中经常需要用到getenv(),所以在java1.5中getenv()又重新回来了。虽然可以通过getenv()来取得系统的环境变量,但是却没有与getenv()相对应的setenv()函数来改变系统的环境变量。
C语言是一门与平台相关的语言,在多年的发展中积累了数量相当可观的库函数,在stdlib.h函数库中就有getenv(参数省略)与setenv(参数省略)来获取和改变系统的环境变量,这就给我们一个提示:能不能在java语言中调用C语言的函数库?JNI(java本地接口)正给了我们这样一个选择。
1.首先生成ChangeEnv.java文件
/**
* @author sgh
* @version 1.0.0 06/07/21
*/
public class ChangeEnv {
/**
* @param args
*/
static {
try{
System.loadLibrary("change_env");//声明欲加载的动态链接库
}
catch(UnsatisfiedLinkError e ){
System.err.println("Can not load library "+e.toString());
}
}
public native void setEnv(String name ,String value, int replace);//声明一个本地调用接口
}
说明:
1. 动态链接库在windows中是.dll文件,在linux中则是.so文件,但在System.loadLibrary("change_env")中不需要把后缀写出 ,程序会自己判断。
2. 本地接口声明方式为在普通函数前加native关键字
2. 编译java文件 :Javac ChangeEnv.java
3. 使用命令 javah ChangeEnv 生成ChangeEnv.h文件(ChangeEnv.h文件由程序自动生成,程序员不需要作任何改动)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class ChangeEnv */
#ifndef _Included_ChangeEnv
#define _Included_ChangeEnv
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: ChangeEnv
* Method: setEnv
* Signature: (Ljava/lang/String;Ljava/lang/String;I)V
*/
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv
(JNIEnv *, jobject, jstring, jstring, jint);
#ifdef __cplusplus
}
#endif
#endif
说明:
1.JNIEXPORT void JNICALL Java_ChangeEnv_setEnv
(JNIEnv *, jobject, jstring, jstring, jint)是本地接口函数的声明需要在.cpp文件中实现它
4.编写ChangeEnv.cpp
#include"ChangeEnv.h"
#include<stdio.h>
#include<stdlib.h>
//与ChangeEnv.h中函数声明相同
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)
{
////从instring字符串取得指向字符串UTF编码的指针
const char * name_char =(const char *) env->GetStringUTFChars(name ,JNI_FALSE);
const char * value_char =(const char *) env->GetStringUTFChars(value ,JNI_FALSE);
//实际调用的C库函数
setenv(name_char,value_char,replace);
//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会
//造成内存泄露
env->ReleaseStringUTFChars(name,(const char *)name_char);
env->ReleaseStringUTFChars(value,(const char *)value_char);
return ;
}
5.编译ChangeEnv.cpp文件,生成libchange_env.so文件
gcc -I/home/disk4/sgh/sgh/jrockit/include -I/home/disk4/sgh/sgh/jrockit/include/linux -shared -o libchange_env.so ChangeEnv.cpp
说明:
1. Linux下链接库名称必须以lib开头,否则会无法识别
6. 编写测试程序test.java
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(System.getenv("PATH"));//打印改变之前的PATH路径
String pathPer = System.getProperty("java.library.path");
pathPer+=":.";
System.setProperty("java.library.path",pathPer);//把当前目录加到动态链接库路径中
ChangeEnv changePath = new ChangeEnv ();//生成一个ChangeEnv对象
changePath.setEnv("PATH","$PATH:/home/disk4/sgh/sgh/soft/slurm34/bin:/home/disk4/sgh/sgh/soft/slurm34/sbin",1);
System.out.println(System.getenv("PATH"));//打印改变之后的PATH路径
}
}
说明:
1. 可以看到PATH路径发生了变化
JNI在windows下的使用
既然所有的.h ,.cpp文件都已写好,我们不防顺便编译以下windows下的动态链接库.dll文件。
这时我们发现在windows下的vc环境中没有setenv(char * name ,char * value ,int replace),而只有putenv(char * key_value)函数,所以我们必须重写ChangeEnv.cpp,为了使ChangeEnv.class对外接口保持一致性,所以我们没有改写ChangeEnv.java中本地函数借口的声明。
1. 重写ChangeEnv.cpp函数
#include"ChangeEnv.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//与ChangeEnv.h中函数声明相同
JNIEXPORT void JNICALL Java_ChangeEnv_setEnv(JNIEnv * env, jobject obj, jstring name, jstring value, jint replace)
{
if(replace==0)//如果replace==0表示不发生置换,直接退出
return ;
////从instring字符串取得指向字符串UTF编码的指针
const char * name_char =(const char *) env->GetStringUTFChars(name ,JNI_FALSE);
const char * value_char =(const char *) env->GetStringUTFChars(value ,JNI_FALSE);
//实际调用的C库函数,把环境变量写成key=value格式
char * key_value=(char *)name_char;
strcat(key_value, "=");
strcat(key_value, value_char);
putenv(key_value);
//通知虚拟机本地代码不再需要通过name_char访问Java字符串,否则会
//造成内存泄露
env->ReleaseStringUTFChars(name,(const char *)name_char);
env->ReleaseStringUTFChars(value,(const char *)value_char);
return ;
}
2. 在vc6中新建一个动态链接库工程,添加ChangeEnv.h和ChangeEnv.cpp到该工程中去
3. 在“工具”----〉“选项-”----〉“目录”中添加java的include路径
C:\Program Files\Java\jdk1.5.0_06\include和C:\Program Files\Java\jdk1.5.0_06\include\win32
4. 单击“运行”,把生成的change_env.dll拷贝到ChangeEnv.java所在的工程目录中
5. 在ChangeEnv.java所在工程中新建一个测试程序test.java
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class test {
/**
* @param args
*/
public static void main(String[] args) {
ChangeEnv changePath = new ChangeEnv();
changePath.setEnv("PATH", "%PATH%;c:\\", 1);
System.out.println(System.getenv("PATH"));
}
}
转载
⑥ linux系统下可以用的,jrockit142.tar.gz 在哪里有得下载啊~~~
BEA 出的一个 java 控制程序吧?
网上多的是,搜索“jrockit 下载”就行了。
-----------
http://www.theserverside.com/news/thread.tss?thread_id=22895
2003 年的东西你也干用阿?
我现在怀疑他还能运行么?
⑦ 如何让 RMI 程序同时支持 IPv4 和 IPv6
实践证明它是健壮,易于实现,并具有很好的互操作性。但是 IPv4 协议的初始设计仍有一些未考虑到的地方,随着 Internet 的飞速发展和新型应用的不断涌现,这些不足逐渐显露出来。首先,近年来 Internet 成指数级数增长,而只有 32 位地址的 IPv4 引起了迫在眉睫的 IP 地址空间耗尽的问题;第二,IPv4 路由结构较为扁平,使得 Internet 上骨干路由器需要维护庞大的路由表;第三,目前 IPv4 实现方案中,多数情况需要手工配置或者使用 DHCP 有状态方式配置协议,随着越来越多的节点要求接入网络,需要一种简便的配置方式;第四,在 IP 级的安全方面,IPv4 并不强制使用 IPSec ;最后,IPv4 协议中使用服务类型 TOS 字段来支持实时通信流传送,而 TOS 功能有限,因此对实时数据传输 Qos 的支持不是很理想。为解决上述问题及其它相关问题,互联网工程任务组织 IETF 开发了一套新的协议和标准即 IP 版本 6(IPv6)。它吸纳了很多用于更新 IPv4 的新思想,在设计时力求对上下层协议造成最小的影响。与 IPv4 相比,IPv6 协议具有以下一些新的特性:IPv6 协议头采用了固定长度的头部,路由器在处理 IPv6 报头时,效率会更高。IPv6 具有 128 位的巨大地址空间,既便为当前所有主机都分配一个 IPv6 地址,IPv6 仍然有充足的地址供以后使用。IPv6 具有即插即用特性。 IPv6 引入了无状态地址自动配置方式,链路上的主机根据路由公告和自身的链路地址可以自动生产一个 IPv6 地址,从而简化了入网主机的配置过程,实现了 IPv6 的即插即用。提供网络层的认证和加密。 IPv6 支持 IPSec,这为网络安全提供了一种基于标准的解决方案。IPv6 更好地支持 QoS 。 IPv6 协议头部包含流标签字段,使得路由器可以对属于一个流的数据包进行识别和提供特殊处理;用业务流分类字段来区分通信流的优先级。因此 IPv6 对 QoS 提供了更好的支持。IPv6 更好地支持移动性。虽然 IPv4 也有移动特性,但是作为 IPv4 的扩展实现,受到体系结构和连通性的限制。而 IPv6 的移动特性是内置的,具有较少的局限性并具有更强的可伸缩性和健壮性,可满足将来 Internet 的通信需求。IPv6 具有很好的可扩展性,这可通过在 IPv6 协议头之后添加新的扩展协议头实现。回页首Java 对 IPv6 的支持Java 从 1.4 开始,已经提供了对 IPv6 的支持。 Java APIs 遵循了如下 IPv6 标准:RFC2373: IPv6 Addressing ArchitectureRFC2553: Basic Socket Interface Extensions for IPv6RFC2732: Format for Literal IPv6 Address in URL但是由于安全等因素,Java 并没有支持原始套接字。除此之外,一些 IPv6 特性,诸如隧道,自动配置,移动 IP 等,Java 都没有提供支持。与 C/C++ 对 IPv6 的支持不同,Java 对 IPv6 的支持是自动和透明的,也就是说现有的 Java 程序不需要经过修改就可以直接支持 IPv6 。以下面代码为例,这段代码在 IPv4 上可以正常运行,同样也可以工作在 IPv6 上。InetAddress ip = InetAddress.getByName("java.sun.com"); Socket s = new Socket(ip, 80);Java 对 IPv6 的支持体现在其 JDK 对 IPv6 的支持上,当然前提条件是操作系统需要提供对 IPv6 的支持。以下操作系统已经提供了对 IPv6 的支持,表1. OS 对 IPv6 的支持Windows:Windows 2000Windows XPWindows NTWindows 2003 serverLinux:Linux kernel 2.2 及以上版本Unix:AIX 4.3 及以上版本Solaris 8 及以上版本HP-UX 11i 及以上版本BSD/OS 4.0 及以上版本True64 Unix 4.0D 及以上版本FreeBSD 4.0 及以上版本NetBSDOpenBSD 2.7 及以上版本Other OS:OS/390, Z/OS V1R4 及以上版本OS400 V5R2 及以上版本Mac OS X下面列出了各个版本 JDK 对 IPv6 的支持情况。表2. JDK 对 IPv6 的支持JDK/ JDK 1.4NOYESYESNOIBM JDK 1.5YESYESYESYESSUN JDK 1.4NOYESYESSUN JDK 1.5YESYESYESJRockit JDK 1.4NOYESJRockit JDK 1.5YESYESHP-UX JDK 1.4YESHP-UX JDK 1.5YES回页首RMI 对 IPv6 的支持既然Java 对 IPv6 的支持是透明的,那么 RMI 程序理论上就应该同时支持 IPv4 和 IPv6,但测试结果告诉我们只有在 RMI 服务器端套接字不绑定 IP 地址的情况下这种结论才成立。考虑下面这样一个例子,一个支持双栈的服务器,同时配置了 IPv4 地址和 IPv6 地址。服务器应用程序用如下代码创建了一个服务器套接字,等待客户端的连接。由于 Java 对 IPv6 的透明支持,IPv4 和 IPv6 的客户端都可以正常连接到这台服务器上。清单1. 无 IP 绑定的服务器套接字程序 try { int port = 2000; ServerSocket srv = new ServerSocket(port); Socket socket = srv.accept(); } catch (IOException e) { e.printStackTrace(); }通过natestat – na可以看出,服务器监听在 0.0.0.0:2000 上,这样任何客户端都可以连接到服务器上,其中包括 IPv6 客户端用服务器的 IPv6 地址也能顺利连接。Proto Local Address Foreign Address State TCP 0.0.0.0:2000 0.0.0.0:0 LISTENING但是很多时候,应用程序从安全等角度考虑,常常需要将服务器套接字绑定在某个具体的 IP 上。现在我们假设把服务器套接字绑定在一个 IPv4 地址上,如下程序所示:清单2. 绑定 IP 的服务器套接字程序 try { int port = 2000; ServerSocket srv = new ServerSocket(port); srv.bind(new InetSocketAddress( “ 9.181.27.34 ” , port) Socket socket = srv.accept(); } catch (IOException e) { e.printStackTrace(); }通过natestat – na,我们可以发现监听方式已改变: Proto Local Address Foreign Address State TCP 9.181.27.34:2000 0.0.0.0:0 LISTENING从套接字的定义看出,它由 IP 和端口组成,它们唯一确定了一个套接字,同时也限定了访问套接字的方式。在访问由固定 IP 和端口组成的套接字时,客户端必须指定服务器的 IP 和端口才能正常连接。在服务器绑定 IPv4 地址的情况下,IPv6 客户端就无法用服务器的 IPv6 地址进行访问,当然 IPv4 客户端能通过服务器的 IPv4 地址 9.181.27.34 进行连接访问。上面分析了 Java 对 IPv6 的支持以及服务器套接字如何影响客户端的连接,接下来我们用实例分析 RMI 对 IPv6 的支持。我们搭建了如下的实验环境:图1. 实验环境接下来,我们设计了一个基本的 RMI 应用程序,下面这段是 RMI 服务器程序:清单3. RMI 服务器程序 import java.rmi.*; import java.rmi.server.*; import java.rmi.registry.*; public class SampleServerImpl extends UnicastRemoteObject implements SampleServer { SampleServerImpl() throws RemoteException { super(); } public int sum(int a,int b) throws RemoteException { return a + b; } public static void main(String args[]) { try { //create a local instance of the object SampleServerImpl Server = new SampleServerImpl(); //put the local instance in the registry Naming.rebind("rmi://9.181.27.34/SAMPLE-SERVER" , Server); System.out.println("Server waiting....."); } catch (java.net.MalformedURLException me) { System.out.println("Malformed URL: " + me.toString()); } catch (RemoteException re) { System.out.println("Remote exception: " + re.toString()); } } }编译源程序,启动rmiregistry,然后运行 RMI 服务器程序。通过netstat – na我们可以看见,RMI 监听方式如下,尽管我们在程序中用了”Naming.rebind("rmi://9.181.27.34/SAMPLE-SERVER" , Server)”:Proto Local Address Foreign Address State TCP 0.0.0.0:1099 0.0.0.0:0 LISTENING那么,根据我们上面关于套接字对客户端连接的影响的分析,我们可以看出在这种情况下,IPv4 RMI 客户端和 IPv6 RMI 客户端都应该能够顺利连接 RMI 服务器。下面我们就看一下 IPv4 客户端的连接程序:清单4. RMI 客户端程序 import java.rmi.*; import java.rmi.server.*; public class SampleClient { public static void main(String[] args) { //get the remote object from the registry try { //using RMI server ’ s IPv4 address to connect String url = "//9.181.27.34/SAMPLE-SERVER"; SampleServer remoteObject = (SampleServer)Naming.lookup(url); System.out.println("Got remote object"); System.out.println(" 1 + 2 = " + remoteObject.sum(1,2) ); } catch (RemoteException exc) { System.out.println("Error in lookup: " + exc.toString()); } catch (java.net.MalformedURLException exc) { System.out.println("Malformed URL: " + exc.toString()); } catch (java.rmi.NotBoundException exc) { System.out.println("NotBound: " + exc.toString()); } } }编译并运行该程序,可以看到正常连接到 RMI 服务器,运行结果如下:Got remote object 1 + 2 = 3下面我们在 IPv4 RMI 客户端程序的基础上作一下改动,用 RMI 服务器的 IPv6 地址进行连接,修改如下:String url = "//2001:251:1a05::6/SAMPLE-SERVER"; SampleServer remoteObject = (SampleServer)Naming.lookup(url);编译修改之后的程序,在 IPv6 RMI 客户端上运行,同样可以正常连接 RMI 服务器,运行结果如下:Got remote object 1 + 2 = 3通过这个例子,我们可以看出基本的 RMI 程序对 IPv6 的支持是透明的,它可以同时支持 IPv4 和 IPv6 。通过这个例子,我们也可以看出,它实际上不能绑定 IP 地址,这在安全性要求比较高的企业级应用程序中并不是很合适,它们通常采用UnicastRemoteObject类的exportObject(Remote obj, int port, RMIClientSocketFactory csf, RMIServerSocketFactory ssf)方法来绑定 RMI IP 地址。在RMIServerSocketFactory实例中,创建 RMI 服务器套接字并绑定 IP 地址,在RMIClientSocketFactory实例中通过服务器绑定的 IP 地址进行访问。在RMI 服务器绑定 IP 地址的情况,如果让 RMI 同时支持 IPv4 和 IPv6 呢?下面给出了一个解决方案。既然要让 RMI 同时支持 IPv4 和 IPv6,那么在服务器端,我们就要同时创建两个套接字,一个绑定在 IPv4 地址上,一个绑定在 IPv6 地址上。首先,我们应该创建两个类IPv4RMIServerSocket和IPv6RMIServerSocket,他们都实现RMIServerSocketFactory接口。IPv4RMIServerSocket创建一个服务器套接字并绑定在 RMI 服务器的 IPv4 地址上;IPv6RMIServerSocket创建一个服务器套接字并绑定在 RMI 服务器的 IPv6 地址上。其次,在创建两个类IPv4RMIClientSocket和IPv6RMIClientSocket,他们都实现RMIClientSocketFactory接口。IPv4RMIClientSocket创建一个客户端套接字并通过 RMI 服务器的 IPv4 地址进行连接;IPv6RMIClientSocket创建一个客户端套接字并通过 RMI 服务器的 IPv6 地址进行连接。然后,在创建好我们需要的服务器和客户端类之后,服务器应用程序需要两次调用exportObject方法将远程对象导出。但是有一个问题出现了,同一个远程对象不能同时导出两次。如何解决这个问题呢?办法就是我们需要对远程对象作一个wrapper。现在假设有一个远程对象Kernel的类定义如下:清单5. Kernel 类定义 public class Kernel extends Remote{ public void addWebServer(String hostName, int port) throws RemoteException { //Function implementation code } public void changeLogLevel(int level) throws RemoteException { //Function implementation code } }Kernel 的 Wrapper 定义如下:清单6. Kernel 的 Wrapper 类定义 public class KernelWrapper extends Remote { transient Kernel kernel_; public KernelWrapper (Kernel kernel) throws RemoteException, IOException { super(); kernel_ = kernel; } public void addWebServer(String hostName, int port) throws RemoteException { kernel_.addWebServer(hostName, port); } public void changeLogLevel(int level) throws RemoteException { kernel_.changeLogLevel(level); } }在应用程序初始化的时候,实例化一个 Kernel 实例,并将它作为参数实例化两个 KernelWrapper 实例,如下所示:清单7. KernelWrapper 实例化 kernelObj = new Kernel(); //remote kernel object for IPv4 clients ipv4kernelObj = new KernelWrapper (kernelObj); //remote kernel object for IPv6 clients ipv6kernelObj = new KernelWrapper (kernelObj);最后应用程序需要将 ipv4kernelObj 和 ipv6kernelObj 远程对象导出,如下所示:清单8. 远程对象导出 //export remote object for IPv4 client UnicastRemoteObject.exportObject( ipv4kernelObj, 1099, IPv4RMIClientSocket, IPv4RMIServerSocket ) //export remote object for IPv6 client UnicastRemoteObject.exportObject( ipv6kernelObj, 1099, IPv6RMIClientSocket, IPv6RMIServerSocket )这样IPv4 客户端通过服务器的 IPv4 地址进行访问,而 IPv6 客户端通过服务器的 IPv6 地址进行访问,从而成功的使得 RMI 服务器在绑定 IP 地址的情况下同时支持 IPv4 和 IPv6 。回页首结束语本文在分析服务器套接字对 IPv4 和 IPv6 客户端的影响的基础上,介绍了两种不同的 RMI 应用对 IPv6 的支持情况,同时给出了一种 RMI 服务器在需要绑定 IP 地址的情况下如何同时支持 IPv4 和 IPv6 客户端的解决方案。参考资料 IPv6 主页:IPv6 官方网站。
Networking IPv6 User Guide for J2SDK/JRE 1.4:JDK 1.4 对 IPv6 的支持。
An example of RMI programming:RMI 的简单例子。
“探索Internet Protocol, version 6 (IPv6)”(developerWorks,2006 年 7 月):了解 IPv6 的地址格式、主要优点和符合新标准的 IT 产品。
“配置FTP 服务器以支持 IPv6”(developerWorks,2006 年 8 月):在本文中,学习配置 File Transfer Protocol (FTP) 服务器以支持 IPv6,然后通过一个简单的使用 IPv6 地址的 Java 程序来与 FTP 服务器通信。
“结合使用 WebSphere Application Server V7 和 IPv6”(developerWorks,2008 年 11 月):本文将介绍用于验证 IBM WebSphere Application Server V7 的过程,以验证其对 IPv6 以及对 IPv4/IPv6 混合模式基础结构的支持。
developerWorks Java 技术专区:这里有数百篇关于 Java 编程的文章。
关于作者沈刚目前在 IBM Tivoli 部门从事 ITM for Applications 产品开发工作。关闭[x]关于报告滥用的帮助报告滥用谢谢! 此内容已经标识给管理员注意。关闭[x]关于报告滥用的帮助报告滥用报告滥用提交失败。 请稍后重试。关闭[x]developerWorks:登录IBM ID:需要一个 IBM ID?忘记IBM ID?密码:忘记密码?更改您的密码 保持登录。单击提交则表示您同意developerWorks 的条款和条件。 使用条款 当您初次登录到 developerWorks 时,将会为您创建一份概要信息。您在developerWorks 概要信息中选择公开的信息将公开显示给其他人,但您可以随时修改这些信息的显示状态。您的姓名(除非选择隐藏)和昵称将和您在 developerWorks 发布的内容一同显示。所有提交的信息确保安全。关闭[x]请选择您的昵称:当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。昵称:(长度在 3 至 31 个字符之间)单击提交则表示您同意developerWorks 的条款和条件。 使用条款. 所有提交的信息确保安全。为本文评分评论回页首
⑧ 如何调整weblogic内存大小
设置方法有两种:
一、在../domain/startWebLoigc.***文件中设置
在startWebLogic.bat或startWebLogic.sh中找到以下内容,在其下方添加需要设置的内存
echo***************************************************
echo*TostartWebLogicServer,useausernameand*
echo*passwordassignedtoanadmin-leveluser.For*
echo*serveradministration,usetheWebLogicServer*
echo*consoleathttp://[hostname]:[port]/console*
echo***************************************************
setMEM_ARGS=-Xms512m-Xmx768m
MEM_ARGS="-Xms512m-Xmx768m"
:sun
if"%PRODUCTION_MODE%"=="true"gotosun_prod_mode
setJAVA_VM=-client
setMEM_ARGS=-Xms32m-Xmx200m-XX:MaxPermSize=128m
setJAVA_OPTIONS=%JAVA_OPTIONS%-Xverify:none
gotocontinue
:sun_prod_mode
setJAVA_VM=-server
setMEM_ARGS=-Xms32m-Xmx200m-XX:MaxPermSize=128m
gotocontinue
(2)Linux/Unix环境:
Sun)
JAVA_VM=-server
MEM_ARGS="-Xms32m-Xmx200m-XX:MaxPermSize=128m"
;;
和
Sun)
JAVA_VM=-client
MEM_ARGS="-Xms32m-Xmx200m-XX:MaxPermSize=128m"
JAVA_OPTIONS="${JAVA_OPTIONS}-Xverify:none"
;;
⑨ sun jvm和jrockit jvm的所提供的虚拟机工具的对比
sun jvm是由德国InnoTek(已被Sun并购) 这家软件公司出品的软件,它提供使用者在32或64位元的 Windows、Solaris 及 Linux 操作系统上虚拟另外的机器执行其它x86的操作系统,使用者可以在 VirtualBox 上安装并且执行 Solaris、Windows、Linux、OS/2 Warp、OpenBSD 及 FreeBSD 等系统作为客户机操作系统[1]。在2007年1月,InnoTek以GNU通用公共许可证 (GPL)释出VirtualBox,并提供二进制版本及开放源码版本的程式码。
和同性质的VMware及Virtual PC比较下,VirtualBox独到之处包括Remote Desktop Protocol(RDP)、iSCSI及USB的支援,VirtualBox在客户机操作系统上已可以支援USB 2.0的硬件装置。
jrockit jvm它是第一个专为在 Intel 平台上运行而优化的高性能 Java 虚拟机 (JVM),其服务器JVM增强了服务器端的性能和可管理性。
⑩ 如何在linux下检测内存泄漏
内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。
可以使用相应的软件测试工具对软件进行检测。
1. ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库。
2. Dmalloc-Debug Malloc Library.
3. Electric
Fence-Linux分发版中由Bruce Perens编写的malloc()调试库。
4. Leaky-Linux下检测内存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟踪和分析C++程序中的内存泄漏。
6. MEMWATCH-由Johan
Lindh编写,是一个开放源代码C语言内存错误检测工具,主要是通过gcc的precessor来进行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.
9. Leak
Monitor-一个Firefox扩展,能找出跟Firefox相关的泄漏类型。
10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors帮助网页开发员提升动态网页性能通过报告可避免的因为IE局限的内存泄漏。
11. Windows Leaks
Detector-探测任何Win32应用程序中的任何资源泄漏(内存,句柄等),基于Win API调用钩子。
12. SAP Memory
Analyzer-是一款开源的JAVA内存分析软件,可用于辅助查找JAVA程序的内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse
RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。
13. DTrace-即动态跟踪Dynamic
Tracing,是一款开源软件,能在Unix类似平台运行,用户能够动态检测操作系统内核和用户进程,以更精确地掌握系统的资源使用状况,提高系统性能,减少支持成本,并进行有效的调节。
14. IBM Rational PurifyPlus-帮助开发人员查明C/C++、托管.NET、Java和VB6代码中的性能和可靠性错误。PurifyPlus
将内存错误和泄漏检测、应用程序性能描述、代码覆盖分析等功能组合在一个单一、完整的工具包中。
15. Parasoft Insure++-针对C/C++应用的运行时错误自动检测工具,它能够自动监测C/C++程序,发现其中存在着的内存破坏、内存泄漏、指针错误和I/O等错误。并通过使用一系列独特的技术(SCI技术和变异测试等),彻底的检查和测试我们的代码,精确定位错误的准确位置并给出详细的诊断信息。能作为Microsoft
Visual C++的一个插件运行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-为C++开发者设计的运行错误检测和调试工具软件。作为Microsoft Visual Studio和C++ 6.0的一个插件运行。
17. Electric Software GlowCode-包括内存泄漏检查,code
profiler,函数调用跟踪等功能。给C++和.Net开发者提供完整的错误诊断,和运行时性能分析工具包。
18. Compuware DevPartner Java
Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块。
19. Quest JProbe-分析Java的内存泄漏。
20. ej-technologies JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和应用服务器整合用途。JProfiler直觉式的GUI让你可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。4.3.2注册码:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到内存泄漏并优化内存使用针对C#,VB.Net,或其它.Net程序。
23. YourKit .NET & Java Profiler-业界领先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的获奖产品performance profiling和memory
debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和
GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位应用程序。
25. JavaScript Memory Leak Detector-微软全球产品开发欧洲团队(Global Proct
Development- Europe team, GPDE)
发布的一款调试工具,用来探测JavaScript代码中的内存泄漏,运行为IE系列的一个插件。