i***c 发帖数: 301 | 1 写了个jdbc的程序,现在-Xmx1468m都要out heap memory
怎么用工具看哪里出了问题
是不是 new在循环里? |
|
j*a 发帖数: 14423 | 2 as far as i know javac translate String s = "abc" to String s = new String("
abc"). u can figure out the rest. if not, just write a 10-liner to test.
heap. no.
no
,
yes
same |
|
e*n 发帖数: 1511 | 3 java.lang.OutOfMemoryError: Java heap space
出了这个error. |
|
q*******i 发帖数: 353 | 4 每次运行都提示Java:out of memory : heap space
这个问题怎么解决?谢谢 |
|
f*******n 发帖数: 12623 | 5 yes. Arrays are objects. Objects are all dynamically allocated on the heap. |
|
s****s 发帖数: 628 | 6 really? everything in Java is object, so everything is in heap? |
|
F*******X 发帖数: 143 | 7 我是 Java 新手,也在学习中,我也来说2句。
例子:int[] numberArryExample = new int[];
1)"numberArryExample" on the stack
2)"new int[]" on the heap (上面 convergence (Rex) 已经提到了这点,keyword
是"new") |
|
t***a 发帖数: 416 | 8 如果numberArrayExample是field, 那么他在heap |
|
F*******X 发帖数: 143 | 9 你说得对, instance variable 是 on the heap。 谢谢补充。
突然又想到,自己补充一下:doSomething (int[] numberArrayExample);这 “
numberArrayExample”又会是 on the stack。 |
|
F*******X 发帖数: 143 | 10 只是近来看书看到“Java is pass-by-value”而思考了一下,所以对 stack 和 heap
有点想法而已。 |
|
s****s 发帖数: 628 | 11 你这样理解, 我还真是无话说了.
这样的话,当create一个variable时, reference 在 stack, object在heap. 真是奇怪
了. |
|
s****s 发帖数: 628 | 12 为什么instance variable在heap, 其它variable就不在吗?
on |
|
g*****g 发帖数: 34805 | 13 Because instance variable is part of object instance. And object instance is
created on heap. |
|
z*******3 发帖数: 13709 | 14 不奇怪
放在stack里面便于查找
所有的数据放在一起的话
一旦遇到一个特别大的heap的话
找起来效率就很低了
应该是所有的底层都是这个逻辑 |
|
|
F*******X 发帖数: 143 | 16 我说的是对的,local variable (reference) 都在 stack, object 和 instance
variable 都在 heap。这些都是基础知识, 每本书都教的,还有 Java is pass-by-
value, 思考一下这意思. |
|
s****s 发帖数: 628 | 17 这些make sense, 但有的地方是有点奇怪.
我在java方面还是门外汉, 再等等吧.
奇怪的地方是,local的话, new 一个东西,肯定是放在heap.我印象中c++是这样一来的.
不知道有人证实一下? 那java的变化也太大了. |
|
t***a 发帖数: 416 | 18 c++中
void foo(){
A a; //a在stack中,如果foo结束,a就销毁
A* a = new A; //foo结束,a指向的东西还在, 所以你需要delete a在其他什么地方
}
java中
void foo(){
A a = new A(); //a只是个reference, 在stack中,a指向的instance在heap中。如
果foo结束了,销毁的只是这个ref。如果再没有任何ref指向new A()出来的这个
instance, GC会在以后的某个时间自动销毁instance
}
所以其实没啥大差别。。。。。一个自动档,一个手动挡。。。
的. |
|
s****s 发帖数: 628 | 19 这样理解就是自己给自己添麻烦.
local也好, global也好,还有auto什么的, 主要理解就是生存周期.
local生存周期短, 用完就没, 所以放在stack.
其它的生存周期长, 需要保存, 想放在stack都不行, 必须得放heap.
用这个准则, 再去理解什么instance variable, method variabl就很清楚了, 也不用
去记.
(
local |
|
w**z 发帖数: 8232 | 20 stack is with the thread, heap is global to the process/ jvm . you can set
the size for both through jvm startup parameter . |
|
n****e 发帖数: 678 | 21 我的理解, 所有这些variables都在stack上面。因为这些都是local variables。
这些指针所指向的object在heap上面。
C++里面需要人为的delete这些allocated memory space, 否则会产生memory leakage.
Java是通过GC来自动的回收这些allocated memory space。 |
|
z*******3 发帖数: 13709 | 22 如果我没有记错
static变量是放在方法区里面
跟类本身的生命周期共进退
不完全是heap区 |
|
F****n 发帖数: 3271 | 23 Java 7 escape analysis
Objects only referenced by local variables are stored in stack instead of
heap. |
|
k**m 发帖数: 73 | 24 jvm specification 都没讲过怎么manage heap, 我也不是开发jvm,
这从何说起呀 |
|
J**B 发帖数: 204 | 25 面个公司,貌似经常有heap dump的问题,请大牛出来说说,给点资料恶补下。
1.use MAT see which unreachable object is not garbage collected.
2. assign more memory to the application from the system
3. compress the image/video file, the application have to load. |
|
N****w 发帖数: 21578 | 26 静态的不是说 constant
是说 static variable/data address, vs dynamic memory address,vs stack
variable/address.
是直接在 binary image 里就存在的 data
一般是装载到程序内存空间的固定位置,不在 heap 不在 stack 里。 |
|
f*****Q 发帖数: 1912 | 27 出个连线题,看看楼主能作对不?
A: static int i;
B: int * i = malloc(sizeof(int));
C: char [] i = "i";
D: int function(){int i; return 0;}
a: heap
b: data
c: stack
d: BSS |
|
o****i 发帖数: 1706 | 28 程序运行正常,可是在测memery leak的时候报上面那个错,具体错误消息如下:
==25663== Conditional jump or move depends on uninitialised value(s)
==25663== at 0x400C9F: add_edge (graph.c:59)
==25663== by 0x40071A: main (main.c:13)
==25663== Uninitialised value was created by a heap allocation
==25663== at 0x4A0515D: malloc (vg_replace_malloc.c:195)
==25663== by 0x400A80: add_vertex (graph.c:22)
==25663== by 0x400DF8: add_edge (graph.c:84)
==25663== by 0x40071A: main (main.c:13)
我的程序用链接表构建一个无向图来解决TSP的.
graph.c:2... 阅读全帖 |
|
c********e 发帖数: 383 | 29 array on heap and array on stack.
in general c++ doesnt go well with old-style array, there are just way too
many cavities for ppl to handle. |
|
q*****g 发帖数: 72 | 30 既不在heap,也不在stack, 在global name space里 |
|
t**m 发帖数: 263 | 31 not stack
kind of globle heap |
|
t*******l 发帖数: 3662 | 32 really? who says "heap" and who says "stack".
the language itself does not specify any data segment for the static
variable as long as the behavior is correct.
in practice, many systems will put static variables into
the data segment (if initialized)
or the bss segment (if uninitialized). |
|
c********x 发帖数: 84 | 33
it is OK to new an array or vector, the pointer is located at stack but the
instant is located at the global heap. |
|
r*****e 发帖数: 792 | 34 没有使用STL的情况下,有如下程序:
int *array = new int(1000000);
if (array == 0) cout<<"insufficient memory"<
for (...) //赋值
array[i] = 随机数;
但是当i=33790后,就出现segmentation fault,
试过多次总是在33790后出错。如果array换成double
则改为在33790/2 = 16895后出错。显然和memory size
有关系。
既然array pointer没有返回空值,说明内存申请到了,但是
为什么出错呢?是系统heap size不够还是什么别的原因?
ulimit -a 显示stack size 为(kbytes -s) 10240, 而
33790×4没有10240k大啊?man ulimit说单位是1024byte,
也不知道ulimit -a中显示的到底是byte呢还是kbyte。
反正试过‘ulimit -s 很大的数’ 也没区别。
另外,如果用 int array[1M]的话,可以运行,但是到3M左右
就又是segmen |
|
w*******e 发帖数: 285 | 35 我的理解是function内部的变量都进stack,普通function执行完了就被清除,静态函数
的变量一直在stack里面直到程序终结。heap是放静态变量和全局变量的地方,动态分
配的内存也放在stack当中,如果不release就会有泄漏,直到程序终结。
请问这是对的吗? |
|
f*******y 发帖数: 988 | 36 说C/C++么 ?
function内部的local在stack上,执行完就清除
普通花括号括起来的也是
不初始化
static和global在BSS上,初始化为0
常量和literal在数据段上
动态的一般在heap上,是否初始化取决你的方法
动态也有在stack上的(alloca)
不适用于JAVA和.NET |
|
q***q 发帖数: 3356 | 37 global/static variables究竟是在heap里,还是在紧靠着main()的text segment的
stack里? |
|
z****e 发帖数: 2024 | 38 请问这两个分配完内存以后,那个操作更快一些?
除了动态分配这个标准,还有什么其他标准是选择heap还是stack的依据?
最后,delete和free,两个到底区别在哪里呀?(不是delete要对应new这个区别) |
|
f*********g 发帖数: 207 | 39 stack是不是由编译器限制大小的,最大多大一般?
heap应该接近物理内存大小吧? |
|
g******r 发帖数: 213 | 40 stack大小由系统决定,表现为由编译器决定。通常为1M?你去google一下吧。
heap接近实际内存大小,受当时使用环境影响。 |
|
r****t 发帖数: 10904 | 41 stack heap collision. 一般来说是 runtime error. 我半道的,还不学cs. 只知道这
个名词。 |
|
i*****o 发帖数: 1714 | 42 你这个正好在gc之前看heap的要求太高,没一个browser能支持你。实在想做的话只有
你自己compile一个chrome了。
★ 发自iPhone App: ChineseWeb 7.3 |
|
d****n 发帖数: 1637 | 43 这个图是我在网上找的,不是我写的。
现在我的结论是,
win32时代,非常混乱。x86好些。
linux 一直就是heap low ,stack up.
那个 stack 向上长,我也很奇怪。 |
|
s****y 发帖数: 503 | 44 这两天有个Java的面试,job description里有句Understanding of different OS
Memory management strategies and heap structure,只是什么意思?我应该看些什
么做准备呢? |
|
s********k 发帖数: 6180 | 45 Java需要知道这么底层的吗?heap structure看OS的教科书,或者简单点,能把malloc
搞清楚底层是怎么分配memory的基本差不多了,不过这是C的范围了 |
|
f**e 发帖数: 115 | 46 C++,运行时Free的时候发生Heap corruption错误。
怎么Debug?
谢谢!!! |
|
w**a 发帖数: 487 | 47 俺是刚学计算机2个月的新手,之前没有任何编程知识, 请大侠们帮忙, 先谢谢了.
怎么用linked binary tree来实现min binary heap? 要求只能用linked structure来
实现,不能用array来实现.
Node class 如下:
class Node{
int number;
Node parent, left, right;
Node (int number){
this(number,null,null)
}
class minBinaryHeap{
?????
} |
|
c*****m 发帖数: 315 | 48 搞了一上午搞出来了第一题,包含以下几点
1. 基本想法类似于HEAPSORT, 每次取HEAP 的最小值,和BST tree 当前最小位置的值
交换,然后再维护HEAP 的结构,同时取BST 中序遍历的下一个值。在整个过程中,树
的一部分变成了BST TREE, 另一部分还是HEAP 结构。
下面介绍相关的步骤。
2. 取HEAP 的最小值:粗略的想法是用HEAP[0]。这里有个问题:当HEAP[0] 被并入BST
部分以后,最小值不再是HEAP[0],而是HEAP[0] 的右子树。可以证明HEAP[0] 被并入
BST 的时候,它的左子树已经全部在BST 里了,而它的右子树都不在BST里,因此可以
TRACK 当前HEAP 的ROOT。
3.维护HEAP 的结构。算法和SIFTDOWN 一样,但要注意的是SIFT DOWN 的时候必须要检
查当前节点的子节点是不是在BST 部分,如果是,就停止交换。要做到这一点,只需要
TRACK 住当前HEAP 的最小值,BST 里的元素都会小于它。
代码如下(HEAP 用数组heap 表示):
//取一个BST子树最小节点的索引, 辅助函数
... 阅读全帖 |
|
s*w 发帖数: 729 | 49 不知道为啥,我的 heap 时灵时不灵的?请看下面的 code 和输出显示
#include
#include
#include
using namespace std;
struct ListNode {
int val;
ListNode *next;
ListNode(int v):val(v),next(NULL) {}
};
bool minHeapPredicate(ListNode* lhs,ListNode* rhs) {
return lhs->val > rhs->val;
}
class Solution {
public:
ListNode *mergeKLists(vector lists) {
ListNode *retHead = NULL, *retTail = NULL;
// store values and nodes into heap
vector ... 阅读全帖 |
|
h***n 发帖数: 276 | 50 according to your description, I think the solution of using two heaps would
be:
maintain a min-heap & a max-heap, which satisfying that
1) all numbers in min-heap are larger or equal than that of max-heap
2) the difference of the numbers in two heaps should be no more than 1, depe
nding on that the total number of numbers is odd or even
with the above property, the median can be easily derived from top elements
on heap(s)
therefore, the algorithm is designed to maintain the above two properties... 阅读全帖 |
|