address.java
来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 84 行
JAVA
84 行
/*
* $Id: Address.java,v 1.2 2003/11/28 09:12:35 epr Exp $
*/
package org.jnode.vm;
import org.jnode.vm.classmgr.VmArray;
/**
* Address is not a normal Java object. Instead it is used as a reference
* to a virtual memory address. Variables of this type are not considered to
* be objects by the garbage collector.
* @author epr
*/
public abstract class Address extends VmSystemObject {
/**
* Convert a 32-bit (int) address into an Address reference.
* @param ptr32
* @return Address
*/
public static Address valueOf(int ptr32) {
return Unsafe.intToAddress(ptr32);
}
/**
* Convert a 64-bit (long) address into an Address reference.
* @param ptr64
* @return Address
*/
public static Address valueOf(long ptr64) {
return Unsafe.longToAddress(ptr64);
}
/**
* Convert an Object reference into an Address reference.
* @param object
* @return Address
*/
public static Address valueOf(Object object) {
return Unsafe.addressOf(object);
}
/**
* Gets the address of the start of the data of a given array.
* @param arrayObject
* @return Address
*/
public static Address addressOfArrayData(Object arrayObject) {
final int slotSize = Unsafe.getCurrentProcessor().getArchitecture().getReferenceSize();
final Address objAddr = Unsafe.addressOf(arrayObject);
return Unsafe.add(objAddr, (VmArray.DATA_OFFSET * slotSize));
}
/**
* Convert an address to a 32-bit integer.
* @param address
* @return int
*/
public static int as32bit(Address address) {
return Unsafe.addressToInt(address);
}
/**
* Convert an address to a 64-bit integer.
* @param address
* @return long
*/
public static long as64bit(Address address) {
return Unsafe.addressToLong(address);
}
public static long distance(Address a1, Address a2) {
return Math.abs(Unsafe.addressToLong(a2) - Unsafe.addressToLong(a1));
}
public static Address add(Address a, int incValue) {
return Unsafe.add(a, incValue);
}
public static int compare(Address a1, Address a2) {
return Unsafe.compare(a1, a2);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?