java程序在内存中的分布
2016-04-11 10:44
381 查看
在java中,java程序在内存中的分布可分为三大模块:堆内存、栈内存和方法区。
堆内存:用于内存空间的申请;用于存放new创建的对象和数组,jvm会定期进行检查,如果不被引用,则回收。
栈内存 : 保存本地变量的地址;是由编译器自动分配释放的。在具体方法执行完毕后,系统会自动释放jvm内存资源。
方法区:方法区也叫数据区或共享区。用于存放静态变量、静态方法以及代码的区域,不释放。
如果数据类型是基本数据类型,会直接在栈内开辟空间存储量,例如:num=10;会在栈内存中开辟一个num的空间。存储一个值是10。
但是对于一个引用类型的变量,会开辟一个空间然而存储的是一个内存的首地址,指向堆内存中的这块地址,引用这个对象,因此叫做引用类型、
我们创建了Test对象,接下来调用test的show()方法,会在栈内存中,开辟一个show()方法的栈帧,先指向堆内存中Test()对象,然后指向存储在方法区内的show()方法代码,执行完,show()栈内存将会销毁该栈帧。
堆内存:用于内存空间的申请;用于存放new创建的对象和数组,jvm会定期进行检查,如果不被引用,则回收。
栈内存 : 保存本地变量的地址;是由编译器自动分配释放的。在具体方法执行完毕后,系统会自动释放jvm内存资源。
方法区:方法区也叫数据区或共享区。用于存放静态变量、静态方法以及代码的区域,不释放。
public class Demo{ public void main(String[] args){ int num = 10; Test test = new Test(); test.show(); } } class Test{ int a = 2; public void show(){ System.out.println(a); } }
如果数据类型是基本数据类型,会直接在栈内开辟空间存储量,例如:num=10;会在栈内存中开辟一个num的空间。存储一个值是10。
但是对于一个引用类型的变量,会开辟一个空间然而存储的是一个内存的首地址,指向堆内存中的这块地址,引用这个对象,因此叫做引用类型、
我们创建了Test对象,接下来调用test的show()方法,会在栈内存中,开辟一个show()方法的栈帧,先指向堆内存中Test()对象,然后指向存储在方法区内的show()方法代码,执行完,show()栈内存将会销毁该栈帧。
相关文章推荐
- java程序在内存中的分布
- mujava的配置和运行Demo
- baseDao 使用spring3+hibernate4方式
- 码农小汪-spring框架学习之3-spring Method injection(方法注入 ) Lookup method injection
- java 自增操作是原子操作
- Java设计模式--工厂模式的自述
- Java学习之正则表达式入门
- Commons Collections Java反序列化漏洞利用
- eclipse项目有时不能启动原因
- Java单链表反转 详细过程
- springMVC两种实现多文件上传及效率比较
- java下载、安装与配置
- 关于Eclipse的git功能(egit插件)执行replace 依然显示差异问题的处理
- eclipse
- Spring JDBC 编译出错
- 【转载】Java垃圾回收机制
- Java ActiveMQ连接池使用
- java反射原理
- PropertyAccessException 1: org.springframework.beans.MethodInvocationException
- Java线程池的使用