持久代(jdkq1.7),jdk1.8被称为元数据区 元数据区主要是java程序代码的代码区和数据区 java程序中类(class)会被加载到整个区域的不同数据结构中去,包括常量池、域、方法数据、方法体、构造函数、以及类中的专用方法、实例初始化、接口初始化等 这个区域对于操作系统来说是堆的一部分;而对于java程序本身而言是容纳程序本身及静态资源的空间,使得jvm能够解释执行java程序
新生代 存储新进去内存中的对象 存在堆内存中的 分三块 eden sourvivor(s0)--from区 sourvivor(s1)--to区 由jvm统一管理 ,使用时jvm会向操作系统申请一整段内存区域,当执行new 操作时jvm将在这段内存中按照所需大小分配java程序 程序不负责通知jvm何时可以将对象所占用内存空间释放 gc会定时回收
老年代 存储随着时间推移一直占用内存空间的对象 存在堆内存中的 jvm统一管理 使用时jvm会向操作系统申请一整段内存区域,当老年代中的存储空间因为程序执行关系会逐渐将对象移动到老年代中,这时候jvm会根据程序计数器中的java指令和对象存活时间启动full gc
垃圾回收机制在执行对应的垃圾回收类时会先标记内存中非活跃的对象,标记完以后会启动清除,将非活跃性的区间清除,然后将内存中尚需要使用的对象所占内存进行压缩同之前清除完以后的内存空间合并
jvm虚拟机对于分区分代以后内存进行批次管理,程序执行过程中会自动调用对应的分区中的对象操作数据,操作完数据以后会进行垃圾回收,然后再分配对象内存。以此反复执行
jvm对于Windows Linux 内存关系各不一样
这里主要讲述Linux 系统 :在一些物理内存为8g的服务器上,主要运行一个java服务,系统分配内存如下:java jvm堆大小为6g 一个监视进程占用600m