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)
并发清除
以获取最短回收停顿为目标
分享到:
相关推荐
描述java内存回收机制,异常出现原因,解决方案
jProfiler7 java内存分析 linux版本
java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存解析(讲的很清楚的视频)java内存...
Java内存泄露及内存无法回收解决方案,深入讲解相关原理及相关过程。
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
Java线程之间的通信由Java内存模型(本文简称为JMM)控制,JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main ...
如何解决Java内存泄漏
java内存分析
java内存原理.docjava内存原理.doc
JAVA内存分析工具
java内存泄漏分析工具
java内存管理精彩概述 java内存管理精彩概述 java内存管理精彩概述
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
Java 内存调整技巧
深入Java 内存模型本书介绍了,如何深入学习了解JAVA 内存模型!更好的了解java 虚拟机!
Java内存机制学习和使用Java内存机制学习和使用Java内存机制学习和使用
深入理解 Java 内存模型,由程晓明编著,深入理解java内存模型JMM
java内存模型文档
有关java内存泄露的详细资料,Java与C语言的内存管理模型,内存泄漏方式
Java内存分析