java运行内存结构
2015-08-08 15:44
357 查看
内存空间逻辑划分:
JVM会把申请的内存从逻辑上划分为三个区域,即:方法区、栈与堆。
1.方法区:方法区物理上存在于堆里,方法区默认最大容量为64M,由类信息、static变量、常量池等组成
类信息:java虚拟机会将加载的java类存入方法区,保存类的信息(类的代码信息),包括成员变量和方法等
常量池:常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据,其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。编译器将源程序编译成class文件后,会用一部分字节分类存储这些粗体代码。而这些字节我们就称为常量池。事实上,只有JVM加载class后,在方法区中为它们开辟空 间才更像一个“池”
static变量:包括static修饰的变量和方法
2.堆(内存空间不连续):默认最大容量为64M,堆存放对象持有的数据,同时保持对原类的引用,存放new出的对象,对象调用的方法保存在方法区
3.栈(自动分配连续空间,后进先出):默认最大容量为1M,在程序运行时,每当遇到方法调用时,java虚拟机就会在栈中划分一块内存称为栈帧(Stack frame),栈帧中的内存的局部变量(包括基本类型与引用类型)使用,当方法调用结束后,java虚拟机会收回此栈帧占用的内存
JVM会把申请的内存从逻辑上划分为三个区域,即:方法区、栈与堆。
1.方法区:方法区物理上存在于堆里,方法区默认最大容量为64M,由类信息、static变量、常量池等组成
类信息:java虚拟机会将加载的java类存入方法区,保存类的信息(类的代码信息),包括成员变量和方法等
常量池:常量池指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据,其实也就是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。编译器将源程序编译成class文件后,会用一部分字节分类存储这些粗体代码。而这些字节我们就称为常量池。事实上,只有JVM加载class后,在方法区中为它们开辟空 间才更像一个“池”
static变量:包括static修饰的变量和方法
2.堆(内存空间不连续):默认最大容量为64M,堆存放对象持有的数据,同时保持对原类的引用,存放new出的对象,对象调用的方法保存在方法区
3.栈(自动分配连续空间,后进先出):默认最大容量为1M,在程序运行时,每当遇到方法调用时,java虚拟机就会在栈中划分一块内存称为栈帧(Stack frame),栈帧中的内存的局部变量(包括基本类型与引用类型)使用,当方法调用结束后,java虚拟机会收回此栈帧占用的内存
package cn.sina.kingther; public class Student { private String name; private int id; private String add1 = new String("哈尔滨"); private String add2 ="哈尔滨"; private static int n=3; public static void study1(){ System.out.println(n--); } public void study2(){ System.out.println(name+"同学的学号是"+id+",他在"+add1+"上学"+n--); } public void study3(){ System.out.println(name+"同学的学号是"+id+",他在"+add2+"上学"+n--); } public static void main(String[] args) { Student.study1(); Student st1 =new Student(); st1.name = "wangbaojia1"; st1.id =1; st1.study2(); Student st2 =new Student(); st2.name = "wangbaojia2"; st2.id =2; st2.study3(); System.out.println(st1.add1.equals(st2.add2)); System.out.println(st1.add1==st2.add2); } }
运行结果:3 wangbaojia1同学的学号是1,他在哈尔滨上学2 wangbaojia2同学的学号是2,他在哈尔滨上学1 true false内存效果图:
相关文章推荐
- Java中的字符串常量池详细介绍
- java常量池与引用类型
- java核心技术学习笔记4---String字符串
- java——堆、栈、常量池、equal、==、hashcode
- 常量池详解
- 常量池
- class常量池陷阱-百看不如一战
- 【深入Java虚拟机】之二:Class类文件结构
- 深入Java核心 Java内存分配原理精讲
- 深入理解Java Class文件格式(一)
- 深入理解Java Class文件格式(三)
- 深入理解Java Class文件格式(四)
- 深入理解Java Class文件格式(五)
- 深入理解Java Class文件格式(六)
- JAVA中对象引用和值引用
- Java中String的比较
- 常量池
- Java中堆、栈、常量池等概念解析
- Java中变量存储位置的区别
- String与常量池