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