转载自:http://blog.csdn.net/zz87250976/article/details/42875301
JVM内存分四种:
1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源;
2、堆区(heapsegment)—一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收;
3、静态区(datasegment)—存放全局变量,静态变量和字符串常量,不释放;
4、代码区(codesegment)—存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。
在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的JVM内存空间;在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理,堆的优势是可以动态分配JVM内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配JVM内存的。缺点就是要在运行时动态分配JVM内存,存取速度较慢;栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。
线面对Java中的变量作用域解释一下:
在Java中,变量的作用域分为四个级别:类级、对象实例级、方法级、块级;
类级变量又称全局级变量或静态变量,需要使用static关键字修饰,你可以与 C/C++ 中的 static 变量对比学习;
类级变量在类定义后就已经存在,占用内存空间,可以通过类名来访问,不需要实例化;
对象实例级变量就是成员变量,实例化后才会分配内存空间,才能访问;
方法级变量就是在方法内部定义的变量,就是局部变量。
时间: 2024-10-21 04:06:53