• 陈狄
    2021-12-21
    a在栈中没有争议,怎么都说r在堆上呢?r是引用变量,也在栈中吧,ramdom对象才在堆中吧。

    作者回复: 对。这题的本意其实是让大家能区分值类型和对象类型的,就没把引用说得那么清楚。你的说法是最准确的。

    共 2 条评论
    5
  • 郑童文
    2021-12-08
    您好老师,有两个问题我不太明白: 1)原文中说:“每一个 Java 方法的栈里面都有一个模拟栈”,栈中有栈? 这个模拟栈和变量表是保存在Java方法的栈的某一个栈帧的吗?还是每个栈帧都要保存一个模拟栈和变量表? 2)请问“可执行权限”的内存区域怎么理解? 就是代码段吗?

    作者回复: 1. 每个栈帧都要保存一个模拟栈和变量表。 2. 它和普通的代码段最大的不同在于,它是可写可执行的。也就是说运行时可以修改。

    
    1
  • 送过快递的码农
    2021-11-18
    终于到Java了 ,发现还是有许多看不懂。我猜应该还是在堆里面吧。虽然从Java的角度来说,临时变量是应该在栈里面。但是我猜想对于C进程来说,在解释之前,进程是不知道的啊,只有执行的时候,才知道你是在Java栈还是Java堆里面,而且老师也说过,Java是模拟的栈还有变量表,那模拟栈应该是对应C的结构体吧,应该是放堆存着先?

    作者回复: 你的这些问题,我们放在第19,20课会讲一些。希望你持续关注。

    
    
  • kylin
    2021-11-17
    a是局部变量,存放在虚拟机的模拟栈上,但JVM会将模拟栈创建在进程虚拟内存哪里呢?猜测是栈 r是Java对象,分配到Java堆中,JVM应该提前使用mmap创建一大块内存,应该是在内存映射区吧

    作者回复: 不是哦。JVM自己完全托管了。没有再借用Linux的内存布局。我后面会讲这个问题。

    
    
  • 李二木
    2021-11-17
    r是在堆上,a在虚拟机栈上?

    作者回复: very good:)

    共 2 条评论
    
  • 鵼
    2021-11-23
    终于看到java了,思考题,a是本地变量,在栈上,具体点应该是在本地变量表中,r是对象,在堆上。目前java没有栈上分配对象技术,但是是可以将对象中的属性,比如通过逃逸分析,一些对象只在方法内用,并且用到的只是对象的一些属性,是可以将对象的属性直接放到栈上的,因此可以不用创建对象。但是r因为用的是方法,虽然只在本方法用,但是java没有栈上分配对象的技术,所以还是在堆上。其实更准确点应该是在tlab上。
    
    2
  • keepgoing
    2021-11-20
    虽然不太熟悉Java语言,但也学到了核心知识点,👍
    
    1
  • 设置昵称
    2022-06-11
    遇到过单机code Cache满的问题,一直没有找到原因。能帮忙提供一下排查思路吗?
    
    