无论何时加载一个类,堆中存储了什么,栈中存储了什么?
线程位于哪里?
线程位于哪里?
引用类型存储在堆上。
任何原始类型数据和指向堆中的值(方法的参数/局部变量)的引用都存储在栈上。
每个线程都有自己的栈。
应用程序中所有线程共享同一堆。
很简单:
请注意,局部变量只能持有引用(“指针”)或基本类型值。局部变量永远不能持有"对象"。
请注意,这个视图是JVM规范中定义的。如果一个具体的JVM希望,它可以在非堆区域分配对象。例如:如果它知道新创建的对象从不逃逸当前调用,则它可以将实例化对象放入堆栈区域。但是,这是对开发人员不可见的非常优化。
基本类型:栈
对象:堆
线程:拥有独立的栈,但共享同一堆。