java里的静态变量是放在了堆内存还是栈内存?

999朵玫瑰 2011-06-08 09:22:33
java里的静态变量是放在了堆内存还是栈内存?
...全文
35056 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
matrixlzp 2014-01-23
  • 打赏
  • 举报
回复
我不知道大家JVM的知识都是哪里学的。我是看《深入java JVM》。我从没听过有什么静态区。我只听过方法区。Method Area.Class类和常量、静态成员变量都是位于方法区。我甚至不知道什么是代码区。java是以类来构建程序的,执行代码的时候,某一个线程的程序计数器指向下一条代码。指向谁?指向Class类。
lishuiqing 2013-11-21
  • 打赏
  • 举报
回复
学习了,大家讨论的很激烈,然后看到lz也急了,就想知道到底是堆还是栈里面,哈哈。
ddddf2f2eefe 2013-10-06
  • 打赏
  • 举报
回复
引用 27 楼 liuxuejin 的回复:
首先,java里面是没有静态变量这个概念的,不信你自己在方法里面定义一个static int i =0;java里只有静态成员变量。它属于类的属性。至于他放在那里?楼上说的是静态区。我不知道到底有没有这个翻译。但是 深入jvm里是是翻译为方法区的。虚拟机的体系结构:堆,方法区,本地方法栈,pc寄存器。而方法区保存的就是一个类的模板,堆是放类的实例的。栈是一般来用来函数计算的。随便找本计算机底层的书都知道了。栈里的数据,函数执行完就不会存储了。这就是为什么局部变量每一次都是一样的。就算给他加一后,下次执行函数的时候还是原来的样子。
+1
bloosm2008 2013-04-23
  • 打赏
  • 举报
回复
静态成员变量放在堆还是栈?都不是,放在方法区 Java内存主要分成以下几块: 堆heap【new出来的空间和数组空间,存放对象、数组,数据不能共享】 本地方法栈native method stack【操作系统的本地方法所需要的空间,存放局部变量、引用】 方法区method area【所有对象数据共享区域,存储静态变量和普通方法、静态方法、常量、字符串常量(严格说存放在常量池,堆和栈都有)等类信息,说白了就是保存类的模板=27楼】 程序寄存器program counter register【速度最快且空间最小的一块区域,由编译器分配,我们对此没有直接的控制权】 注:方法区是一个独立区域,既不属于堆,也不属于栈,在类加载的时候只运行一次。 其实栈stack分为JVM stack(动态链接、方法出口)和native method stack。
kunlilin 2011-10-13
  • 打赏
  • 举报
回复
讲解了堆和栈的存储:http://java.e800.com.cn/articles/2011/818/1313658548939_1.html
kunlilin 2011-10-13
  • 打赏
  • 举报
回复
27楼说的很对!
FANGzhuzi 2011-08-03
  • 打赏
  • 举报
回复
内存分为四个区:stack segment,heap segment,data segment,code segment;
stack 区存放函数参数和局部变量;
heap 区存放对象;
data 区存放static 的变量或者字符串常量;
code 区存放类中的方法;

所以,静态变量是存放在data区的
liuxuejin 2011-06-22
  • 打赏
  • 举报
回复
首先,java里面是没有静态变量这个概念的,不信你自己在方法里面定义一个static int i =0;java里只有静态成员变量。它属于类的属性。至于他放在那里?楼上说的是静态区。我不知道到底有没有这个翻译。但是 深入jvm里是是翻译为方法区的。虚拟机的体系结构:堆,方法区,本地方法栈,pc寄存器。而方法区保存的就是一个类的模板,堆是放类的实例的。栈是一般来用来函数计算的。随便找本计算机底层的书都知道了。栈里的数据,函数执行完就不会存储了。这就是为什么局部变量每一次都是一样的。就算给他加一后,下次执行函数的时候还是原来的样子。
liuxuejin 2011-06-22
  • 打赏
  • 举报
回复
lz 的分记得给我啊!
liuxuejin 2011-06-22
  • 打赏
  • 举报
回复
常量区???从体系上说并没有这个东西!只有常量池!常量池在哪??还不是在方法区
  • 打赏
  • 举报
回复
常量区中,JAVA编程思想4已经说的很清楚了。
三千大千世界 2011-06-22
  • 打赏
  • 举报
回复
放在 常量区

lz看看sun的 深入jvm 吧
liuxuejin 2011-06-21
  • 打赏
  • 举报
回复
lz随便找一篇je上的虚拟机文章就能看懂了!不懂给我发信息
liuxuejin 2011-06-21
  • 打赏
  • 举报
回复
好牛x的答案啊!!奇文共赏啊
chenchenyangll 2011-06-20
  • 打赏
  • 举报
回复
学习了
qqyl521 2011-06-20
  • 打赏
  • 举报
回复
静态变量放到数据区 并不是放在栈中和堆中,java内存的分配楼主需要再次理解下,这个很容易记混的,希望楼主能在这方面多花些时间,堆内存是存放对象的切数据不能共享,所以这个不可能,栈内存jvm会随时清理掉的 用完就给GC处理 所以也不可能放到这里面,静态变量有自己单独的内存空间 有的叫变量区 有的叫数据区
JavaBoyCaoJi 2011-06-20
  • 打赏
  • 举报
回复
堆当中的,
hanRivergo 2011-06-20
  • 打赏
  • 举报
回复
学习学习。
JavaMan_KA 2011-06-20
  • 打赏
  • 举报
回复
静态变量放堆里边的。
yesenfei 2011-06-20
  • 打赏
  • 举报
回复
静态区,和其所在的类存放在同一位置
加载更多回复(18)

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧