java里的静态变量是放在了堆内存还是栈内存?
java里的静态变量是放在了堆内存还是栈内存?
[解决办法]
堆区:
1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
栈区:
1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区:
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。
[解决办法]
静态变量在方法区,但方法区既可以在堆上又可以位于栈(not java栈)上
[解决办法]
学习中
[解决办法]
静态变量放在全局区(静态区):
全局变量和静态变量放在一块,然后初始化的全局变量和静态变量放在一块,未初始化的和未静态变量放在相邻的一块。
然后
stack区是 存放函数的参数,局部变量等值-----是编译器自动分配和释放的
heap 区是 你new的对象。----是程序员分配和释放的。
[解决办法]
public class TestStatic {
static {
System.out.println("static ");
}
public TestStatic (){
System.out.println("duixiang");
}
public static void main(String[] args) {
new TestStatic();
}
}
/*
static
duixiang
*/
5、常数存储。常数值通常直接置于程序代码内部。这样做是安全的。因为它们永远都不会改变,有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
6、非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器,而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技艺就是它们能存在于其他媒体中,一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。
[解决办法]
静态变量放堆里边的。
[解决办法]
学习学习。
[解决办法]
静态变量放到数据区 并不是放在栈中和堆中,java内存的分配楼主需要再次理解下,这个很容易记混的,希望楼主能在这方面多花些时间,堆内存是存放对象的切数据不能共享,所以这个不可能,栈内存jvm会随时清理掉的 用完就给GC处理 所以也不可能放到这里面,静态变量有自己单独的内存空间 有的叫变量区 有的叫数据区
[解决办法]
学习了
[解决办法]
静态区,和其所在的类存放在同一位置
[解决办法]
常量区???从体系上说并没有这个东西!只有常量池!常量池在哪??还不是在方法区