JVM学习初整理

news2024/11/19 3:29:30

JVM
内存结构(运行时数据区):堆(Heap),方法区(Method area),栈(本地方法栈(Native Method Stacks),虚拟机方法栈(Java  Virtual Machine Stacks)),程序计数器(The pc Register)

堆:java虚拟机所管理的内存中最大的一块;在虚拟机启动时创建,被所有线程共享,java对象实例及数组都在堆上分配

方法区:Java虚拟机规范把方法区描述为堆的一个逻辑部分,别名Non-Heap,目的是与java堆区分开来,在java虚拟机启动时创建,被所有线程共享;用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译后的代码等数据;当方法区无法满足内存要求时抛出OutOfMemoryError异常

虚拟机栈:是一个线程执行的区域,保存着一个线程中方法的调用状态;

              1:一个JAVA线程的运行状态由一个虚拟机栈保存,所以虚拟机栈是线程私有的,随着线程的创建而创建

              2:每一个被线程执行的方法为该栈中的栈帧,即每个方法对应一个栈帧;调用一个方法就会向栈中压入一个栈帧,一个方法调用完成,就会把该栈帧从栈中弹出(FILO先压入的栈帧后弹出)

程序计数器:线程的执行权由CPU时间分片轮换调度,当一个线程执行过程中失去了执行权时由程序计数器记录当前线程执行的位置,待线程再次获得执行权时由程序计数器记录的位置处开始执行

               1:如果线程正在执行的是JAVA方法,则计数器记录的是正在执行的虚拟机字节码指令的地址

               2:如果线程正在执行的是native方法,则这个计数器为空

本地方法栈:如果线程执行的是native方法,这些方法就会在本地方法栈中执行;如果在JAVA方法中调用native方法,则以动态链接的方式执行调用

内存结构(概念):老年代(old),新生代(Eden,survive0,survice1)

垃圾回收(GC):

    Eden:1:在JAVA对象的头部(markWord)中会存储当前的对象GC次数,当一个对象GC次数大于18时会将此对象从新生代转移到老年代

                2:当有较大的对象进入Eden区时,首先会将Eden存在的不连续空间的对象转移到survive0区;当survive0区中的对象总内存超过survive0区的一半时,将survive0区中对象复制到survive1区中以便在survive0区中空出连续的完整空间

                3:当占有超过Eden区内存一半的对象时,会直接存放到老年代

  什么时候会进行垃圾回收:

                 1:当Eden区或S区内存不够用了

                 2:老年代空间不够用了

                 3:方法区空间不够用了

                4:System.gc()

垃圾回收算法:标记-清除,标记复制

   可达性分析算法:通过GC Root对象(能作为GC Root:类加载器,Thread,虚拟机栈的本地变量表,static成员,常量引用,本地方法栈的变量等)开始向下寻找,看某个对象是否可达,不可达的对象标记回收

标记-清除(Mark  Sweep)

    标记:找出内存中需要回收的对象,并且把它们标记出来。此时堆中的所有对象都要被扫描一遍,才能确定需要被回收的对象,比较耗时。

    清除: 清除掉被标记需要回收的对象,释放出对应的内存空间。

    缺点:  标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。

标记-复制(Mark Copying)

      将内存划分为两块相等的区域,每次只使用其中一块,当其中一块使用完了,就将还存活的对象复制到另外一块内存上,然后把已使用过的内存空间一次清除掉。

     缺点:空间利用率降低

标记-整理(Mark Compact)

     标记过程与“标记清除算法”一致,但后续步骤不是直接对可回收对象进行清理,而是让存活对象都向一端移动,然后直接清理掉端边界以外的内存。 相较于“标记复制算法”来说少了一个“保留区”。

 Young区:复制算法(对象在被分配之后,可能生命周期比较短,Young区复制率较高)

 Old区:标记清除或整理(Old区对象存活时间比较长,复制来复制去没有必要,不如做个标记再整理)

 垃圾收集器分类:

        串行收集器:Serial、Serial Old

        只能有一个垃圾回收线程执行,用户线程暂停;适用于内存比较小的嵌入式设备

        并行收集器(吞吐量优先):Parallel Scanvenge、 Parallel Old

         多条垃圾回收线程并行工作,但此时用户线程仍然处理等待状态;适用于科学计算,后台处理等交互场景

        并发收集器(停顿时间优先):CMS、G!

        用户线程和垃圾收集线程同时执行(可能是交替执行),垃圾收集线程在执行的时候不会停顿用户线程的运行;适用于相对时间有要求的场景,比如Web

JVM查看参数

java -XX:+PrintFlagsFinal -version > flags.txt

常用参数含义

 

 

 

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

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

相关文章

空调集中控制器的分类

在日常生活中,人们接触较多的是空调遥控器,空调智能控制器与空调遥控器有较大区别。空调遥控器是一对一管理,空调控制器可以集中管理。一般应用于机房管理、学校教室、图书馆管理、办公室、大型商场、工厂宿舍等地方。 红外空调控制器 红外空…

ACM6753(18V/3A三相无感BLCD无刷直流电机驱动IC)

概述 ACM6753是一款18V/3A三相无感BLCD(无刷直流)电机驱动IC、180˚正弦,集成驱动算法预驱MOS ,内置电流检测。 产品指标和特性 • 供电电压范围:5V-24V • 上侧MOS下侧MOS:250mΩ • 3A 连续旋转电流,4A峰值保护电流 …

图书商城在线销售系统(ssm,layui,mysql)+全套视频教程

今天,我们发布一套【图书商城在线销售系统(ssm,layui,mysql)】,系统使用技术包含JAVA,SSM,LAYUI,MYSQL,这套系统后台框架使用SSM,数据库使用MySql, 这套系统包含完整的源代码和数据库脚本,根据我们提供的开发工具和运行视频教程,拿…

Java进阶——IO流(II)

文章目录三、节点流和处理流3.1、处理流BufferedReader和BufferedWriter3.2、处理流BufferedInputStream和BufferedOutputStream3.3、对象流ObjectInputStream和ObjectOutputStream3.4、标准输入输出流3.5、转换流InputStreamReader和OutputStreamWriter3.6、打印流**PrintStre…

【多目标进化优化】MOPSO 原理与代码实现

🎈💞💞 😇 热烈欢迎您的到来 😇 💘💘🎈——青年有志 🏆初衷: 通俗的语言 dapei 核心的内容 🎉 博主相信: 有足够的积累&#xff0c…

一个简单的WEB网页制作作业——黑色的山河旅行社网站(5个页面)HTML+CSS+JavaScript

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

2022年各国程序员编程水平排行榜出炉,排名第一的国家没听说过

哪个地方的程序员编程水平最高?相信很多人对这个问题感兴趣,今天就来聊一聊这个话题。 Pentalog 是一个全球数字服务平台,主要帮助企业寻找世界上一流的IT人才,每年都会发布一份全球IT行业报告,今天文章的数据也是来自…

单片机控制马达驱动IC的应用

8位机最常见的应用单片机驱动马达IC工作,马达可支持无级调速(PWM),正转,反转,刹车。该应用简单高效适应于各种应用,节约成本的不二选择。 今天就跟大家分享曾经做过的马达驱动IC的应用。 主电…

类的加载器

文章目录1. 概述1.1 大厂面试题1.2 类加载的分类1.3 类加载器的必要性1.4 命名空间1.5 类加载机制的基本特征2. 类的加载器分类2.1 引导类加载器2.2 扩展类加载器2.3 系统类加载器2.4 用户自定义类加载器3. 测试不同的类的加载器4. ClassLoader源码解析4.1 ClassLoader的主要方…

测量电源纹波-正确测量方法

测量纹波需要注意的点: 1、用弹簧探针; 2、测量位置在输出电容两端; 3、示波器选择‘20M’; 4、示波器选择‘交流耦合’; 5、示波器探头‘X1’,示波器设置‘X1’;(10:1的探头,实际上…

Stable Diffusion V2.1非标准分辨率图像高清渲染

Stable Diffusion V2.1非标准分辨率图像高清渲染 Stable Diffusion V2.1发布,支持非标准分辨率图像高清渲染。 SD2.1在线体验 在线体验地址:Stable Diffusion 模型包括: NovelAI,NovelAI的模型训练使用了数千个网站的数十亿张图片&#xf…

如何给图片加水印?分享怎么给图片加水印的方法

当我们在平台上发布自己精心拍摄的照片,或分享自己总结的知识点时,难免会遇到一些人盗用自己图片的情况。这时候,我们就会给图片添加上水印,从而来防止自己的图片被盗,那要怎么给图片加水印呢?别着急&#…

《自己动手写CPU》学习记录(3)——第4章/Part 1

目录 引言 致谢 平台 ori 指令 流水线结构建立 模型 简单的MIPS五级流水线结构 设计 宏定义 程序计数器 译码 通用寄存器 指令执行 内存访问 指令ROM 顶层文件 处理器顶层 SOPC顶层 功能仿真 TestBench 仿真结果 执行时间 时序细节 引言 本篇学习书本…

Java大型企业进销存系统源码带文字搭建教程

技术架构 技术框架:SpringBoot Spring Data Jpa SpringMvc Shiro安全认证 完整权限系统 easyui 运行环境:jdk8 IntelliJ IDEA maven 宝塔面板 本地搭建教程: 1.下载源码,小皮面板创建一个数据库,导入db_jxc2.…

nodejs模板引擎的使用

前后端不分离的情况(数据都来源于后端,前后端不可以分离使用) npm i express art-template express-art-template --S 先下载模板引擎,模板渲染,还有experss服务器的包 js代码 //导入express服务器第三方的包 const express require("express") //导入模板引擎 con…

Spring Cloud(十六):微服务分布式唯一ID

分布式唯一ID 特点方案 雪花算法 特点开源实现优缺点 替代方案 UUIDMongdbSeata数据库生成Redis 基于美团的 Leaf分布式 ID 微服务 Leaf-segment 数据库方案 双 buffer 优化 — TP999 数据波动大 Leaf 高可用容灾 — DB 可用性Leaf-snowflake 雪花方案 弱依赖 ZooKeeper 解决时…

加减大师-第10届蓝桥杯Scratch选拔赛真题精选

[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第98讲。 蓝桥杯选拔赛每一届都要举行4~5次,和省赛、国赛相比,题目要简单不少,再加上篇幅有限,因此我精挑细选…

Vue学习笔记--第一章(尚硅谷学习视频总结)

目录 一、第一章 Vue核心 1.1. Vue简介 1.1.1. 官网 1.1.2. 介绍与描述 1.1.3. Vue 的特点 1.1.4. 与其它 JS 框架的关联 1.1.5. Vue 周边库 1.2.初识Vue 1.3. 模板语法 1.4. 数据绑定 1.5 el与data的两种写法 1.6 MVVM模型 1.7 Vue中的数据代理 1.8.事件处理 1.…

从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址

从零学习 InfiniBand-network架构(九) —— IB协议中子网本地地址 🔈声明: 😃博主主页:王_嘻嘻的CSDN主页 🔑未经作者允许,禁止转载 🚩本专题部分内容源于《InfiniBand-n…

鸿蒙3.0应用开发若干问题及上架总结

1.如何去掉默认标题栏,实现全屏显示? 在config.json中的ability配置信息中添加属性: "abilities": [ {..."metaData": {"customizeData": [{"name": "hwc-theme","value": &q…