① 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系列的一個插件。