首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java内存储器

2012-09-05 
java内存java内存分配: 根据是否是线程来占有的:线程独享的: 程序计数器 :记录当前线程执行到的行数(如果

java内存
java内存分配:
根据是否是线程来占有的:
线程独享的:
程序计数器 :记录当前线程执行到的行数(如果当前执行的是native方法的话,则计数器的值为undefined)
虚拟机栈:   每个方法被执行的时候,都被会创建一个帧栈,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈    为本地(native)方法提供的内存区域

虚拟机相关的(线程共享的):
堆          存放对象实例的 
方法区存储已被java虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据 
运行时常量池:(方法区的一部分)存放了编译期生成的各种字面量和符号引用,和运行期间产生的新的常量

直接内存(非虚拟机运行时数据区的一部分)


垃圾回收的区域:
    和线程相关的 虚拟机栈,本地方法栈,pc计数器所占用的空间是确定的,分配和回收随着线程的开始和结束而进行的。

虚拟机相关的内存区域是回收的重点,即堆和方法区。


内存分配:
   对象优先在eden区分配
大对象直接进入老年代
    长期存活的对象会晋升到老年代

判断对象是否已死的算法:
   1.引用计数法
   2.根搜索算法  java 虚拟机采用的方式 (可以防止循环引用) 如果某个对象到GC Roots没有任何引用链,那么这个对象就是不可达的,会被垃圾回收器回收掉。
     可以作为GC Roots的对象:
    虚拟机栈中引用的对象
本地方法栈中引用的对象
方法区中的类静态变量引用的对象
方法区中的常量引用的对象

引用的类型
1.强引用 不会被垃圾回收掉的引用
2.软引用 在将要发生内存溢出的时候,GC进行垃圾回收之后发现还是不能避免溢出的时候,会回收这类引用的对象
3.弱引用 在下一次GC时会被回收的对象
4.虚引用

方法区的回收:

    1.废弃的常量
2.无用的类




名称作用区域特点优点
Serial新生代单线程收集器,在回收的时候会暂停其他线程的工作(stop the world)在单个CPU的环境下,可以获得最高的单线程收集效率,适用于运行在client模式下的虚拟机的新生代gc首选

ParNew 新生代Serial的多线程版本是运行在server模式下的虚拟机首选的新生代收集器

Parallel scavenge新生代主要用于控制吞吐量。复制算法,并行的多线程收集器,提供了自适应策略适合在后台运算,而不需要太多交互的场合
Serial old老年代Serial的老年代版本1.在1.5之前与 parallel scavenge搭配
2.作为CMS收集器的后背预案

Parallel old老年代Parallel scavenge的老年代版本 标记-整理算法在注重吞吐量及cpu资源敏感的场合优先考虑
Concurrent mark sweep  CMS老年代标记-清除算法
四步:
初始标记(stop the world)
并发标记
重新标记(stop the world)
并发清除

以获取最短回收停顿为目标


热点排行