jadetang

昨天面试被问了 JVM 中堆和栈的区别,但是我竟然没有回答出来。

  •  
  •   jadetang · Jun 22, 2017 · 9102 views
    This topic created in 3429 days ago, the information mentioned may be changed or developed.
    感觉这么基础的知识不知道,确实不应该。但是我工作也有一段时间了,我知道了堆和栈的区别对我工作也没有任何帮助啊,平时也用不上。
    Supplement 1  ·  Jun 22, 2017
    问了老司机,一般的话,尽量用简单类型,保证分配在栈中,这样程序开销比较小。这也是目前唯一能影响工作的地方了。
    38 replies  •  2017-06-23 18:28:39 +08:00
    Adia
    Adia
    Jun 22, 2017
    1
    至少你可以知道推测出在项目中出现堆异常或栈异常的原因
    pusidun
    pusidun
    Jun 22, 2017
    2
    有没有帮助先不谈,这个随便搜个面经都会提到的,只能说明你没有认真准备

    大公司怎么面试有工作经验的我不清楚,不少小公司的面试基本就是:“下午有个人来面试了,你们几个去下,搜下网上题目”…
    0915240
    0915240
    Jun 22, 2017
    3
    平时救火的时候会有用。
    jiangzhuo
    jiangzhuo
    Jun 22, 2017
    4
    培训班出来的回答这个问题都不用动脑子吧,就跟背诵课文一样直接背标准答案。
    qiaobeier
    qiaobeier
    Jun 22, 2017
    5
    想起前几天面一个妹子,问盒模型,举几个 html tag 都没答出来。。。 不过我是相信她能干活,在某些情况下甚至能干的很好。只是她不适合我们的职位而已。
    arrow2015
    arrow2015
    Jun 22, 2017 via Android
    6
    所以,答案是什么
    ipwx
    ipwx
    Jun 22, 2017❤️1
    7
    如果是科班的话,入门 C/C++ 就是要手工 malloc/free 堆内存的。再往后,操作系统甚至需要知道 malloc/free 的算法。

    不是我太严苛,楼主如果连堆和栈都不知道,怎么知道为什么尾递归不好?怎么优化大型服务器 Java 程序,免得 gc 破坏实时性?堆和栈,这是基础中的基础,如果连这类基础都不愿意去知道,你写得程序只能停留在 getXXX/setXXX 以及拖几个控件的程度。
    irgil
    irgil
    Jun 22, 2017
    8
    为什么没有帮助???
    jadetang
    jadetang
    OP
    Jun 22, 2017 via Android
    9
    @ipwx 我是做 Java 的,尾递归 Java 是不支持的。至于根据堆和栈的区别来优化程序,能举个例子吗?
    jadetang
    jadetang
    OP
    Jun 22, 2017❤️1
    10
    @arrow2015 大致是这样的,JVM 中每个线程都会分配一个栈,栈里面存放的都是方法的本地变量和对象引用。栈的大小有限制的。JVM 中有一个堆,所有的对象内存都分配在堆上。(有些对象有常量池,例如 String )
    jadetang
    jadetang
    OP
    Jun 22, 2017
    11
    @irgil 可能是我工作太 low,所以没有遇到过。神伤。
    Cloudee
    Cloudee
    Jun 22, 2017
    12
    比如说局部变量为什么比对象里的变量快那么多
    twogoods
    twogoods
    Jun 22, 2017 via Android❤️2
    13
    我们应届生也很困惑,面试一上来就 jvm,垃圾回收,没有场景来运用,就跟背书上说的东西差不多
    jadetang
    jadetang
    OP
    Jun 22, 2017
    14
    @Cloudee 局部对象是存在栈里面的,虽然和堆一样,都是在内存中。但是栈的 cache 亲和性比较好。问题是这样的,你写程序的时候,能控制吗。
    leejanfin
    leejanfin
    Jun 22, 2017 via iPhone
    15
    熟悉内存模型 对你写多线程的代码会有一些帮助
    ppwangs
    ppwangs
    Jun 22, 2017❤️1
    16
    大家都一样,去面试都要刷题的。
    只不过大神们刷的题多了,都背熟了。
    jadetang
    jadetang
    OP
    Jun 22, 2017
    17
    @leejanfin 貌似内存模型主要的是涉及数据修改的可见性,好像和堆和栈没关系。
    ofblyt
    ofblyt
    Jun 22, 2017
    18
    @jadetang #17 有点关系的,方法内部不引用全局变量不会有线程安全问题(我是这么理解的)
    leejanfin
    leejanfin
    Jun 22, 2017 via iPhone
    19
    @jadetang 嗯 我上面的描述确实不太对 JVM 和 JMM 不是一个层次的 不过面试嘛 总不能问你 Java 的 API 怎么用吧...
    teaaa
    teaaa
    Jun 22, 2017
    20
    面试刷题很重要
    ipwx
    ipwx
    Jun 22, 2017
    21
    @jadetang All right,我说的那个优化针对的是堆上面对象的优化。当然,我不写 Java,只是对 JVM 上面 GC 神调教的案例略有耳闻。如果你有兴趣,我觉得你可以去查找一下这方面的资料。
    ihuotui
    ihuotui
    Jun 22, 2017 via iPhone
    22
    最高境界是对象不受 gc 影响和扫描
    wangdu2012
    wangdu2012
    Jun 22, 2017 via iPhone
    23
    哪面试的?阿里的人最喜欢搞这种吧
    huhu3312
    huhu3312
    Jun 22, 2017
    24
    栈是线程私有的,堆是线程共享的。
    smileme
    smileme
    Jun 22, 2017
    25
    @twogoods 哈哈,背都不来背,面试没有诚意啊
    twogoods
    twogoods
    Jun 22, 2017 via Android
    26
    @smileme 活捉一逗逼
    jadetang
    jadetang
    OP
    Jun 22, 2017
    27
    @smileme 我最近也没在找工作,但是朋友非得内推,我就随意面试了一下。
    undeflife
    undeflife
    Jun 22, 2017
    28
    @ipwx 尾递归不好?有编译器优化的尾递归可以视为普通迭代,不好在哪?
    stcasshern
    stcasshern
    Jun 22, 2017
    29
    是不是可以这里解释啊,栈保存对堆中数据的引用,以及一些基本类型的数据,堆得话是保存实际数据。??
    sunqb
    sunqb
    Jun 22, 2017 via Android
    30
    如果你够牛逼,你就知道哪些地方用到了
    kx5d62Jn1J9MjoXP
    kx5d62Jn1J9MjoXP
    Jun 23, 2017
    31
    为什么楼上一堆回答性能的, 这根本没回答到点上吧.
    栈 /stack 是实现方法 /函数相互调用的基本数据结构, 每个线程都有自己的一个栈, 因为每个线程都要执行自己的方法.
    堆 /heap 则顾名思义就是存放一堆对象的内存区域
    xuboying
    xuboying
    Jun 23, 2017 via Android
    32
    简历里自称的精通程度,和工资,被面试的问题难度挂钩。简历里吹牛就小心被打脸。不会堆栈可以写只会基础 java。
    oukichi
    oukichi
    Jun 23, 2017
    33
    讲道理,你的工作用不到堆和栈的话可以赶紧考虑换工作了。
    miketeam
    miketeam
    Jun 23, 2017
    34
    那是栈的地址位高还是堆高呢?我看 cs50 里面老师画了一个图,但是忘了!!
    ipwx
    ipwx
    Jun 23, 2017
    35
    @ssynhtn 如果堆栈和性能无关,那你了解它干嘛?自娱自乐嘛?
    kx5d62Jn1J9MjoXP
    kx5d62Jn1J9MjoXP
    Jun 23, 2017 via Android
    36
    @ipwx 我问你牛肉和苹果的区别,你连这两个一个是来自动物一个是来自植物都没做出区分,就大谈特谈牛肉怎么做才好吃,这不是答非所问是什么?
    eric2021
    eric2021
    Jun 23, 2017
    37
    吓得我赶紧又去刷了一下题,可还是记不住
    dfguo
    dfguo
    Jun 23, 2017
    38
    除非面试官经验比较少,一般面试不会因为一道题把人刷下去的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1016 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 68ms · UTC 18:38 · PVG 02:38 · LAX 10:38 · JFK 13:38
    ♥ Do have faith in what you're doing.