java中不建議直接獲取字符串內存地址,因為java不像c語言,獲取內存地址是C語言的強項,java的弱項。但是java內存地址還是有一個應用場景,就是判斷兩個字符串內存地址是否相等來判斷是否是同一個對象,用雙等號“==”來比較的。參考代碼如下:
創(chuàng)新互聯公司專注于興山企業(yè)網站建設,響應式網站建設,成都做商城網站。興山網站建設公司,為興山等地區(qū)提供建站服務。全流程按需網站開發(fā),專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯公司專業(yè)和態(tài)度為您提供的服務
public class Test01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="abc";
String str2=new String("abc");
System.out.println(str1 == str2);//輸出false
}
}
方法如下:
首先
創(chuàng)建一個Bean用來存貯要得到的信
public class MonitorInfoBean {
/** 可使用內存. */
private long totalMemory;
/** 剩余內存. */
private long freeMemory;
/** 最大可使用內存. */
private long maxMemory;
/** 操作系統(tǒng). */
private String osName;
/** 總的物理內存. */
private long totalMemorySize;
/** 剩余的物理內存. */
private long freePhysicalMemorySize;
/** 已使用的物理內存. */
private long usedMemory;
/** 線程總數. */
private int totalThread;
/** cpu使用率. */
private double cpuRatio;
public long getFreeMemory() {
return freeMemory;
}
public void setFreeMemory(long freeMemory) {
this.freeMemory = freeMemory;
}
public long getFreePhysicalMemorySize() {
return freePhysicalMemorySize;
}
public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {
this.freePhysicalMemorySize = freePhysicalMemorySize;
}
public long getMaxMemory() {
return maxMemory;
}
public void setMaxMemory(long maxMemory) {
this.maxMemory = maxMemory;
}
public String getOsName() {
return osName;
}
public void setOsName(String osName) {
this.osName = osName;
}
public long getTotalMemory() {
return totalMemory;
}
public void setTotalMemory(long totalMemory) {
this.totalMemory = totalMemory;
}
public long getTotalMemorySize() {
return totalMemorySize;
}
public void setTotalMemorySize(long totalMemorySize) {
this.totalMemorySize = totalMemorySize;
}
public int getTotalThread() {
return totalThread;
}
public void setTotalThread(int totalThread) {
this.totalThread = totalThread;
}
public long getUsedMemory() {
return usedMemory;
}
public void setUsedMemory(long usedMemory) {
this.usedMemory = usedMemory;
}
public double getCpuRatio() {
return cpuRatio;
}
public void setCpuRatio(double cpuRatio) {
this.cpuRatio = cpuRatio;
}
}
之后,建立bean的接口
public interface IMonitorService {
public MonitorInfoBean getMonitorInfoBean() throws Exception;
}
然后,就是最關鍵的,得到cpu的利用率,已用內存,可用內存,最大內存等信息。
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import sun.management.ManagementFactory;
import com.sun.management.OperatingSystemMXBean;
import java.io.*;
import java.util.StringTokenizer;
/**
* 獲取系統(tǒng)信息的業(yè)務邏輯實現類.
* @author GuoHuang
*/
public class MonitorServiceImpl implements IMonitorService {
private static final int CPUTIME = 30;
private static final int PERCENT = 100;
private static final int FAULTLENGTH = 10;
private static final File versionFile = new File("/proc/version");
private static String linuxVersion = null;
/**
* 獲得當前的監(jiān)控對象.
* @return 返回構造好的監(jiān)控對象
* @throws Exception
* @author GuoHuang
*/
public MonitorInfoBean getMonitorInfoBean() throws Exception {
int kb = 1024;
// 可使用內存
long totalMemory = Runtime.getRuntime().totalMemory() / kb;
// 剩余內存
long freeMemory = Runtime.getRuntime().freeMemory() / kb;
// 最大可使用內存
long maxMemory = Runtime.getRuntime().maxMemory() / kb;
OperatingSystemMXBean osmxb = (OperatingSystemMXBean) ManagementFactory
.getOperatingSystemMXBean();
// 操作系統(tǒng)
String osName = System.getProperty("os.name");
// 總的物理內存
long totalMemorySize = osmxb.getTotalPhysicalMemorySize() / kb;
// 剩余的物理內存
long freePhysicalMemorySize = osmxb.getFreePhysicalMemorySize() / kb;
// 已使用的物理內存
long usedMemory = (osmxb.getTotalPhysicalMemorySize() - osmxb
.getFreePhysicalMemorySize())
/ kb;
// 獲得線程總數
ThreadGroup parentThread;
for (parentThread = Thread.currentThread().getThreadGroup(); parentThread
.getParent() != null; parentThread = parentThread.getParent())
;
int totalThread = parentThread.activeCount();
double cpuRatio = 0;
if (osName.toLowerCase().startsWith("windows")) {
cpuRatio = this.getCpuRatioForWindows();
}
else {
cpuRatio = this.getCpuRateForLinux();
}
// 構造返回對象
MonitorInfoBean infoBean = new MonitorInfoBean();
infoBean.setFreeMemory(freeMemory);
infoBean.setFreePhysicalMemorySize(freePhysicalMemorySize);
infoBean.setMaxMemory(maxMemory);
infoBean.setOsName(osName);
infoBean.setTotalMemory(totalMemory);
infoBean.setTotalMemorySize(totalMemorySize);
infoBean.setTotalThread(totalThread);
infoBean.setUsedMemory(usedMemory);
infoBean.setCpuRatio(cpuRatio);
return infoBean;
}
private static double getCpuRateForLinux(){
InputStream is = null;
InputStreamReader isr = null;
BufferedReader brStat = null;
StringTokenizer tokenStat = null;
try{
System.out.println("Get usage rate of CUP , linux version: "+linuxVersion);
Process process = Runtime.getRuntime().exec("top -b -n 1");
is = process.getInputStream();
isr = new InputStreamReader(is);
brStat = new BufferedReader(isr);
if(linuxVersion.equals("2.4")){
brStat.readLine();
brStat.readLine();
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
String user = tokenStat.nextToken();
tokenStat.nextToken();
String system = tokenStat.nextToken();
tokenStat.nextToken();
String nice = tokenStat.nextToken();
System.out.println(user+" , "+system+" , "+nice);
user = user.substring(0,user.indexOf("%"));
system = system.substring(0,system.indexOf("%"));
nice = nice.substring(0,nice.indexOf("%"));
float userUsage = new Float(user).floatValue();
float systemUsage = new Float(system).floatValue();
float niceUsage = new Float(nice).floatValue();
return (userUsage+systemUsage+niceUsage)/100;
}else{
brStat.readLine();
brStat.readLine();
tokenStat = new StringTokenizer(brStat.readLine());
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
tokenStat.nextToken();
String cpuUsage = tokenStat.nextToken();
System.out.println("CPU idle : "+cpuUsage);
Float usage = new Float(cpuUsage.substring(0,cpuUsage.indexOf("%")));
return (1-usage.floatValue()/100);
}
} catch(IOException ioe){
System.out.println(ioe.getMessage());
freeResource(is, isr, brStat);
return 1;
} finally{
freeResource(is, isr, brStat);
}
}
java中不建議直接獲取字符串內存地址,因為java不像c語言,獲取內存地址是C語言的強項,java的弱項。但是java內存地址還是有一個應用場景,就是判斷兩個字符串內存地址是否相等來判斷是否是同一個對象,用雙等號“==”來比較的。參考代碼如下:
public class Test01 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str1="abc";
String str2=new String("abc");
System.out.println(str1 == str2);//輸出false
}
}
Java不允許獲得內存地址!
用ToString獲得的只是其對象編號。
Java語言設計就是不允許直接管理內存
1、首先打開java構造方法代碼。
2、接下來就可以獲得網卡物理地址方法代碼。
3、然后得到獲得機器IP地址方法代碼。
4、然后得到獲得機器子網掩碼方法代碼。
5、然后得到獲得機器默認網關方法代碼。
6、然后得到獲得DNS方法代碼。
7、最后得到主函數測試方法代碼。
擴展資料
當使用80386時,必須區(qū)分以下三種不同的地址:
邏輯地址:機器語言指令仍用這種地址指定一個操作數的地址或一條指令的地址。這種尋址方式在Intel的分段結構中表現得尤為具體,它使得MS-DOS或Windows程序員把程序分為若干段。每個邏輯地址都由一個段和偏移量組成。
線性地址:針對32位CPU,線性地址是一個32位的無符號整數,可以表達高達232 (4GB)的地址。通常用16進制表示線性地址,其取值范圍為0x00000000~0xffffffff。對64位CPU,線性地址是一個64位的無符號整數,可以表達高達2??? 。
物理地址:也就是內存單元的實際地址,用于芯片級內存單元尋址。物理地址也由32位無符號整數表示。
電腦的內存(尤其是指主存)是由許多“內存地址”所組成的,每個內存地址都有一個“物理地址”,能供CPU(或其他設備)訪問。一般,只有如BIOS、操作系統(tǒng)及部分特定之公用軟件(如內存測試軟件)等系統(tǒng)軟件;
能使用機器碼的運算對象或寄存器對物理地址定址,指示CPU要求內存控制器之類的硬件設備,使用內存總線或系統(tǒng)總線,亦或分別之控制總線、地址總線及數據總線,運行該程序之命令。
內存控制器的總線是由數條并行的線路所組成的,每條線路表示一個比特??偩€的寬度因此依電腦不同,決定了可定址之存儲單位數量,以及每一單位內的比特數量。
計算機程序使用內存地址來運行機器碼、存儲及截取數據。大多數的應用程序無法得知實際的物理地址,而是使用電腦的內存管理單元及操作系統(tǒng)的內存映射,為“邏輯地址”或虛擬地址定址。
參考資料:百度百科-內存地址