jvm运行时数据区域

Java语言与c语言有一个非常重要的区别就是:内存管理方式的不同,java语言内存管理不需要程序开发人员关注,而c语言的内存的请求和释放都是开发人员来处理。辩证的思维来看,不同内存管理实现方式有优点和缺点,所以语言应用的场景,效率会有很大不同。

 

Jvm运行时的数据区域主要有:程序计数器、虚拟机栈、本地方法栈、方法区和堆。其中程序计数器、虚拟机栈和本地方法栈是线程独享,而方法区和堆是所有线程共享。

ü 程序计数器:jvm每个线程都有一个程序计数器。在任一时刻都有一个线程的方法在运行,如果这个方法不是本地方法,那么程序计数器存放的就是正在执行的指令地址;如果是本地方法,那么程序计数器中存放的指定地址为undefined

ü 虚拟机栈:当jvm创建一个线程的时候就会为线程分配一个虚拟机栈。主要用于存放方法的一些本地变量和部分结果,一般这里的大小都是固定,但不是绝对。一个方法的执行到完成就是栈的入栈和出栈。假设在某方法中定义了一个对象Object obj=new Object();其中obj是存放在栈上,而new Object()是在堆上分配。-Xss可以控制jvm虚拟机栈的大小。

ü 本地方法栈:大体跟虚拟机栈类似,不过是给本地方法使用的。虚拟机栈和本地方法栈在hotspot是没有分开实现的,而是统称为栈。

ü 方法区:主要存放静态变量,常量,类加载器加载的类等一些信息。

ü 堆:jvm绝大部分的对象分配都在堆上分配。-Xmn –Xmx是控制堆最小值和最大值,一般堆的大小在使用了超过mx设定的70%的时候,就会自动扩大到最大值,所以防止这种扩大和缩小我们设置成一样的值。

posted on 2012-02-07 10:27 yangpingyu 阅读(283) 评论(0)  编辑  收藏 所属分类: java基础


只有注册用户登录后才能发表评论。


网站导航:
 
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

导航

统计

常用链接

留言簿

随笔分类

随笔档案

收藏夹

linux

产品交互

分析,设计,架构

安全

技术牛人

数据库

搜索

最新评论

阅读排行榜

评论排行榜