㈠ java在运行的时候,形参保存在什么地方
当类被加载之后,类的相关信息保存在内存的方法区,同时类内的方法定义也被加载到方法区。
当调用某个方法的时候,虚拟机会为方法在栈内存中分配一个对应的空间,就是栈帧,栈帧中
存放了该方法的参数。当这个方法调用完毕后,对应的栈帧将被收回。
㈡ JAVA中实例化一个对象,成员方法中的参数会在哪分配内存(栈/堆)
成员方法?
JAVA中实例化一个对象 会实例该类中的一些成员变量
成员变量也要看是具体对象 还是基础变量 基础变量存储在 栈中
而具体对象引用存在于栈中 具体内容存在堆中
一些特殊的变量 比如静态变量会在类加载的时候在特殊的静态区分配
L楼主说是成员方法??? 实例化对象 对成员方法中的参数是不产生影响的 只有实例对象调用方法的时候 其具体涉及到的方法体内的局部变量才会在内存中分配
分配方式依然是: java基础变量 和java对象
基础变量存储在 栈中
而具体对象引用存在于栈中 具体内容存在堆中
㈢ java线程存放在jvm的哪个区域方法又存放在哪个区呢
聊到JAVA中的方法,大多数人对于方法存储在方法区还是栈区(虚拟机栈)是很迷茫的。其实方法是存在方法区的下面我们就细细说一下JVM中的 方法区 VS 栈区方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,方法编译出的字节码也是保存在这
㈣ 在Java JVM里,如果一个变量被声明为final或者static, 那么这个变量的引用以及它的值被存放在哪
static不能用在方法里面,只能修饰类的属性或者方法。
static修饰的变量被放在方法区,因为它属于类变量,是类的一部分。
所有的方法中的普通变量都是在栈中的局部变量表中的,如果是引用类型的变量局部变量表会存放引用对象的地址,这个引用对象实际存储在堆中。如果被final修饰的话代表这个引用类型的变量指向的地址无法被改变。所以final修饰的引用的地址和final修饰的基本数据类型都会放在常量池,常量池位于方法区中。
㈤ JAVA中实例化一个对象,成员方法中的参数会在哪分配内存(栈/堆)
首先内存总体分为了4个部分,包括 stack segment 、heap segment、code segment 、data segment ;
其中我们程序中用关键字new出来的东西都是存放在heap segment;
程序中的局部变量存放在stack segment,这些局部变量是在具体方法执行结束之后,系统自动释放内存资源(而heap segment中的资源需要java垃圾回收机制来处理);
程序中的方法,是内存中的code segment中的,而且是多个对象 共享一个代码空间区域;
static静态变量,需要放在内存中的data segment中,
㈥ JAVA中类中的方法存储在什么地方
类加载时 方法信息保存在一块称为方法区的内存中, 并不随你创建对象而随对象保存于堆中。可参考《深入java虚拟机》前几章。
另参考(他人文章):
如果instance method也随着instance增加而增加的话,那内存消耗也太大了,为了做到共用一小段内存,Java 是根据this关键字做到的,比如:instance1.instanceMethod(); instance2.instanceMethod(); 在传递给对象参数的时候,Java 编译器自动先加上了一个this参数,它表示传递的是这个对象引用,虽然他们两个对象共用一个方法,但是他们的方法中所产生的数据是私有的,这是因为参数被传进来变成call stack内的entry,而各个对象都有不同call stack,所以不会混淆。其实调用每个非static方法时,Java 编译器都会自动的先加上当前调用此方法对象的参数,有时候在一个方法调用另一个方法,这时可以不用在前面加上this的,因为要传递的对象参数就是当前执行这个方法的对象。