Java内存区域
2016-03-22 10:35
309 查看
最近在看深入Java虚拟机,记下一些笔记等遗忘的时候来翻一翻。
上图所示就是java程序运行时的几个数据区域。
1 程序计数器:
线程私有,比较小的内存区域,是当前线程执行字节码行数的指示器。通过改变的计数器的值来选取下一条需要执行的字节码指令。当执行的是java方法的时候,计数器记录的是正在执行的字节码指令地址,若是执行的是Native方法,那么计数器的值为空。
2 Java虚拟机栈
也是线程私有的。主要描述的是java方法执行的内存模型,方法执行的时候都会创建一个栈帧,用来存放局部变量表,操作数栈,动态链接和方法出口等。局部变量表量表存储的是各种基本数据类型和对象的引用类型为什么呢?
3 本地方法栈
主要用来为Native方法服务,什么是Native方法呢?可以认为是由非java代码实现的方法,比如C语言这些
4 java堆
是java内存中最大的一块,被所有线程共享。在虚拟机启动的时候创建。目的是存放对象实例,可以认为被new出来的所有对象全部存放在堆中,但是也包括数组。java的垃圾回收主要发生在堆中,
5 方法区:
也是被所有线程共享的内存区域,存储已经被虚拟机加载的类信息,常量和静态变量,及时编译器编译后的代码等数据。在这个区域很少出现垃圾回收,即使出现也是主要对常量池的回收和堆类型的卸载,
下面讲一讲常量池,是方法区的一部分,主要用于存储编译期生成的各种字面量和符号引用。比如一个类的名字,一个类字段的名字/所属类型,一个类方法的名字/返回类型/参数名与所属类型,一个常量,还有在程序中出现的大量的字面值。
比如下面小段源码中粗体代码显示的部分:
public class ClassTest {
private String itemS =“我们 “;
private final int itemI =100 ;
public void setItemS (String para ){…}
}
上图所示就是java程序运行时的几个数据区域。
1 程序计数器:
线程私有,比较小的内存区域,是当前线程执行字节码行数的指示器。通过改变的计数器的值来选取下一条需要执行的字节码指令。当执行的是java方法的时候,计数器记录的是正在执行的字节码指令地址,若是执行的是Native方法,那么计数器的值为空。
2 Java虚拟机栈
也是线程私有的。主要描述的是java方法执行的内存模型,方法执行的时候都会创建一个栈帧,用来存放局部变量表,操作数栈,动态链接和方法出口等。局部变量表量表存储的是各种基本数据类型和对象的引用类型为什么呢?
3 本地方法栈
主要用来为Native方法服务,什么是Native方法呢?可以认为是由非java代码实现的方法,比如C语言这些
4 java堆
是java内存中最大的一块,被所有线程共享。在虚拟机启动的时候创建。目的是存放对象实例,可以认为被new出来的所有对象全部存放在堆中,但是也包括数组。java的垃圾回收主要发生在堆中,
5 方法区:
也是被所有线程共享的内存区域,存储已经被虚拟机加载的类信息,常量和静态变量,及时编译器编译后的代码等数据。在这个区域很少出现垃圾回收,即使出现也是主要对常量池的回收和堆类型的卸载,
下面讲一讲常量池,是方法区的一部分,主要用于存储编译期生成的各种字面量和符号引用。比如一个类的名字,一个类字段的名字/所属类型,一个类方法的名字/返回类型/参数名与所属类型,一个常量,还有在程序中出现的大量的字面值。
比如下面小段源码中粗体代码显示的部分:
public class ClassTest {
private String itemS =“我们 “;
private final int itemI =100 ;
public void setItemS (String para ){…}
}
相关文章推荐
- Java中父类与子类的普通代码块,构造代码块,静态代码块 初始化
- Spring 一二事(1)
- Spring MVC with Maven - java.lang.ClassNotFoundException: org.springframework.web.servlet.Dispatcher
- Java设计模式之策略模式
- 《Head First Java》读后记录
- Java 四种线程池
- java中class.forName和classLoader加载类的区分
- MyEclipse项目上有红色感叹号
- eclipse创建、导入项目文件缺失问题(主要是R文件)
- Java实现事件机制
- JAVA AIO BIO NIO
- springMVC 异常统一处理类
- java lambda小纪
- Java 控制线程
- spring MVC配置详解
- SpringMVC mybatis or hibernate ehcache二级缓存maven非和maven版本
- 如何向myeclipse2014项目中引入ssh
- ubuntu下搭建hadoop+链接eclipse遇到的问题记录
- Eclipse问题集锦:errors running builder 'Android Pre Compiler' on project'项目名称':java.lang.NullPointerExce
- 如何在应用层通过spring特性解决数据库读写分离