028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

JVM内存模型与垃圾回收知识点整理

这篇文章主要讲解了“JVM内存模型与垃圾回收知识点整理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM内存模型与垃圾回收知识点整理”吧!

在温岭等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、做网站 网站设计制作按需定制设计,公司网站建设,企业网站建设,品牌网站制作,网络营销推广,外贸网站制作,温岭网站建设费用合理。

本文的主要内容如下:

JVM内存模型与垃圾回收知识点整理

各部分的功能

这几个存储区最主要的就是栈区和堆区,那么什么是栈什么是堆呢?说的简单点,栈里面存放的是基本的数据类型和引用,而堆里面则是存放各种对象实例的。
JVM内存模型与垃圾回收知识点整理

堆与栈分开设计是为什么呢?

栈的大小可以通过-XSs设置,如果不足的话,会引起java.lang.StackOverflowError的异常

栈区

线程私有,生命周期与线程相同。每个方法执行的时候都会创建一个栈帧(stack frame)用于存放 局部变量表、操作栈、动态链接、方法出口。

存放对象实例,所有的对象的内存都在这里分配。垃圾回收主要就是作用于这里的。

因此一般都建议把这两个参数设置成一样大,可以避免JVM在不断调整大小。

程序计数器

这里记录了线程执行的字节码的行号,在分支、循环、跳转、异常、线程恢复等都依赖这个计数器。

方法区

类型信息、字段信息、方法信息、其他信息

总结

栈区线程私有,使用一段连续的内存空间存放局部变量表、操作栈、动态链接、方法出口-XSsStackOverflowError OutOfMemoryError
线程共享,生命周期与虚拟机相同保存对象实例-Xms -Xmx -XmnOutOfMemoryError
程序计数器线程私有、占用内存小字节码行号
方法区线程共享存储类加载信息、常量、静态变量等-XX:PermSize -XX:MaxPermSizeOutOfMemoryError

如何定义垃圾

有两种方式,一种是引用计数(但是无法解决循环引用的问题);另一种就是可达性分析。

判断对象可以回收的情况:

垃圾回收的方法

Mark-Sweep标记-清除算法

JVM内存模型与垃圾回收知识点整理

这种方法优点就是减少停顿时间,但是缺点是会造成内存碎片。

Copying复制算法

JVM内存模型与垃圾回收知识点整理

这种方法不涉及到对象的删除,只是把可用的对象从一个地方拷贝到另一个地方,因此适合大量对象回收的场景,比如新生代的回收。

Mark-Compact标记-整理算法

JVM内存模型与垃圾回收知识点整理

这种方法可以解决内存碎片问题,但是会增加停顿时间。

Generational Collection 分代收集

最后的这种方法是前面几种的合体,即目前JVM主要采取的一种方法,思想就是把JVM分成不同的区域。每种区域使用不同的垃圾回收方法。

JVM内存模型与垃圾回收知识点整理

上面可以看到堆分成三个区域:

这里可以详细的说一下新生代复制回收的算法流程:

在新生代中,分为三个区:Eden, from survivor, to survior。

垃圾回收器

JVM内存模型与垃圾回收知识点整理

串行收集器 Serial

这种收集器就是以单线程的方式收集,垃圾回收的时候其他线程也不能工作。
JVM内存模型与垃圾回收知识点整理

并行收集器 Parallel

以多线程的方式进行收集
JVM内存模型与垃圾回收知识点整理

并发标记清除收集器 Concurrent Mark Sweep Collector, CMS

大致的流程为:初始标记--并发标记--重新标记--并发清除

JVM内存模型与垃圾回收知识点整理

G1收集器 Garbage First Collector

大致的流程为:初始标记--并发标记--最终标记--筛选回收

JVM内存模型与垃圾回收知识点整理

感谢各位的阅读,以上就是“JVM内存模型与垃圾回收知识点整理”的内容了,经过本文的学习后,相信大家对JVM内存模型与垃圾回收知识点整理这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


分享名称:JVM内存模型与垃圾回收知识点整理
当前链接:http://www.tsicrk.com/article/pdheeg.html

其他资讯

让你的专属顾问为你服务

2.9415s