开发者社区> 问答> 正文

java堆,栈问题

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

展开
收起
蛮大人123 2016-06-08 11:29:57 1968 0
3 条回答
写回答
取消 提交回答
  • 堆栈内存相关的,当需要new大量对象时需要关注内存溢出问题,而栈一般来说不会溢出,但不排除当你递归深度太大也会报StackOverFlow

    2019-07-17 19:31:31
    赞同 展开评论 打赏
  • 补充说明:栈,主要存放引用和基本数据类型;堆,用来存放new 出来的对象实例,包括对象变量以及对象方法。
    java中很少自己操作堆栈,除非对性能有严格要求的情况下,例如netty的内存管理。但深刻理解堆栈的区别,有助于写出更优秀的程序。

    栈是跟着线程的,每个线程有一个栈。而堆只有一个,一个jvm只有一个堆内存。
    栈也是线程私有的,生命周期与线程相同。java中广义的栈,指的就是此处内存。
    每个方法在执行时,都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
    每个方法调用到执行完毕,都对应一个栈帧在虚拟机栈中入栈出栈的过程。

    2019-07-17 19:31:31
    赞同 展开评论 打赏
  • 我说我不帅他们就打我,还说我虚伪

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

    2019-07-17 19:31:31
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载