JVM知识点梳理

news2024/11/28 4:33:36

什么是JVM?

        JVM是java虚拟机的缩写 ,也是java程式可以实现跨平台的关键。

JVM部分需要知道什么东西?

        JVM的结构和功能、参数配置、GC回收机制、GC回收器极其优缺点。

JVM结构(栈,程序计数器,方法区,栈)

 

从Java源码开始,JVM需要把源码转化为字节码,每个线程(包括主线程)都会产生一个虚拟机栈,里面会存储引用变量以及参数信息。程序计数器记录每个线程中执行的位置,当它遇到没见过的类时候,就会跑去对该类进行加载,将类的方法名,成员变量,注解等信息存储到方法区中。当该类被使用,new出对象,则将new的对象放到堆中。由此构建出JVM的结构,其中,程序计数器和栈是每个线程私有的,即多个线程时就会有多个对应的程序计数器和栈。而方法区和堆是共享且唯一的。

图中还包括解释器和即时编译器,解释器的作用是把字节码解释称CPU能识别的机器码,但是它是一条一条的解释,当有循环时,它会把循环中的内容一遍一遍的解释,故此会影响效率。此时即时编译器就发挥了它的作用,它把这些循环重复多次的语句存储,避免解释器反复解释。

GC回收

GC回收是指对内存中不再使用的对象进行清除的操作,把它们的资源释放出来。

GC回收原理是通过可达性算法和三色标记法配合,根据算法找到根对象,然后沿着根对象找与之相关的对象,使用黑灰白三色标记,将已经标记的表示为黑色,正在标记的表示为灰色,未标记的表示为白色。最终检查完后,将所有白色的进行清除。

GC回收机制有三种方法:

        1.标记清除法

        2.标记整理法

        3.标记复制法

由上述解释可知,所谓标记,是将正在使用的对象进行标记,标记清除法的意思就是将未标记的进行清除,它的优点是快速,缺点就是,会形成内存碎片,因为没发保证正在使用的都是连续的。而标记整理法,是在标记清除法上加了一个整理的步骤,将不连续的区域整理成连续的。因此它解决了标记清除法产生内存碎片的问题,但是它的缺点就是会导致速度不如前者。于是产生了第三种标记复制法,它会产生两个内存区,“from”和“to”,它会把所有标记的内容复制到to区上,复制完后,就把原本的区域全部清除掉,清除完之后,会把from区和to区调换位置,后续操作依次。它解决了标记清除法和标记整理法的缺点,但是它的缺点是需要多一块区域,会比另外两个方法多占用内存资源。

标记清除法,现在的GC垃圾回收器都已经没有使用了。

标记整理法,常用于老年代。

标记复制法,常用于新生代。

上述提到两个新名词,老年代和新生代,这两个区都在堆中。其中新生代又划分为eden区和Survivor区(默认eden区和Survivor区大小比例为八比一,Survivor区包含两个区域,一个叫“from”一个叫“to”),所有新new的对象都会先在eden区创建,当eden区堆积满了之后,做垃圾回收,会把还存在的对象放入Survivor,当Survivor经过多次垃圾回收,依旧存在的对象就会进入老年代(默认操作15次)。因为新生代朝生暮死,大多数生命周期短,因此可以减少复制使用到的空间,故而标记复制法适用于新生代。又因为老年代默认为生命周期长,而且标记整理法中整理部分比较耗费时间,但是老年代的垃圾回收频率会低很多,故而老年代使用的是比较耗费时间的标记整理法。

垃圾回收器包括:Parallel GC、Concurrent Mark Sweep GC、G1 GC。

Paarllel GC:注重的是吞吐量。

Concurrent Mark Sweep GC:注重响应速度。

G1 GC:兼容吞吐量和响应速度。

上述不够完整,持续维护中……

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

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

相关文章

0009-TIPS-SLAB入门与观察

极简,但是能快速上手 slub算法 这篇文章简洁直观,推荐 linux 内核 内存管理 slub算法 (一) 原理 感受slub堆漏洞 需要下载 https://github.com/De4dCr0w/green-dill ,使用其中的测试程序做实验 UAF 如果看完上面链…

F407/103启动文件and启动过程

STM32 启动文件简介 STM32 启动文件由 ST 官方提供,在官方的固件包里。 startup_stm32f40_41xxx.s 启动文件由汇编编写,是系统上电复位后第一个执行的程序。 启动文件主要做了以下工作: 1 、初始化堆栈指针 SP _initial_sp 2 、初始…

SSM面试题

文章目录 一、Spring1.1 配置一个bean的方式?注解/xml1.2 spring 自动装配 bean 有哪些方式?1.3 spring 常用的注入方式有哪些?1.4 Component和Bean的区别?1.5 spring 事务实现方式有哪些?1.6 spring事务的传播机制?1.7 spring 的事务隔离? 二、SpringMVC2.1 SpringlIvc…

阿里云在国内市场占有率怎么样?

阿里云在国内市场占有率怎么样?   阿里云在国内市场占有率分析   随着互联网的飞速发展,越来越多的企业和个人开始利用云计算服务来满足各种业务需求。作为中国领先的云服务提供商,阿里云自成立以来就受到了广泛关注。本文旨在分析阿里云…

cmake入门(2)

cmake 教程2 demo cmake_minimum_required(VERSION 3.10) project(Tutorial)set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True)add_executable(Tutorial tutorial.cxx)基础 cmake_minimum_required cmake的版本要求 project 项目的名字,同时会生…

ad18学习笔记五:统计焊盘数量(board information)

AD18之后,Altium Designer改动比较大。下面将介绍AD19如何统计焊盘(PAD数量)与SMT贴片数量与插件数量 1: PCB 空白处 -> F11 -> Properties 选项卡 -> Board Information -> Pads 2: Pads 包括 通孔焊盘和贴片焊盘 Vias 包括过孔…

22.小波神经网络时间序列预测交通流量(附matlab程序)

1.简述 学习目标:小波神经网络时间序列预测交通流量 WNN(小波神经网络):是在误差反传神经网络拓扑结构的基础上发展而来的网络,与神经网络的结构具有一定的相似.在小波神经网络中,当整体信号…

第十三章 csv模块

1. csv模块介绍 介绍csv 模块前,需要先了解csv 文件(.csv 文件格式),csv 文件中的每行代表电子表格中的一行,并用逗号分隔该行中的单元格。 csv 文件可以使用记事本打开,可以使用Excel 另存为.csv 文件格…

docker内访问tdengine服务

踩坑记 springboot项目使用docker部署。由于tdengine原生连接方式需要安装客户端,第一想法是宿主机装好客户端,然后映射驱动到容器内部,网上找的教程也基本是这种思路。尝试了一天失败了。 错误1:libjemalloc.so.2 file: No such file or d…

docker安装下载tomcat一站式搞定并设置挂载卷

阿丹: 之前在使用nginx部署搭建vue项目的时候没有出docker配置nginx的配置文档(因为之前使用的是腾讯云现成的nginx服务器),今天配置安装一下tomcat和nginx在docker里面的安装。 在docker中安装配置tomcat 操作解读:…

服务器中间件

文章目录 一、tomcat二、 nginx2.1 代理问题2.2 负载均衡问题2.3 资源优化2.4 Nginx处理2.5 Nginx的特点:2.6 Nginx的安装2.7 Nginx的配置文件2.8 Nginx的反向代理2.9 反向代理:2.10 基于Nginx实现反向代理2.11 关于Nginx的location路径映射2.12 负载均衡…

【实战项目】利用mmdetection识别卫星遥感影像上的电线杆塔

前言 这次项目算是对openmmlab AI实战营第二期的一个实验证明,虽然这几天学习的比较粗糙,但也算是入门了mmdetection。 这个工具就像python一样,openmmlab已经将入门门槛做的很低了,但如果想精进、熟练甚至做真正的调参侠&#xf…

小白到运维工程师自学之路 第三十九集 (LVS架构)

一、概述 1、lvs LVS是Linux Virtual Server的缩写,是一种基于Linux内核的高性能、高可用性的 负载均衡软件。它可以将多台服务器组成一个虚拟的服务器集群,通过负载均衡算法将 客户端请求分发到不同的服务器上,从而提高系统的可用性和性能…

【MQTT 5.0】协议 ——发布订阅模式、Qos、keepalive、连接认证、消息结构

一、前言1.1 MQTT 协议概述1.2 MQTT规范 二、MQTT 协议基本概念2.1 发布/订阅模式2.11 MQTT 发布/订阅模式2.12 MQTT 发布/订阅中的消息路由2.13 MQTT 与 HTTP 对比2.14 MQTT 与消息队列 2.2 服务质量:QoS2.21 QoS 0 最多分发一次2.22 QoS1 至少分发一次2.23 QoS 2 …

一款可以支持SNMP协议的网络型温湿度变送器资料

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资料物件。该协议能够支持网络管理系统&am…

generator和promise和async的异同

一、generator(生成器)是ES6标准引入的新数据类型,他和promise一样都是异步事件的解决方案 //generator函数生成斐波那契// generator(生成器)是ES6标准引入的新数据类型,async就是 Generator 函数的语法糖//本质:用来处理异步事件的对象/包含异步操作的容器functio…

Rust语言从入门到入坑——(4)Rust语法(中)

文章目录 0 引入1、函数1.1、函数参数1.2、函数体1.3、函数返回值 2、条件语句3、循环3.1 、while3.2 、for3.3 、loop循环 4、总结 0 引入 在这里我们需要介绍Rust语法,一共分三部分,第二部分主要是一些如函数,编程中的循环等语法的介绍&am…

小白到运维工程师自学之路 第三十九集 (HAproxy 负载均衡)

一、概述 HAProxy是一款高性能的负载均衡软件,可以将来自客户端的请求分发到多个服务器上,以提高系统的可用性和性能。HAProxy支持多种负载均衡算法,包括轮询、加权轮询、最少连接数等。同时,HAProxy还支持会话保持、健康检查、SS…

redis和mysql

文章目录 一、redis1.1 redis的数据结构都有哪些?1.2 持久化方式有哪些?1.3 怎么保证缓存和数据库数据的一致性?1.4 redis缓存是什么意思? 二、数据库2.1 基本数据类型2.2 MySQL 的内连接、左连接、右连接有什么区别?2.3 MySQL 问题排查都有…

第二章(第三节):导数的应用

1.洛必达法则 1.用途 能够使用洛必达法则解决常见的未定式问题。2.极限下的未定式 如果当 x→a 或 x→∞ 时,函数f(x)和g(x)均趋于零或者无穷,那么极限:可以存在,也可能不存在。通常这种极限为:0/0型或∞/∞型未定式。3.示例 1.lim x→0; (1-cosx) / x 2 ^2