2 zyf4005 zyf4005 于 2016.04.25 13:36 提问

java中static变量和static方法以及普通方法在那个内存中存储呢? 请高手指点,谢谢
栈内存:局部变量和对象的引用变量;
堆内存:对象;
以上是我所知道的,那么static变量和static方法以及普通方法在那个内存中存储呢?
请高手指点,谢谢

6个回答

w172087242
w172087242   Ds   Rxr 2016.04.25 13:41
已采纳

static和普通方法都存在堆内存中,堆内存有个永久区permgen,这里面会存类信息。
所以不断的加载类或jar包可能出现permgen oome的错误。
static是在堆内存的数据区。

zhuod
zhuod   2016.04.25 13:51

这个问题你得先了解JVM中内存回收机制,现在用的是分代回收机制,分为新生代,老年代和终生代,声明为static的属性和方法是放在终生代的,存放在此区的数据GC是不会去回收的

CSDNXIAOD
CSDNXIAOD   2016.04.25 13:42

java static 变量与方法
java中static变量和方法的总结
java中static变量和方法的总结
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Army_Jun
Army_Jun   2016.04.25 14:46

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。
栈内存:基本类型数据和对象的引用变量;
堆内存:new的对象和数组;

Army_Jun
Army_Jun 回复zyf4005: JVM内存总体一共分为了 4个部分(stack segment、heap segment、code segment、data segment) 当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中; 当new 一个对象的时候,此对象放在了heap segment(堆)当中; 而static 的变量或者字符串常量 则存在在 data segment(数据区)中; 那么类中方法的话,是存在在 code segment(代码区)中了。
一年多之前 回复
Army_Jun
Army_Jun 回复zyf4005: VM内存总体一共分为了 4个部分(stack segment、heap segment、code segment、data segment) 当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中; 当new 一个对象的时候,此对象放在了heap segment(堆)当中; 而static 的变量或者字符串常量 则存在在 data segment(数据区)中; 那么类中方法的话,是存在在 code segment(代码区)中了。
一年多之前 回复
zyf4005
zyf4005 那么static变量和static方法以及普通方法在那个内存中存储呢?
一年多之前 回复
Army_Jun
Army_Jun   2016.04.25 14:46

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。
栈内存:基本类型数据和对象的引用变量;
堆内存:new的对象和数组;

ArthurJava
ArthurJava   2016.04.26 13:43

自己声明的在堆中,系统声明的在栈中

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!