首页 > 编程语言 >JVM专栏-垃圾回收策略与算法

JVM专栏-垃圾回收策略与算法

时间:2023-07-15 23:11:07浏览次数:41  
标签:垃圾 对象 回收 算法 专栏 引用 JVM 内存

程序计数器、虚拟机栈、本地方法栈随线程而生,也随线程而灭;栈帧随着方法的开始而入栈,随着方法的结束而出栈。这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。

而对于 Java 堆和方法区,我们只有在程序运行期间才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的正是这部分内存。

判定对象是否存活

若一个对象不被任何对象或变量引用,那么它就是无效对象,需要被回收。

引用计数法

在对象头维护着一个 counter 计数器,对象被引用一次则计数器 +1;若引用失效则计数器 -1。当计数器为 0 时,就认为该对象无效了。

引用计数算法的实现简单,判定效率也很高,在大部分情况下它都是一个不错的算法。但是主流的 Java 虚拟机里没有选用引用计数算法来管理内存,主要是因为它很难解决对象之间循环引用的问题。(虽然循环引用的问题可通过 Recycler 算法解决,但是在多线程环境下,引用计数变更也要进行昂贵的同步操作,性能较低,早期的编程语言会采用此算法。)

举个栗子

标签:垃圾,对象,回收,算法,专栏,引用,JVM,内存
From: https://www.cnblogs.com/sharloon/p/17557214.html

相关文章

  • 吊打面试官的16000字JVM专属秘籍,又一个Java面试神器!
    前言吊打面试官的16000字JVM专属秘籍,总共包含三部分的内容,从基础到进阶带大家一步步深入理解JVM!学完就可以在简历上面直接写上精通JVM!因为篇幅限制这里只给大家做简单的一个介绍,也就是进行一个大点的梳理,每个大点下面又有很多细枝末节的技能知识需要大家好好学透,并且能够掌握吸收到......
  • jvm基础知识
    1.jvm基础知识说明:jvm除了是压测过程中重点关注的内容,也是面试的重点1.1基础回顾java特点:跨平台内存泄漏是过程,内存溢出是结果jdk,jre,jvm的关系jdk<jre<jvm数据类型及存储基本数据类型:存储在栈内存引用数据类型:值存在堆内存,栈里存堆内存中存放的值的首地址堆栈:堆:线程......
  • 欧几里得算法
    算法\(\gcd(a,b)=\gcd(b,a\modb)\)。整除的一些引理\(a\midb\),表示\(b\)能被\(a\)整除。当\(a\midb\)且\(b\mida\)时,\(a=\pmb\)。当\(k\mida,k\midb\)时,\(d\mid(ax+by)(x,y\in\mathbbZ)\)。证明:令\(k=\gcd(a,b)\),则有\(k\m......
  • [TSG开发日志4]算法组件、个人编写的库文件如何封装成DLL,如何更好地对接软件开发?
    写在前面这个内容确实是我有点疏忽了,我以为做算法的同事应该多少对这方面会有点了解的。但是我想了一下我刚毕业的时候,确实对这方面的理解不深,查了很多资料才勉强搞懂什么意思,也是后来随着工程学习的愈加深入,才渐渐了解了在C++开发中动态链接库的重要性及如何编写。一般在说一个......
  • 马尔可夫算法
    马氏模型的含义马尔科夫链观察式子当P{En=i,En-1=in-1,...,}=p{En=i},n-1之前发生的事都和现在无关例子:转移概率矩阵练习:第3条说的是不管初始状态是什么只要j趋于无穷,最后极限与初始状态无关,极限趋于一个定值正则矩阵:1、方阵,2、逆矩阵存在例题:这道......
  • 字符串算法入门笔记
    zhx:什么AC自动机,KMP算法从来不会考zhx:不推荐用string,因为麻烦读ans入一个字符串chars[MAXN];cin>>s+1;//从s[1]开始读入,操作时方便在遍历字符串时,我们要先把字符串长度存下来,因为计算字符串长度的函数strlen的时间复杂度为\(O(长度)\),如果写成for(inti=1;i<=strlen(s+......
  • JVM内存模型和类加载
    内存模型JVM内存模型主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈。堆堆中包含了字符串常量池。程序计数器记录线程执行的字节码的地址。方法区存放已被虚拟机加载的类相关信息,包括类信息、运行时常量池(存放编译生成的字面量和符号引用)。当类加载到内存后,JVM把......
  • JVM垃圾收集
    默认垃圾收集器JDK1.7和JDK1.8默认垃圾收集器都是ParallelScavenge(新生代)+ParallelOld(老年代)JDK1.9默认垃圾收集器G1查看命令:java-XX:+PrintCommandLineFlags-versionG1JDK1.7推出的垃圾收集器,特点如下:1使用多核CPU来缩短Stop-The-World停顿的时间2分代收集3基于标记-......
  • 代码随想录算法训练营第三十一天| 62.不同路径 63. 不同路径 II
    62.不同路径思路:因为只能向左,和向下,因此只能是前面的加上左边的,递推公式较为简单代码:1intuniquePaths(intm,intn){2if(m==1||n==1)return1;34vector<vector<int>>nums(m,vector<int>(n,1));56for(inti=1;i<m;i++......
  • 【算法】在各种排列组合下,计算零钱找零方式数量
    写一个函数,在给定一系列硬币面额的情况下,计算你可以用多少种不同的方式来兑换一笔钱。例如,如果你有面额为1和2的硬币,有3种方法可以为4找零:1+1+1+1,1+1+2,2+2。硬币的顺序无关紧要:1+1+2==2+1+1此外,假设你有无限数量的硬币。示例调用,一个金额和一系列独特面额的硬币:CountCombin......