jvm(1)

学到jvm一头雾水,不知道是干啥用的。后来度娘了一下,有点了解了,大概意思就是说用java编写的源代码,要经过jdk这个工具进行编辑,编译成java虚拟机可以识别的语言,才可以运行。初步了解是这么个意思。

jvm是java程序运行的环境,有自己运行的生命周期

想要了解jvm和内存溢出有什么关系,先了解一下什么是内存溢出

内存溢出:就是你要求分配的java虚拟机的内存超出了系统给你的,系统不能满足,所以溢出。

内存泄露:指你向系统申请的分配的内存进行使用,可以使用完了又没有进行归还,没有delete,结果被申请分配的那块内存自己也不能再访问,无法再被重新使用,随着服务器不断的消耗内存,会产生无法使用的内存会越来越多,系统也不能将他在分配给其他的需要程序去使用,产生内存泄露,一直下去,程序无内存使用,就会产生内存溢出。

sun jdk遵照jvm规范,将内存划分为方法区、堆、jvm方法栈、本地方法栈和pc寄存器

方法区:存放要加载的类和接口的信息,static变量、常量、通过class对象获取的相关数据,这块区域成为持久带,默认最小值16mb,最大值64mb,可通过-xx:permsize 及 xx:maxpermsize 来设置最大值和最小值

堆:heap memory,存放实例和数组值,heap中的对象所占用的内存由gc进行回收,在32位系统中最大为2G,64位系统大小无限制,可通过-xms 和-xmx控制,-xms是jvm启动时申请的最小的heap内存,-xmx是jvm可申请的最大的内存。

方法栈:每个线程都对创建pc寄存器和方法栈,方法栈为线程私有,放方法运行完毕后,该方法的站贞所占用的空间会自动释放,方法栈空间不足,可通过-xss进行设置

新生代由伊甸园区和两个大小相同的survivor space构成,可通过-xmn制定新生代的大小,

对象由新生代创建,在伊甸园区进行存放数据,当伊甸园区满了的时候,jvm垃圾回收器对其进行回收,不被使用的对象将对其进行销毁,仍然被使用的对象转移到s0区,s0区满后,转移到s1区。

旧生代中存放经过多次垃圾回收后仍然被使用存活的对象,例如缓存对象,占用大小为,xmx值-xmn的值

 

posted on 2014-09-04 15:11  天使2013  阅读(193)  评论(0编辑  收藏  举报

导航