page contents

关于JVM内存结构的问题

Pack 发布于 2020-01-08 16:19
阅读 523
收藏 0
分类:Java开发

我们都说JVM内存结构中,堆,方法区是线程共享的;java栈,本地方法栈,寄存器是线程私有的。


那么问题来了,在栈中也就是一个方法中创建的对象是存在栈中吗?根据我看到的资料,栈中只存放对象的引用,而对象放在堆中,这样的话,对栈来讲每个线程访问都会创建对象,而对象都放在堆中,那堆中的对象不就不一定是线程共享的了吗?


对方法内创建的对象而言,这是线程私有的,谁能回答我这个问题呢?是归类不严谨还是我理解有误?

134
Pack
Pack

所谓的堆、方法区线程共享是说所有的线程都能访问堆和方法区,线程访问堆中的对象需要知道对象的内存地址也就是对象的引用

方法内创建的对象如果满足栈上分配的原则会分配在栈内存中

针对那些作用域不会逃逸出方法的对象,在分配内存时不在将对象分配在堆内存中,而是将对象属性打散后分配在栈(线程私有的,属于栈内存)上

请先 登录 后评论