JVM的内存分区以及垃圾收集

1.JVM的内存分区

1.1方法区

方法区(永久代)主要用来存储已在虚拟机加载的类的信息、常量、静态变量以及即时编译器编译后的代码信息。该区域是被线程共享的

1.2虚拟机栈

虚拟机栈也就是我们平时说的栈内存,它是为java方法服务的。每个方法在执行的 时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。虚拟机栈是线程私有的,它的生命周期与线程相同。

1.3本地方法栈

本地方法栈和虚拟机栈类似,只不过本地方法栈为 Native 方法服务

1.4堆

java 堆是所有线程所共享的一块内存,在虚拟机启动时创建,几乎所有的对象实例都在这里创建,因此该区域经常发生垃圾回收操作。堆区由可划分为新生代、老年代和元空间三个区域。新生代是所有java对象出生的地方,也是垃圾回收最频繁的区域,新生代的对象大多都朝生夕灭,且Eden区和From、To区三个的比例为8:1:1。老年代是存储被长期使用的对象,元空间存储一些方法中操作的临时对象。

1.5程序计数器

内存空间小,字节码解释器工作时通过改变这个计数值可以选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理和线程恢复等功能都需要依赖这个计数 器完成。该内存区域是唯一一个 java 虚拟机规范规定不会抛 OOM 错误的区域(OOM:Out Of Memory,内存用完)。

2.内存的回收策略

  1. 对象优先在Eden区分配
  2. 大对象由于需要大量连续的内存因此直接进入老年代
  3. 长期存活的对象直接进入老年代

3.垃圾收集方式

GC是garbage collection的缩写,意思是垃圾回收,把堆内存中不再使用的空间释放掉,清理不再使用的对象。

内存泄露:对象不被使用且没有被回收

内存溢出:申请内存时没有足够内存使用

3.1从范围上可划分为:

  • Minor GC:发生在新生代的垃圾收集动作
  • Major GC: 回收老年代垃圾
  • Full GC:收集整个java堆和方法区的垃圾

3.2具体的垃圾收集算法

(1)复制算法:

Minor GC一般就是使用复制算法,具体过程就是:把存活的对象复制到另外一块区域,然后把原来区域所有对象全部清除。

优点:效率高     缺点:需要内存容量大,比较耗内存,适用于占用空间小、刷新次数多的新生区

(2)标记清理:

具体操作就是将未使用的对象进行标记然后回收。但是收集效率比较低且容易产生内存碎片。

(3)标记整理:

标记整理就是在标记清理的基础上将内存碎片进行整理,虽然不会产生碎片,但是需要移动对象导致效率低速度慢。并且标记整理一般会和标记清理混合使用在老年代用于回收垃圾。

总的来说java回收垃圾采用了分区分代回收思想。

4.垃圾的判定

如何判定在内存中哪些对象是垃圾?

4.1引用计数器

简单来说就是看一个对象还有没有人用它。有地方用它计数器加一,用完了计数器减一,如果一个计数器为0说明是个死对象,就可以被回收了。有个缺陷就是无法解决循环引用问题,就是A引用了B,B也引用了A,直接套娃上了,计数器都为1无法进行垃圾回收,所以主流虚拟机一般不用这种算法

4.2可达性算法

从GCroot到一个对象间没有可到达的路径,则认为该对象不可访问,就可以进行垃圾回收,比如obj5和obj6

哪些对象可以作为GC Roots:

  • 栈中引用的对象
  • 类静态属性引用的对象
  • 常量引用的对象
  • Native方法引用的对象

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

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

相关文章

最大公因数,最小公倍数详解

前言 对于初学编程的小伙伴们肯定经常遇见此类问题,而且为之头疼,今天我来给大家分享一下,最大公因数和最小公倍数的求法。让我们开始吧! 文章目录 1,最大公因数法1法2法3 2,最小公倍数3,尾声 …

[C++] 虚函数、纯虚函数和虚析构(virtual)

📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 Loewen丶原创,首发于 CSDN,转载注明出处🙉&…

cmake 最基础示例

C 代码 文件名&#xff1a;first_cmake.cpp #include <iostream> using namespace std;int main() {cout<< "A" << endl;return 0; }CMakeLists.txt 文件 #CMakeLists.txt # 设置:版本 cmake_minimum_required(VERSION 3.20)# 定义 :项目名称 …

宏基因组学及宏转录组学分析工具MOCAT2(Meta‘omic Analysis Toolkit 2)安装配置及常用使用方法

详细介绍 尽管这个工具已经暂停后续开发&#xff0c;但其工具功能还是挺好的&#xff0c;大家可以参考一下&#xff0c;尤其对于喜欢自定义开发流程的可以参考是流程。 MOCAT 2&#xff08;Metaomic Analysis Toolkit 2&#xff09;是一个用于宏基因组和宏转录组数据分析的工具…

Java实现快速排序算法

快速排序算法 &#xff08;1&#xff09;概念&#xff1a;快速排序是指通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据都比另外一部分的所有数据都要小&#xff0c;然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行&…

TSINGSEE青犀城市道路积水AI检测算法视频智能监管解决方案

近年来&#xff0c;由于城市区域内涝频发&#xff0c;遇到强降水天气出现路面严重积水的情况时有发生&#xff0c;影响交通通行甚至引发事故。所以&#xff0c;对下穿隧道、下沉式道路等路面积水情况的监测显得尤为重要。传统的监管方式很难及时发现道路积水情况&#xff0c;那…

物易管预测性维护平台3.6.0版本上线,工况数据处理、设备故障模型、数据可视化等方面带来全新功能体验

物易管设备预测性维护平台V3.6.0版本近日正式发布上线&#xff0c;相较V3.5.0版本次主要新增优化设备工况数据接入、工况数据模型训练、数据可视化以及设备监测详情优化四个板块。新版本在处理工况数据、设备故障模型、数据分析展示以及设备监测方面带来全新的体验。 01设备工况…

Jtti:ssl协议未开启怎么解决?

如果你的服务器上的SSL协议未开启&#xff0c;可以按照以下步骤检查和解决问题。SSL协议通常由Web服务器配置和启用。以下是基于常见的Web服务器的步骤&#xff1a; Apache Web 服务器&#xff1a; 1.检查 Apache 是否加载了 SSL 模块&#xff1a; 在终端中运行以下命令&#x…

基于SSM的高校疫情管理系统设计与实现论文

摘 要 当下疫情不容松懈&#xff0c;此次新冠肺炎疫情是传播速度最快、感染范围最广、防控难度最大的一次重大突发公共卫生事件&#xff0c;疫情防控尤为重要&#xff0c;传统的基于纸质文本的疫情信息管理模式&#xff0c;效率低&#xff0c;无法满足管理需求&#xff0c;所以…

若依源码分析

一.登录 1.1 生成验证码 基本思路 后端生成一个表达式,74?11 74?转成图片,传到前端进行展示 将结果11存入redis 前端代码实现: 请求后端地址:http://localhost/dev-api/captchaImage,通过反向代理解决前后端跨域问题,将请求路径变为:http://localhost:8080/captchaImag…

ESXI 6.7升级update3

一、适用场景 1、企业已有专业服务器&#xff0c;通过虚拟化环境搭建了vm server&#xff1b; 2、备份整个vm server时&#xff0c;需要使用ovftool工具完成&#xff0c;直接导出ovf模板时报错&#xff1b; 3、升级EXSI6.7的build 8169922版本为update 3版本后&#xff0c;已保…

The method show() from the type Window is deprecated

java.awt.Window.show() java.awt.Component.setVisible(true); Window.show() java.awt.JFrame java.awt.Frame java.awt.Windows java.awt.Component.setVisible(true);

论文查重过多怎么降重 神码ai

大家好&#xff0c;今天来聊聊论文查重过多怎么降重&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 论文查重过多怎么降重 当论文查重率过高时&#xff0c;需要进行降重处…

LeetCode力扣每日一题(Java)66、加一

每日一题在昨天断开了一天&#xff0c;是因为作者沉迷吉他&#xff0c;无法自拔……竟然把每日一题给忘了&#xff0c;所以今天&#xff0c;发两篇每日一题&#xff0c;把昨天的给补上 一、题目 二、解题思路 1、我的思路 其实乍一看这道题还是比较简单的&#xff0c;就是让…

商业智能BI和数据可视化的区别

现在市场上有非常多的商业智能BI产品&#xff0c;几乎都在着重宣传其数据可视化功能的强大&#xff0c;给人造成一种商业智能BI就是数据可视化的印象。事实上商业智能BI并不等于数据可视化。要探究商业智能BI和数据可视化的区别&#xff0c;我们先要分别弄清楚这两个概念。 1、…

gitlab下载,离线安装

目录 1.下载 2.安装 3.配置 4.启动 5.登录 参考&#xff1a; 1.下载 根据服务器操作系统版本&#xff0c;下载对应的RPM包。 gitlab官网&#xff1a; The DevSecOps Platform | GitLab rpm包官网下载地址: gitlab/gitlab-ce - Results in gitlab/gitlab-ce 国内镜像地…

智能优化算法应用:基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MA…

常见的Linux基本指令

目录 什么是Linux&#xff1f; Xshell如何远程控制云服务器 Xshell远程连接云服务器 Linux基本指令 用户管理指令 pwd指令 touch指令 mkdir指令 ls指令 cd指令 rm指令 man命令 cp指令 mv指令 cat指令 head指令 ​编辑 tail指令 ​编辑echo指令 find命令 gr…

记一次挖矿病毒的溯源

ps&#xff1a;因为项目保密的原因部分的截图是自己在本地的环境复现。 1. 起因 客户打电话过来说&#xff0c;公司web服务异常卡顿。起初以为是web服务缓存过多导致&#xff0c;重启几次无果后觉得可能是受到了攻击。起初以为是ddos攻击&#xff0c;然后去查看web服务器管理…

Python调用API的实用技巧

导语&#xff1a;在当今的软件开发世界中&#xff0c;API&#xff08;应用程序接口&#xff09;已成为数据传输和功能调用的重要桥梁。Python作为一种功能强大的编程语言&#xff0c;提供了多种调用API的方法。本文将分享一些实用的Python调用API技巧&#xff0c;帮助你更好地利…