java 中的gc的几种方式及各个方式使用的收集算法
来源:互联网 发布:欧道明大学怎么样知乎 编辑:程序博客网 时间:2024/05/03 10:58
Gc module
New generation
Old generation
-XX:+UseSerialGC
串行gc
Mark-sweep-compact
-XX:+UseParallelGC
并行gc
Parallel mark sweep GC
-XX:+UseconcMarkSweepGC
并行gc
并发(注意是并发)gc
-XX:+UseParNewGC
并行gc
串行gc
-XX:+UseParallelOldGC
并行gc
Parallel mark sweep
-XX:+UseConcMarkSweep
-XX:-UseParNewGC
串行gc
并发gc,当发生concurrent mode failure 时改为串行gc
不支持的模式
-XX:+UseParNewGC -XX:+UseParallelGC
-XX:+UseParNewGC-XX:+UseSerialGC
l 串行gc的算法:
执行gc时,会暂停jvm其它的工作线程,然后开始标记eden和servivor(form区)的活动对象,标记结束后,将eden和servivor(form)区的所有活动对象转到servivor(to)区,这时一些大对象会被直接复制到old区,然后eden和servivor(form)区里剩余的对象均是垃圾了,释放他们占用的内存。这时将servivor 的to区标记为form,form标志为to区。
如果在复制到to区时,to区已满,则直接复制到old区。
l Mark-sweep-compact算法:
在mark时,标记活动的对象,sweep时,标记垃圾对象,compact时,将活动对象向old区的一端平移,然后将垃圾对象释放,这时old区的另一端就是一大块可用的空间。
l 并行gc:
并行gc就是使用多线程(Linux中叫多进程)执行串行的gc算法;
l 并发gc(CMS)算法:
(1)并发gc会先暂停jvm运行,然后标志应用中的强可达对象;
(2)开始并发标志引用强可达对象的对象;这时程序还在运行,
(3)因为程序正在运行,这时重新标志一下引用被修改的对象(这时jvm会再次暂停)
(4)重新标记后,堆中所有活动对象被标记出来了,然后开发开始回收堆中的垃圾对象;
(5)该算法不进行compact,而是在内存中建立一个空闲内存的链表,下次在old区分配空间时,会先找到一个符合条件的空闲空间给对象,该方式会影响old区和young区的对象空间分配,影响young区主要是由于有些young区的对象需要转至old区.
- java 中的gc的几种方式及各个方式使用的收集算法
- java 中的gc的几种方式及各个方式使用的收集算法
- Java枚举的几种使用方式
- 使用java排序的几种方式
- Java中的两种GC方式
- GC的三种方式
- GC的三种方式
- Java集合遍历的几种方式总结及比较
- Java中的IOC注入的几种方式
- Java中的几种读取properties配置文件的方式
- 聊一聊Java中的几种读取properties配置文件的方式
- java中的定时任务实现的几种方式
- 我所收集的几种ComboBox填充方式
- Java 2 垃圾收集机制,关于WeakReference等几种引用方式的阐述
- TabHost两种实现方式及各个方法的作用
- Struts2 中的数据传输的几种方式
- java使用JDBC连接数据库的几种方式
- CSS的几种使用方式
- swift3.0键盘弹起,遮挡输入框问题
- sublime Text3插件安装记录
- 设计模式学习笔记--命令模式
- VS2013/MFC编程入门之二十(常用控件:编辑框Edit Control)
- == 和===的比较
- java 中的gc的几种方式及各个方式使用的收集算法
- laravel引入jquery
- gradle脚本入门
- c/c++ bool和BOOL的区别
- Button长按和点击事件的冲突问题
- 屏蔽输入框自动弹出
- git 分支管理 推送本地分支到远程分支等
- spring boot更换banner
- android应用sqlite遇到的问题