Ofe*_*Ron 0 java memory new-operator
考虑c中的LinkedList例子,其中我显式预先分配堆栈上的N个节点结构用作池或节点堆栈,而不是使用慢mallocs和frees,(我不需要在运行中释放节点的功能,所以堆栈会这样做):
#define N 40000
typedef struct node_t {
void * ele;
struct node_t * next;
}node,*Pnode;
node Stack[N];//memory allocation for the linkedlist nodes
int sp=0;
Pnode createNode(void * x) {
Pnode temp=&Stack[sp++];
temp->ele=x;
temp->next=NULL;
return temp;
}
Run Code Online (Sandbox Code Playgroud)
当我试图在JAVA中模仿上面的想法时,那就是我想出来的......你能完成这个类,使Node []堆栈成为一个节点对象数组,该内存是在STACK中预先分配的吗?
public class Node<E> {
private final static int n = 40000;
private static Node[] stack = ?
private static int sp = 0;
private E ele;
private Node next;
private Node () {}
public Node createNode(E e) {
stack[sp].ele=e;
stack[sp].next=null;
return stack[sp++];
}
}
Run Code Online (Sandbox Code Playgroud)
Basiclly我想知道这个,因为我知道我想从我的程序能够做什么,而且我知道我不需要能够释放和重用一块内存,我希望能够快速分配一个Node对象即使我的程序几乎有一个HEAP OVERFLOW,也会点亮.最大容量为N的节点堆栈和像我一样的运行索引对我来说是完美的...
不.Java没有明确的机制来在堆栈上分配内存.
使用new是分配内存的唯一方法.然后由JVM决定内存的来源,并从那时起对其进行管理.
编辑:我刚看了你的代码.你甚至没有在堆栈上分配内存.您似乎正在做的是拥有一个存储在数据段上的堆栈数据结构,并且您自己管理.
在Java中,没有直接的等价物:
node Stack[N];
Run Code Online (Sandbox Code Playgroud)
换句话说,没有办法N在连续的内存块中构造对象.您必须分配一个N引用数组,然后创建N对象.
也就是说,请记住,在现代JVM中,new基本上相当于指针凹凸.这是:(a)便宜; (b)与你正在做的相似sp.
| 归档时间: |
|
| 查看次数: |
1151 次 |
| 最近记录: |