【转载】jvm内存回收

1.java的内存
java的内存结构分为

堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组
栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 StackOverFlowError,栈深度超标
方法区 线程共享 用于储存被虚拟机加载的类的信息,静态变量 常量和编译后的.class字节码
程序计数器 线程私有,线程之间不相互影响,独立存取;
以上部分,线程私有是不会发生gc.并且他们是随线程生随线程灭,即程序计数器 本地方法栈和虚拟机栈
来张图更详细
2.GC回收机制–判断是否可以gc
引用计数算法
原理:通过一个计数器对对象进行计数,对象被引用时+1,引用失效时-1;当计数为0时则说明可以被回收;
缺点:很难解决对象的相互循环引用问题
可达性分析算法
Java虚拟机所采用的算法;
原理:通过一些列称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
那么哪些对象可以被称为gc roots呢----虚拟机栈(栈中的本地变量列表)/方法区静态属性/方法区常量引用/本地方法栈中JNI 所引用的的对象都是可以作为 gc roots的
3.GC回收机制–如何回收
标记清除算法
清除算法分成2个阶段–标记和清除; 标记阶段对所有存活的阶段进行标记,标记完成后,再扫描整个空间未标记对象,直接回收不存活的对象.
优点:大多数情况下比较高效,缺点是会造成内存碎片,碎片太多导致后面过程中对大内存的分配无足够空间时而提前猝发一次垃圾回收动作;
复制算法
将可用内存将容量划分成大小相等的2块,每次清理时将其中A内存还存活的对象复制到B内存里面,然后再把A中清理掉;
优点高效且并不产生碎片,缺点牺牲了一半的内存为代价
适用存活对象少,回收对象多
标记整理算法
该算法标记阶段和标记清除算法一样,完成标记后它不是直接清理可回收对象,而是将存活对象都向一端移动最后清理掉端边界意外的内存;
适用于存活对象多,回收对象少的情况
分代收集算法
整合了复制算法和标记整理算法,根据新生代和老年代的不同特性采取上面的不同算法
新生代 生命周期短,每次回收时都有大量垃圾对象需要回收 复制算法
老年代 每次只有少量的对象需要回收 标记整理算法
深入理解分代回收算法 Survivor(幸存者) Eden (谷歌翻译为伊甸园)
复制算法中内存划分其实并不是按照1:1来划分老年代和新生代,而是按照8:1:1分一个大的Eden区和两个小的survivor的空间
为什么需要2个Survivor区 新生代一般经历15次Gc就可以移到老年代.当第一次gc时,我们可以把Eden的存活对象放入Survivor A空间,第二次Gc时,Survivor A也要使用复制算法,存活对象放到Survivor B上,第三次gc时,又将Survivor B对象复制到Survivor A上如此循环往复;
为什么Eden这么大,因为新生代中存活的对象,需要转移的Survivor 的对象不多,算是缓解了复制算法的缺点;
4.GC回收机制–gc的执行机制
Scavenge GC
当新对象生成并且在Eden申请空间失败时就会触发Scavenge GC;Eden区的gc会比较频繁
Full GC
是对整个堆进行清理,要比Scavenge GC要慢,什么情况要进行Full GC呢,如下四种:
持久代被写满
System.gc调用
老年代被写满
上一次GC之后Heap的各域分配策略动态变化
持久代:
用于存放静态文件,如今Java类、方法等。持久代对垃圾回收没有显著影响,但是有些应用可能动态生成或者调用一些class
出处:https://www.cnblogs.com/prophet-it/p/6498275.html

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

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

相关文章

2016杭州ccpc

Kingdom of Obsession 标签: 二分图最大匹配2016-10-29 16:23 51人阅读 评论(2) 收藏 举报分类:二分图和最大匹配(2) 版权声明:本文为棒(xian)棒(yu)博主原创文章&#x…

深入理解C语言的函数调用过程

本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程&#xff0c;以加深对一些基础知识的理解。 先看一个最简单的程序&#xff1a; 点击(此处)折叠或打开 /*test.c*/#include <stdio.h> int foo1(int m,int n,int p){ int x m n p; …

【转载保存】RunTime.getRunTime().addShutdownHook 添加钩子

https://blog.csdn.net/gongxinju/article/details/69963099

Unity3D打包后日志文件输出目录

Unity3D打包后日志文件输出目录&#xff0c;包括日志文件和崩溃时记录文件 C:\Users\Administrator\AppData\LocalLow\长沙迪迈科股份有限公司\镍矿探秘 其中"..\长沙迪迈科股份有限公司\镍矿探秘" 为unity的公司和产品设置

【转载保存】Jsoup使用

https://blog.csdn.net/ricky73999/article/details/54989972

Unity3d LookAt参数说明

Unity3d LookAt参数说明 //// 摘要: // Rotates the transform so the forward vector points at targets current position.//// 参数: // target:// Object to point towards.//// worldUp:// Vector specifying the upward direction.public void LookAt(…

SteamVR导致场景相机不正常

在Unity3D项目中导入SteamVR和VRTK后&#xff0c;有时候会导致非VR场景中的相机运行后异常&#xff0c;姿态和位置不对。 导致的原因可能是&#xff0c;工程设置不对&#xff08;SteamVR和VRTK依赖一些预定义宏&#xff09;&#xff0c;需要将相应的工程设置ProjectSettings文…

【转载保存】java优先队列使用

PriorityBlockingQueue是一个带优先级的阻塞队列,提供了阻塞获取操作。元素按优先级顺序被移除&#xff0c;该队列也没有上限&#xff08;看了一下源码&#xff0c;PriorityBlockingQueue是对 PriorityQueue的再次包装&#xff0c;是基于堆数据结构的&#xff0c;而PriorityQue…

【转载保存】HtmlUnit的使用

信息来源&#xff1a; https://blog.csdn.net/moneyshi/article/details/78799949 https://blog.csdn.net/qq_36176250/article/details/77199595

初入职场的你不应错过的一些书籍

在职场中&#xff0c;听过最接地气的一句话就是&#xff1a;在职场中要眼睛里有活儿&#xff0c;知道什么该说什么不该说&#xff0c;也不要说自己不确定的事情。今天来推荐一些职场老手建议看的书 《好好说话》 有太多人初入职场不会说话&#xff0c;而说话的能力是可以培养的…

关于 Unity WebGL 的探索

转自:https://www.cnblogs.com/yaukey/p/unity_webgl_explore_1.html 查找了 Unity 的官方资料&#xff0c;我们如果需要使用 WebGL 需要面对以下几个挑战&#xff1a; Native Plugin&#xff1a;也就是说各种原生插件&#xff08;C/C等编译的本地机器码库&#xff09;&#…

【转载保存】cookie在登录时的使用

地址:https://blog.csdn.net/df19900725/article/details/78066468?locationNum4&fps1 浏览器按F12点击network中其中一个文件&#xff0c;查看右边信息&#xff0c;把带有Cookie:这种放在addCookie(“Cookie”,“Cookie:”)这种格式

TCP/IP协议详解 卷一(阅读指导)

1. 为了利用网络知识理解服务端网络架构、排查问题、解决问题. 真的没有必要背, wireshark 工具都给你解析的不能再细了。有没有重传&#xff0c;有没有乱序&#xff0c;数据包接收的时间&#xff0c;发送窗口多大&#xff0c;数据有没有拥塞&#xff0c;等等.... 以及协议的解…

Unity脚本生命周期与执行顺序

目录 脚本生命周期 MonoBehavior生命周期图脚本执行顺序 自定义执行顺序 (文章目录) 在Unity中&#xff0c;脚本可以理解为附加在游戏对象上的用于定义游戏对象行为的指令代码。必须绑定在游戏对象上才能开始它的生命周期。游戏对象可以理解为能容纳各种组件的容器&#xff0c…

【转载保存】Java丨jsoup网络爬虫登录得到cookie并带上cookie访问

优秀文章:https://blog.csdn.net/wisdom_maxl/article/details/65631825 jsoup使用cookie&#xff1a; Set<Cookie> cookie_set LoadCSDN.load(); // WebClient wc new WebClient();HashMap<String, String> map new HashMap<String,String>();for (Cook…

Unity3D(UE4)加载倾斜摄影数据OSGB格式

在Unity3D平台动态加载调度倾斜摄影数据&#xff0c;利用多线程动态加载瓦片数据&#xff0c;可以顺畅加载海量的瓦片数据。目前测试可流畅加载100G左右数据&#xff0c;支持加载本地数据&#xff0c;数据可不放在Unity工程内&#xff0c;也可以将数据放置在服务器上实现网络加…

【转载保存】Jsoup解析html常用方法

首先我们要清楚 class的继承关系 Document 继承于 Element 继承于 Node 继承于 Object 首先 我们先研究一下 Element 中的函数作用: 01 addClass(String className) --> 添加一个class名字 到这个元素的class属性上. 02 after(Node node) --> 将指定的节点添加…

Unity打包失败解决方案

更改设置即可 &#xff1a;Edit -> Graphics Emulation-> Shader Hardware Tier 1

【转载保存】接口的压力测试工具

https://blog.csdn.net/luosaosao/article/details/72900072