【计算机基础】Java内存管理的进一步理解-模拟过程图解
2015-08-31 15:51
281 查看
java的内存管理分为:
1、Java堆内存;2、Java栈内存;3、方法区;4、本地方法栈
下面通过一个简单的代码示例,理解Java中,内存是怎么进行分配与管理的。示例如下:
[java]
view plaincopy
public class JavaRamExplain {
public static void main(String[] args) {
Person.whatCountry();
Person sam = new Person("sam", 20);
sam.introduceSelf();
}
}
class Person {
private String name;
private int age;
public static String country = "china";
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduceSelf() {
System.out.println("My name's " + name + ",i'm " + age + " years old.");
}
public static void whatCountry() {
System.out.println("This people come from " + country);
}
}
当开始运行JavaRamExplain类时,JVM便会开始进行内存的分配管理工作。
图解过程为:
(图片较大,看不清可以图片右键-查看图像,进行查看原图)
可以看到到第八步工作结束后:
栈内存中的数据全部被释放(所以说栈内存中的数据的生命周期是已知并固定的,因为随着方法的执行结束,栈内存便会进行释放);
堆内存中的Person对象,现已没有任何对象引用指向它,所以它将被视作内存中的“垃圾”,等待回收。(堆内存中的数据由java的垃圾回收机制自动进行处理,所以其生命周期不确定)
由图中也可以看到:
类的方法会进行压栈和弹栈,对应的,方法中用到的参数(变量)便会相应的在栈内存中进行存储和释放。所以栈内存用于存放局部变量(包括基本类型和引用类型)。
类的对象会被存放到堆内存中,相应的该对象所包含的成员变量也会被存放到该空间。
类本身将在jvm通过.class运行该类时就会被加载到内存中的方法区内,顾名思义,方法区用于保存类的方法代码,其中普通方法被存放在非静态区,静态成员(方法和变量)被存放在方法区中专门的静态区当中。
栈内存是方法的运行区域(因为方法中定义的局部变量需要在栈里开辟空间),方法区是方法的存放区域。
1、Java堆内存;2、Java栈内存;3、方法区;4、本地方法栈
下面通过一个简单的代码示例,理解Java中,内存是怎么进行分配与管理的。示例如下:
[java]
view plaincopy
public class JavaRamExplain {
public static void main(String[] args) {
Person.whatCountry();
Person sam = new Person("sam", 20);
sam.introduceSelf();
}
}
class Person {
private String name;
private int age;
public static String country = "china";
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void introduceSelf() {
System.out.println("My name's " + name + ",i'm " + age + " years old.");
}
public static void whatCountry() {
System.out.println("This people come from " + country);
}
}
当开始运行JavaRamExplain类时,JVM便会开始进行内存的分配管理工作。
图解过程为:
(图片较大,看不清可以图片右键-查看图像,进行查看原图)
可以看到到第八步工作结束后:
栈内存中的数据全部被释放(所以说栈内存中的数据的生命周期是已知并固定的,因为随着方法的执行结束,栈内存便会进行释放);
堆内存中的Person对象,现已没有任何对象引用指向它,所以它将被视作内存中的“垃圾”,等待回收。(堆内存中的数据由java的垃圾回收机制自动进行处理,所以其生命周期不确定)
由图中也可以看到:
类的方法会进行压栈和弹栈,对应的,方法中用到的参数(变量)便会相应的在栈内存中进行存储和释放。所以栈内存用于存放局部变量(包括基本类型和引用类型)。
类的对象会被存放到堆内存中,相应的该对象所包含的成员变量也会被存放到该空间。
类本身将在jvm通过.class运行该类时就会被加载到内存中的方法区内,顾名思义,方法区用于保存类的方法代码,其中普通方法被存放在非静态区,静态成员(方法和变量)被存放在方法区中专门的静态区当中。
栈内存是方法的运行区域(因为方法中定义的局部变量需要在栈里开辟空间),方法区是方法的存放区域。
相关文章推荐
- HttpClient4.X(httpcomponents)学习笔记
- 数据结构--线性表
- 开源框架Android Asynchronous Http Client
- 企业网络的安全接入
- 数据结构(一):栈的Java实现
- 高可用性网络
- Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap
- Kail Linux渗透测试教程之网络扫描和嗅探工具Nmap
- Linux(Centos6.5)下安装svn服务器,并通过http访问
- 修改本地活动网络连接的DNS
- jsp调用javabean出现错误HTTP Status 500 - Unable to compile class for JSP
- 黑马程序员——Java基础——网络编程
- 网络基础知识
- OpenCV中的数据结构CvSeq(序列)
- HTTPS初体验
- 数据结构之二叉树(遍历、建立、深度)
- android Volley框架 http请求
- 使用zlib模块实现HTTP服务端与客户端实现传输数据压缩
- A Python guide to handling HTTP request failures
- 手机移动网络是否连接