Java 识别多线程程序中堆栈和堆上的内容?

Java 识别多线程程序中堆栈和堆上的内容?,java,multithreading,heap-memory,stack-memory,Java,Multithreading,Heap Memory,Stack Memory,所以,如果您要在每一行表示这个多线程程序的堆栈和堆 第7行 第9行 第4行 由此,我想了解Java如何在堆和堆栈中分配内存。 也许可以用一种方式表示这一点,表示引用/对象链接,它表示当控制流刚刚执行上给出的指令时程序的状态。你将如何代表它?图表可能会有所帮助?堆栈和堆在任何Java程序中都以相同的方式运行,无论是多线程还是非多线程。@varun-你错了。。JVM不会为对象a创建堆。它在已经创建的堆上分配对象。堆栈是一个不同的内存位置,每个线程都有自己的Java堆栈、本机堆栈和Java程序计数器。

所以,如果您要在每一行表示这个多线程程序的堆栈和堆

第7行

第9行

第4行

由此,我想了解Java如何在堆和堆栈中分配内存。
也许可以用一种方式表示这一点,表示引用/对象链接,它表示当控制流刚刚执行上给出的指令时程序的状态。你将如何代表它?图表可能会有所帮助?

堆栈和堆在任何Java程序中都以相同的方式运行,无论是多线程还是非多线程。@varun-你错了。。JVM不会为对象a创建堆。它在已经创建的堆上分配对象。堆栈是一个不同的内存位置,每个线程都有自己的Java堆栈、本机堆栈和Java程序计数器。此外,我建议您在搜索之前先问一下:,@TheLostMind我只是想补充一下,据我所知,在某些情况下,如果对象A太大而无法容纳,并且堆当前小于最大堆大小,JVM可能需要分配更多内存并增长堆。例如,在第7行,这是否正确?其他线路呢?
public class Example {
    private int stateVal = 0;
    public static void main(String[] args) { 
        Example a = new Example(50); // Line 4
    }
    public Example(Integer stateVal) {
        this.stateVal = stateVal; // Line 7
        Thread a = new MyThread("Thread-a");
        Thread b = new MyThread("Thread-b"); // Line 9
        a.start();
        b.start();
        while ((a.isAlive()== false ) || (b.isAlive()== false))  {
            try { 
                this.wait(1000); 
            } catch ( InterruptedException e) { }
        }
        synchronized ( this) {
            this.stateVal++;
        }
    }
    private synchronized int getStateVal() {
        return this.stateVal;
    }
    public class MyThread extends Thread {
        int stateVal = 0;
        public MyThread(String name) {
            super(name);
        }
        public void run(){
            for (;;) {
                System.out.println(this.getName());
                System.out.println(Example.this.getStateVal());
                System.out.println(this.stateVal);
                this.stateVal++;
            }
        }
    }
}