gpt4 book ai didi

java - java类方法在单线程和多线程环境下如何分配内存并执行?

转载 作者:行者123 更新时间:2023-12-02 03:34:40 24 4
gpt4 key购买 nike

我读到了如何执行方法,这就是我的理解:1)方法在方法区中分配内存,并且只维护一个副本,该副本在类的所有实例中使用。2) 当从实例调用方法时,当前线程(单线程环境)会加载 main,然后加载通过实例调用的方法,例如:

main(String ags[])
{
A a = new A();
a.method();
}
// code of method
method()
{
for(int i=0;i<25;i++)
system.out.println(i);
}

因此对于这个线程来说,它有自己的调用堆栈,然后在方法调用时,相同的方法体及其局部变量被推送到主方法上方的同一堆栈上。

现在基于上述理解,我不明白的是,在多线程环境中,如果我运行两个线程,相同的代码将如何表现并且两者共享同一个实例。例如:

//My run method for myRunnable
run()
{
a.method();
}

Thread one = new Thread(new myRunnable(a)); // object from above
Thread two= new Thread(new myRunnable(a));

现在,当两个线程开始执行时,它们将拥有自己的调用堆栈。

这种情况下共享对象的方法将如何执行?

谢谢

最佳答案

1) 方法在方法区中分配内存,并且只维护一个副本,该副本在该类的所有实例中使用>>,这意味着方法实现的字节码对于所有实例来说只有一个。并且方法字节码内存区域与对象的堆是分开的。

当然,每个线程都有自己的堆栈,就像您所解释的那样。

关于java - java类方法在单线程和多线程环境下如何分配内存并执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37585484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com