码迷,mamicode.com
首页 > 其他好文 > 详细

jvm内存分布

时间:2015-11-20 17:07:31      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

jvm 1.7 版本:

jvm 的内存分为堆和非堆两大部分。

堆:

堆分为 新生代和老年代。一般对象都会在新生代的内存中创建,新生代中的对象经过几次的GC 回收后依然存活(这个次数可以设置)则移动到老年代。新生代和老年代的内存不足时都会触发GC。新生代的GC 的方法一般为复制清理,而老年代则多为标记清理。方法不一样时根据这两个分代区域内存的特点来采用的。

-Xms512m 堆初始化的内存大小,-Xmx1024m 堆最大的内存为1024m  -Xmn512m  新生代的空间大小。

 

非堆:

程序计数器:用来记录线程执行到了哪一步(记录指令)。所以每个线程都会有独立的计数器

虚拟机栈:记录方法运行时的信息,也是线程独立的。  -Xss128k  设置线程栈的深度(也就是线程可以使用的内存大小),超出时抛出StackOverFlowError。

本地方法栈:和虚拟机栈一样,不过用于native 方法。

方法区:也就是所说的永久代,用来存放类的信息,常量,静态变量,jit 即时编译代码 等。可以不实现GC,但一般也会。例如类卸载之类也会回收

  -XX:MaxPermSize=256m 设置永久代最大可用空间。

字符串常量池:jvm 1.7 之前是放在方法区内,1.7 时移出方法区,因此不再受 MaxPermSize 参数的限制。

 

本地内存:其余的本机内存,这部分内存不是jvm 规范规定的内存,但是java 运行时还是会用到这些内存,如多线程,字符串常量等都会增加消耗,如果不足也会OutOfMemoryError

 

jvm内存分布

标签:

原文地址:http://www.cnblogs.com/predisw/p/4981073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!