JVM内存模型与垃圾回收GC

Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础——这就是JVM。在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情况。在Java中JVM内置了垃圾回收的机制,帮助开发者承担对象的创建和释放的工作,极大的减轻了开发的负担。那是不是我们就不需要了解JVM了,显然在做一些优化或者深入研究应用性能的时候,JVM还是起了很关键的作用的。因此本篇就总结性的描述下JVM的内存模型与垃圾回收相关的知识。

本文的主要内容如下:

  • 内存模型
  • 垃圾回收
  • 参考文章

内存模型

各部分的功能

这几个存储区最主要的就是栈区和堆区,那么什么是栈什么是堆呢?说的简单点,栈里面存放的是基本的数据类型和引用,而堆里面则是存放各种对象实例的。

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

  • 栈存储了处理逻辑、堆存储了具体的数据,这样隔离设计更为清晰
  • 堆与栈分离,使得堆可以被多个栈共享。
  • 栈保存了上下文的信息,因此只能向上增长;而堆是动态分配

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

栈区

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

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

  • 堆得内存由-Xms指定,默认是物理内存的1/64;最大的内存由-Xmx指定,默认是物理内存的1/4。
  • 默认空余的堆内存小于40%时,就会增大,直到-Xmx设置的内存。具体的比例可以由-XX:MinHeapFreeRatio指定
  • 空余的内存大于70%时,就会减少内存,直到-Xms设置的大小。具体由-XX:MaxHeapFreeRatio指定。

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

程序计数器

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

方法区

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

总结

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

垃圾回收

如何定义垃圾

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

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

  • 显示的把某个引用置位NULL或者指向别的对象
  • 局部引用指向的对象
  • 弱引用关联的对象

垃圾回收的方法

Mark-Sweep标记-清除算法

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

Copying复制算法

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

Mark-Compact标记-整理算法

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

Generational Collection 分代收集

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

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

  • 新生代(Young Generation):用于存放新创建的对象,采用复制回收方法,如果在s0和s1之间复制一定次数后,转移到年老代中。这里的垃圾回收叫做minor GC;
  • 年老代(Old Generation):这些对象垃圾回收的频率较低,采用的标记整理方法,这里的垃圾回收叫做 major GC。
  • 永久代(Permanent Generation):存放Java本身的一些数据,当类不再使用时,也会被回收。

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

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

  • 当触发minor GC时,会先把Eden中存活的对象复制到to Survivor中;
  • 然后再看from survivor,如果次数达到年老代的标准,就复制到年老代中;如果没有达到则复制到to survivor中,如果to survivor满了,则复制到年老代中。
  • 然后调换from survivor 和 to survivor的名字,保证每次to survivor都是空的等待对象复制到那里的。

垃圾回收器

串行收集器 Serial

这种收集器就是以单线程的方式收集,垃圾回收的时候其他线程也不能工作。

并行收集器 Parallel

以多线程的方式进行收集

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

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

G1收集器 Garbage First Collector

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

参考

转载于:https://www.cnblogs.com/erma0-007/p/8655029.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/453159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows批处理命令学习

Windows批处理命令学习一 Windows的批处理命令固然比不上unix的shell脚本强大,但用好了仍能给我们的工作带来很大作用。一个朋友问我为什么学习批处理命令,我以《程序员修炼之道——从小工到专家》一书的一句话答复他:图形界面的优点是所见即…

介质控制访问为什么不适用多路复用技术来解决冲突

因为使用频分多路复用或者时分多路复用会增加延迟时间,同时信道利用率也比较低

CAE所表示的计算机术语是,计算机应用中,英文缩略语CAE所表示的计算机术语是()。...

_刚果红染色可呈红色阳性反应的疾病有()。当管流过水断面流速按抛物线规律分布时,管中水流为紊流。一般含硫量较低的石油多产自碳酸盐岩系和膏岩系含油层。转移因子属于免疫()剂,适用于()。某客户在南京分行营业部开立的一卡通凭证失磁/损坏,…

第 11 章 Paragraphs

目录 11.1. para11.2. simpara11.3. formalpara11.4. bridgehead11.5. blockquote11.6. sidebar11.7. TM 商标 11.8. epigraph 题词11.9. Font Formatting Codes11.9.1. strong11.9.2. bold11.9.3. italic11.9.4. literal11.9.5. remark11.1. para <para>helloworld</…

伤疤好了有黑印怎么办_春藤家长圈|家有二孩,老大老二一起抢东西,家长该怎么办?...

本期主讲&#xff1a;齐静美国G.T.I.认证父母效能训练师高级家庭教育指导师未来春藤家长学院特聘讲师(西安)五年一线幼儿教学从业经验两个孩子的妈妈每周一次的春藤家长圈线上案例分享时间到啦&#xff01;本周是我们线上案例分享的第十四期&#xff01;本周案例&#xff1a;本…

Java_方法

方法就是将一段代码封装在一个结构体中&#xff0c;并且可反复调用 方法的定义&#xff1a; public static 返回值类型 方法名称 &#xff08;[参数类型 变量&#xff0c; 参数类型 变量&#xff0c;参数类型 变量...]&#xff09;{ 方法中包含的代码&#xff1b; [return 返回…

2011年度最佳代码“不管你们信不信,我反正信了”

最近有段十分流行的代码&#xff0c;是从江湖传闻“身怀八蛋”的铁道部发言人王勇平同志的一句名言&#xff1a;“不管你们信不信&#xff0c;我反正信了……这是生命的奇迹……它就是发生了”所引申出来的。这段代码虽然只是在调侃&#xff0c;但是围绕这段代码也产生了一些讨…

无锡计算机硬件培训,无锡锡山办公软件电脑基础培训随到随学 学会为止

一、办公 2个月WORD文字处理&#xff1b;EXCEL电子表格应用&#xff1b;PowerPoint动画幻灯片制作&#xff1b;国际互联网、电子邮件、网上传真&#xff1b;软件安装、计算机维护、基础、常用办公硬件的使用(打印机、扫描仪、刻录机、数码相机等)从事行政、管理、文秘、销售、…

以太网和局域网的关系

以太网 以太网是当今现有局域网采用的通用通信协议标准&#xff0c;组建于七十年代早期。Ethernet(以太网&#xff09;是一种传输速率为10Mbps的常用局域网&#xff08;LAN&#xff09;标准。在以太网中&#xff0c;所有计算机被连接一条同轴电缆上&#xff0c;采用具有冲突检…

不懂卷积神经网络?别怕,看完这几张萌图你就明白了

本文来自AI新媒体量子位&#xff08;QbitAI&#xff09;这篇文章用最简明易懂的方式解释了卷积神经网络&#xff08;CNN&#xff09;的基本原理&#xff0c;并绕开了里面的数学理论。 同时&#xff0c;如果想对从头开始构建CNN网络之类的问题感兴趣&#xff0c;作者推荐去读《 …

xrd连续扫描和步进扫描_一种提高xrd实验精度的方法

一种提高xrd实验精度的方法【专利摘要】本发明公开了一种提高XRD实验精度的方法&#xff0c;包括如下步骤&#xff1a;步骤1&#xff1a;将待测试样进行处理至表面平整光洁&#xff1b;步骤2&#xff1a;选用步进扫描方式对待测钢试样进行XRD实验&#xff0c;步进扫描方式的扫描…

2018双一流排名 计算机,2018中国双一流高校名单

目前全球范围内&#xff0c;比较有影响力的世界大学排名包括《QS世界大学排名》、《世界大学学术排名(ARWU)》、《泰晤士高等教育世界大学排名》、《usnews世界大学排名》和CWUR沙特阿拉伯全球大学评级中心世界大学排名。这些排名从各个方面对世界范围内的高校进行综合排名&…

交换机和集线器的区别

集线器采用的是共享带宽的工作方式&#xff0c;简单打个比如&#xff0c;集线器就好比一条单行道&#xff0c;“10M”的带宽分多个端口使用&#xff0c;当一个端口占用了大部分带宽后&#xff0c;另外的端口就会显得很慢。相反&#xff0c;交换机是一个独享的通道&#xff0c;它…

移动平台还有哪些创业机会

这是一个移动互联网创业的最好时代。 过去的2011年&#xff0c;国内大批创业者为移动互联网而疯狂。这个超过200亿元的市场牢牢吸引着他们&#xff0c;每天都有新鲜的主意转化为应用。 移动互联网时代的创业成本远小于互联网时代。创新工场创始人李开复在2011中国移动开发者大…

Swift封装 滑出式导航栏

前言&#xff1a; 本文将会创建以下几个主类&#xff1a; DWContainerViewController&#xff1a;这包含了左视图&#xff0c;中视图和右视图控制器的视图&#xff0c;并处理动画和滑动等操作。 DWCenterViewController&#xff1a;中央面板。 DWSidePanelViewController&#…

广东电网计算机专业笔试题目,广东电网笔试题目

广东电网笔试题目笔试是一种与面试对应的测试&#xff0c;是以填写的方法考核应聘者学识水平的重要工具。这种方法可以有效的测量应聘人的基本知识、专业知识、管理知识、综合分析能力和文字表达能力等素质及能力的差异。下面是小编为大家收集的广东电网笔试题目&#xff0c;希…

波特率和比特率

波特率&#xff08;符号率&#xff09;&#xff0c;可以理解为传输介质实际能达到的电压变化&#xff0c;比如每秒可以改变多少次。 比特率&#xff0c;是逻辑层面上每秒能传输多少个比特。 考虑最简单的不归零编码&#xff0c;用5伏电压表示1&#xff0c;-5伏电压表示0&…

usart和uart 的区别

摘自:https://blog.csdn.net/meic51/article/details/7714847 什么是同步和异步 转自https://blog.csdn.net/seashine_yan/article/details/71192283转载于:https://www.cnblogs.com/chulin/p/8661720.html

苹果产品开发的绝密工作流程

长期以来苹果产品开发流程在很多方面都笼罩着一层神秘的面纱&#xff0c;而在AdamLashinsky新发行的《InsideApple:HowAmerica’sMostAdmired–andSecretive–CompanyReallyWorks》一书中对这些流程有所涉及。这本书同时谈论了苹果公司各个不同的方面&#xff0c;包括其理念、招…

Linux系统集群架构线上项目配置实战(一)

项目整体介绍 **整个项目包括以下几个应用工程** 1、 用户APP 2、 商家APP 3、 业务平台管理后台 4、 商家业务管理后台 5、 官网 **整体项目规划设计如下** 1、 用户APP采用JAVA环境布署&#xff0c;初始环境两台服务器&#xff0c;实现负载均衡与高可用&#xff0c;前端…