2 justifysd justifysd 于 2016.04.03 23:26 提问

怎么分辨堆,栈的情况

堆和栈对于cpu影响到底有多少?Java在什么情况下要考虑堆栈问题?谢谢各位大牛

4个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.04.04 07:37
首先,堆和栈和CPU没有关系,也不是我们能使用的,我们开发中没有操作堆和栈的权利;堆和栈是Java虚拟机的内存模型中的两种不同的内存模型,各自有自己的作用。其次,堆是虚拟机存放Java对象的地方,所有我们代码中new的对象都存在堆内存中的,而方法中定义的变量即赋值语句左侧的变量都是存在栈中的。栈的作用是实现Java方法调用的内存模型。最后,堆是所有线程共享的内存区域,所以堆中对象的并发访问可能会涉及同步问题,而栈是线程私有的,Java虚拟机会为每个创建的线程都分配一个线程栈的。
caozhy
caozhy   Ds   Rxr 2016.04.03 23:29

局部变量放在堆栈上,除此之外,其余变量,包括局部变量指向的对象引用都在堆上。这个没有什么可以选择的。
从语法的角度来说,无非就是一个变量应该定义成局部还是成员变量,如果你希望变量在多个函数中共享,或者在函数退出以后还可以继续使用,就定义成成员变量,否则用局部变量。
放在堆栈上理论上性能更好一些。

Melod_bc
Melod_bc   2016.04.04 08:44

堆栈和CPU没有关系,在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,堆内存用于存放由new创建的对象和数组.

u010233323
u010233323   2016.04.04 08:38

堆和栈是内存的一部分,与内存有关,和cpu处理器无关,怎么分辨呢?堆就是存放真实的对象,栈中存放基本类型的变量,例如int, String等等,栈中一般的数据可以共享
,堆中还存有字符池而不是常量池,这是字符串特有的,还有就是java的所有内存运行起来不是人管理的,而是全由jvm管理的,你可以看看jvm运行管理
机制了解一下内存,你问的什么时候注意内存呢,这个应该写久了,你会发现怎么写更有效率,怎么写复杂度最小,内存不要太担心。

Csdn user default icon
上传中...
上传图片
插入图片