Anu*_*pta 2 java memory arrays byte object-reference
我有一个字节数组和一个对象引用.
byte[] data = new byte[128];
Block b = new Block();
Run Code Online (Sandbox Code Playgroud)
我想在"data"数组的最后2(或4)个字节中存储引用b .
请注意:我不想序列化对象并存储在字节数组中.我需要存储一个引用新块的指针(引用).
编辑
我的Block类如下
public class Block {
byte[] data ;
public Block(){
data = new byte[128];
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,数据数组将使用126个字节来存储字符串,并使用最后两个(或4个)字节来存储对另一个块的引用.它的链接列表.
我本可以使用Block类的不同定义[通过在类本身中包含对Block的引用]来完成它.但是问题语句指出只有最后2个字节的约束应该用作对另一个块的引用.从其他帖子我开始知道在jvm(32位)中,引用的大小为4个字节.因此我认为它只能使用最后4个字节来完成
来自问题陈述的片段
块的最后2个字节用于指向下一个块.假设文件是8块大小,那么第4块的最后2个字节将指向第5块,第5块的最后2个字节指向第6块,依此类推.
基本上,数据数组将使用126个字节来存储字符串,并使用最后两个(或4个)字节来存储对另一个块的引用.它的链接列表.
您可以通过存储块索引来完成此操作.
例如
// list of blocks so you can lookup any block using a 16-bit index.
List<Block> blocks = new ArrayList<Block>();
int indexInBlocksToNext = ...
data[126] = (byte) (indexInBlocksToNext >> 8);
data[127] = (byte) indexInBlocksToNext;
Run Code Online (Sandbox Code Playgroud)
我本可以使用Block类的不同定义[通过在类本身中包含对Block的引用]来完成它.但是问题语句指出只有最后2个字节的约束应该用作对另一个块的引用.从其他帖子我开始知道在jvm(32位)中,引用的大小为4个字节.因此我认为它只能使用最后4个字节来完成
所有32位系统都使用32位指针或引用.您不能在Java中放置引用,因为没有通过数字引用对象的全局方式.您可以获取对象在内存中的位置,但此位置可以随时更改.
使用Java 7,启动之前使用的最小内存大约为1.3 MB.
$ java -mx1200k -version
Error occurred during initialization of VM
Too small initial heap for new size specified
$ java -mx1300k -version
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)
这意味着在程序启动之前,您已经使用了超过1 MB的预算.
| 归档时间: |
|
| 查看次数: |
2162 次 |
| 最近记录: |