当前位置: 首页 > news >正文

JVM学习(day1)

JVM

运行时数据区

线程共享:方法区、堆

线程独享(与个体“同生共死”):虚拟机栈、本地方法栈、程序计数器

程序计数器

作用:记录下次要执行的代码行的行号

特点:为一个没有OOM(内存溢出)的地方

虚拟机栈

每要执行一个方法就往栈中放一个栈帧,包含把变量放到局部变量表中(局部变量槽),方法的出入口;

基本类型直接存值,应用类型存指针;

本地方法栈

本地方法:非java写的方法

作用与虚拟机栈相似,只不过是对于本地方法而言

有的会将虚拟机栈和本地方法栈合二为一

Java堆

存放对象实例

内存分配Thread Local Allocation Buffer(TLAB)先给一部分内存,用完再取,再取的过程中出现冲突采用CAS和失败重试

物理上不连续的,逻辑连续

方法区

存放:类信息

也是会出现OOM的地方

运行时常量池

方法区的一部分,

用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。除了保存Class文件中描述的符号引用外,还会把由符号引用翻译出来的直接引用也存储在运行时常量池中。

也会抛出OOM

直接内存

不属于运行时数据区的一部分

受物理内存限制,不受JVM限制

对象的内存布局

对象的创建

分配内存:

1.指针碰撞(内存规整,冲突解决方式是加锁)(index+n)

2.空闲列表(内存不规整)列表将可用的内存记录,然后根据列表分配

在分配内存时,为保证线程安全可以使用

1.本地线程分配缓存(TLAB)

2.CAS+失败重试

初始化0值(不包括对象头)
进行必要设置

对对象头进行设置

执行init方法

对象的结构

对象头

两类信息:

  • 于存储对象自身的运行时数据,如哈 希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等

  • 对象头的另外一部分是类型指针,即对象是属于哪一个类的

实例数据

  • 对象真正有效的信息

对齐填充

  • 无特别含义,仅仅起着占位符的作用

对象的访问定位

(就是 A a = new A()中a存了个什么东西)

句柄指针和直接指针

HotSpot采用直接指针

句柄指针两次定位,在对象移动时只需要修改句柄池中,也就是只需修改一次,

直接指针减少了一次定位,在对象移动时需要修改所有指向他的指针

垃圾收集器与内存分配策略

先谈生死

引用计数法

有一个指针指向该对象则+1,当有一个指针不指向他了则-1

缺点:无法解决成环问题

可达性分析法(java采用)

与GC Roots不可达则回收

可作为GC Roots对象的有

·在虚拟机栈(栈帧中的本地变量表)中引用的对象,譬如各个线程被调用的方法堆栈中使用到的

参数、局部变量、临时变量等。

·在方法区中类静态属性引用的对象,譬如Java类的引用类型静态变量。

·在方法区中常量引用的对象,譬如字符串常量池(String Table)里的引用。·在本地方法栈中JNI(即通常所说的Native方法)引用的对象。

·Java虚拟机内部的引用,如基本数据类型对应的Class对象,一些常驻的异常对象(比如

NullPointExcepiton、OutOfMemoryError)等,还有系统类加载器。

·所有被同步锁(synchronized关键字)持有的对象。

·反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。

再谈引用

强、软、弱、虚引用

回收方法区(不太重要,了解即可)

垃圾收集算法

分代收集理论

  • 弱分代

  • 强分代

  • 跨代引用

标记清除算法

缺点:

  • 一个是执行效率不稳定

  • 第二个是内存空间的碎片化问题

 

标记复制算法

只用一半,每次清除的时候将“活下来”的直接复制到另一边

缺点:可用内存缩小为了原来的一半

优点:实现简单,运行高效

Appel式回收(改进后的算法):将空间分为一个大的Eden空间和两个小的Survivor空间。对象首先被分配到Eden空间和一个小的Survivor空间。当Eden空间满时,触发Minor GC,存活的对象被复制到另一个Survivor空间。如果Survivor空间不足以容纳存活对象,就会依赖老年代进行内存担保,这些对象便将通过分配担保机制直 接进入老年代。

 

标记整理算法

 

分代算法

分为年轻代和老年代,年轻代用适合年轻代的,老年代用适合老年代的。

总结

即使不移动对象会使得收集器的效率提升一些,但因内存分配和访问相比垃圾收集频率要高得多,这部分的耗时增加,总吞吐量仍然是下降的。HotSpot虚拟机里面关注吞吐量的Parallel Scavenge收集器是基于标记-整理算法的,而关注延迟的CMS收集器则是基于标记-清除算法的,

相关文章:

JVM学习(day1)

JVM 运行时数据区 线程共享:方法区、堆 线程独享(与个体“同生共死”):虚拟机栈、本地方法栈、程序计数器 程序计数器 作用:记录下次要执行的代码行的行号 特点:为一个没有OOM(内存溢出&a…...

js项目生产环境中移除 console

1、terser-webpack-plugin webpack 构建的项目中安装使用 安装: npm install terser-webpack-plugin --save-dev 配置 在webpack.config.js文件中 new TerserPlugin({terserOptions: {output: {comments: false, // 去除注释},warnings: false, // 去除黄色警告,co…...

ROS2 + 科大讯飞 初步实现机器人语音控制

环境配置: 电脑端: ubuntu22.04实体机作为上位机 ROS版本:ros2-humble 实体机器人: STM32 思岚A1激光雷达 科大讯飞语音SDK 讯飞开放平台-以语音交互为核心的人工智能开放平台 实现步骤: 1. 下载和处理科大讯飞语音模…...

HTML5新增的input元素属性:placeholder、required、autofocus、min、max等

HTML5 大幅度地增加与改良了 input 元素的属性,可以简单地使用这些属性来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 下面将详细介绍这些新增的 input 元素的属性。 属性说明属性说明placeholder在输入框显示描述性或提示性文本autocomplete是否保…...

Cornerstone3D导致浏览器崩溃的踩坑记录

WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost ⛳️ 问题描述 在使用vue3vite重构Cornerstone相关项目后,在Mac本地运行良好,但是部署测试环境后,在window系统的Chrome浏览器中切换页面会导致页面崩溃。查看Chrome的任务管理器&am…...

【鸿蒙学习笔记】Stage模型

官方文档:Stage模型开发概述 目录标题 Stage模型好处Stage模型概念图ContextAbilityStageUIAbility组件和ExtensionAbility组件WindowStage Stage模型-组件模型Stage模型-进程模型Stage模型-ArkTS线程模型和任务模型关于任务模型,我们先来了解一下什么是…...

Docker进入MongoDB

先是命令行开启docker镜像,然后进入docker镜像,这是两步 进入之后,开头会变成root,我的理解是进入了另一个linux系统了,直接执行相应的软件 这里直接use databse就是进入了,据说MongoDB是慢启动&#xff0c…...

APP与API:魔法世界的咒语与念咒者

1. 什么是API? API,即应用程序编程接口(Application Programming Interface),就像是魔法世界中的咒语。API是两个独立软件系统之间进行通信和数据交换的桥梁。通过API,一个软件系统可以调用另一个软件系统中…...

云计算安全需求分析与安全保护工程

云计算基本概念 云计算(Cloud Computing)是一种通过互联网提供计算资源和服务的技术。它允许用户按需访问和使用计算资源,如服务器、存储、数据库、网络、安全、分析和软件应用等,而无需管理底层基础设施。以下是云计算的基本概念…...

七天.NET 8操作SQLite入门到实战 - 第二天 在 Windows 上配置 SQLite环境

前言 SQLite的一个重要的特性是零配置的、无需服务器,这意味着不需要复杂的安装或管理。它跟微软的Access差不多,只是一个.db格式的文件。但是与Access不同的是,它不需要安装任何软件,非常轻巧。 七天.NET 8操作SQLite入门到实战…...

操作系统——进程的状态与转换

...

80. UE5 RPG 实现UI显示技能冷却进度功能

在上一篇文章里,我们实现了通过GE给技能增加资源消耗和技能冷却功能。UI也能够显示角色能够使用的技能的UI,现在还有一个问题,我们希望在技能释放进去冷却时,技能变成灰色,并在技能冷却完成,技能可以再次使…...

Vue2-集成路由Vue Router介绍与使用

文章目录 路由(Vue2)1. SPA 与前端路由2. vue-router基本使用创建路由组件声明路由链接和占位标签创建路由模块挂载路由模块 3. vue-router进阶路由重定向嵌套路由动态路由编程式导航导航守卫 本篇小结 更多相关内容可查看 路由(Vue2&#xf…...

TemuAPI接口:获取商品详情功能

temu作为拼多多海外的跨境电商平台,已经在海外电商领域崭露头角,越来越多的外贸人选择temu作为发展平台。今天的接口可以用于获取temu平台的商品详情,包括价格、商品图片、规格、评论等内容,如有需要,请点击文末链接或…...

deepstream读取mp4文件及不同类型视频输入bug解决

在deepstream中使用mp4文件,与rtsp类似,使用uridecodebin即可,(可见官方test.py文件) def create_source_bin(index, uri):print("Creating source bin")# Create a source GstBin to abstract this bins c…...

Redis服务器统计和配置信息简介

Redis服务器统计和配置信息简介 首先使用INFO命令在Redis中用于获取Redis服务器的各种统计和配置信息;执行上述命令后,返回的信息分为多个部分,包括服务器信息、客户端信息、内存信息、持久化信息、统计信息、复制信息、CPU信息和键空间信息;…...

Linux Mac 安装Higress 平替 Spring Cloud Gateway

Linux Mac 安装Higress 平替 Spring Cloud Gateway Higress是什么?传统网关分类Higress定位下载安装包执行安装命令执行脚本 安装成功打开管理界面使用方法configure.shreset.shstartup.shshutdown.shstatus.shlogs.sh Higress官网 Higress是什么? Higress是基于阿里内部的…...

基于重叠群稀疏的总变分信号降噪及在旋转机械故障诊断中的应用(MATLAB)

基于振动分析的故障诊断方法基本流程主要由以下五个步骤组成,分别是信号采集、信号处理、特征提取、状态识别与诊断结果。这五个步骤中信号采集与特征提取是故障诊断中最为重要的步骤,而故障微弱特征信息又是其中最难解决的问题。“故障微弱特征信息”站…...

【YOLOv8】 用YOLOv8实现数字式工业仪表智能读数(一)

上一篇圆形表盘指针式仪表的项目受到很多人的关注,咱们一鼓作气,把数字式工业仪表的智能读数也研究一下。本篇主要讲如何用YOLOV8实现数字式工业仪表的自动读数,并将读数结果进行输出,若需要完整数据集和源代码可以私信。 目录 &…...

微信小程序---npm 支持

一、构建 npm 目前小程序已经支持使用 npm 安装第三方包,但是这些 npm 包在小程序中不能够直接使用,必须得使用小程序开发者工具进行构建后才可以使用。 为什么得使用小程序开发者工具需要构建呢❓ 因为 node_modules 目录下的包,不会参与…...

02MFC画笔/画刷/画椭圆/圆/(延时)文字

文章目录 画实心矩形自定义画布设计及使用连续画线及自定义定义变量扇形画椭圆/圆输出颜色文本定时器与定时事件 画实心矩形 自定义画布设计及使用 连续画线及自定义定义变量 扇形 画椭圆/圆 输出颜色文本 定时器与定时事件...

JavaWeb(四:Ajax与Json)

一、Ajax 1.定义 Ajax(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML AJAX 不是新的编程语言,指的是⼀种交互方式:异步加载。 客户端和服务器的数据交互更新在局部页面的技术,不需要刷新…...

Spring源码中的模板方法模式

1. 什么是模板方法模式 模板方法模式(Template Method Pattern)是一种行为设计模式,它在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。 模板方法模式的定义&…...

初学SpringMVC之 JSON 篇

JSON(JavaScript Object Notation,JS 对象标记)是一种轻量级的数据交换格式 采用完全独立于编程语言的文本格式来存储和表示数据 JSON 键值对是用来保存 JavaScript 对象的一种方式 比如:{"name": "张三"}…...

Mojo AI编程语言(三)数据结构:高效数据处理

目录 1. Mojo AI编程语言简介 2. 数据结构在数据处理中的重要性 3. Mojo AI中的基础数据结构 3.1 数组 3.2 列表 3.3 字典 4. 高效数据结构的实现与优化 4.1 哈希表 4.2 树结构 4.3 图结构 5. 高效数据处理技术 5.1 并行处理 5.2 内存优化 5.3 数据压缩 6. 实战…...

Java学习笔记整理: 关于SpringBoot 2024/7/12;

SpringBoot springboot也是spring公司开发的一款框架。为了简化spring项目的初始化搭建的。 特点specialty: springboot的特点: 1) 自动配置 Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程&a…...

ASP.NET MVC Lock锁的测试

思路:我们让后台Thread.Sleep一段时间,来模拟一个耗时操作,而这个时间可以由前台提供。 我们开启两个或以上的页面,第一个耗时5秒(提交5000),第二个耗时1秒(提交1000)。 期望的测试结果: 不加Lock锁&…...

Hadoop3:HDFS-通过配置黑白名单对集群进行扩缩容,并实现数据均衡(实用)

一、集群情况介绍 我的本地虚拟机,一共有三个节点,hadoop102、hadoop103、hadoop104 二、白名单 创建白名单文件whitelist,通过白名单的配置,只允许集群包含102和103两台机器可以存储数据,104无法存储数据。 需求 …...

TensorFlow系列:第五讲:移动端部署模型

项目地址:https://github.com/LionJackson/imageClassification Flutter项目地址:https://github.com/LionJackson/flutter_image 一. 模型转换 编写tflite模型工具类: import osimport PIL import tensorflow as tf import keras import …...

深度学习DeepLearning二元分类 学习笔记

文章目录 类别区分变量与概念逻辑回归Sigmoid函数公式决策边逻辑损失函数和代价函数逻辑回归的梯度下降泛化过拟合的解决方案正则化 类别区分 变量与概念 决策边置信度阈值threshold过拟合欠拟合正则化高偏差lambda(λ) 线性回归受个别极端值影响&…...

打开百度网站/怎么自己做一个网站

期望实现的功能微信卡券领取到卡包之后,点立即兑换按钮跳转到小程序这是官方文档的说明:卡券内跳转小程序场景介绍商户创建卡券时可以将卡、券内的服务入口设置进入小程序服务。步骤1.开发者须将小程序绑定在公众号下,绑定说明请见绑定公众号…...

江苏九天建设有限公司网站/什么是广告营销

项目需求:公司目前有几十个项目,每个项目都独立使用一个lib,太占空间。网上查了一些资料可以多个项目共享jar包,这样就解决了项目包臃肿的问题。lib目录自定义即可;tomcat需要修改catalina.properties配置文件:1.share…...

深圳做网站公司 南山/网站推广软件有哪些

1. 将这3块磁盘升级为动态磁盘。(截图)1)创建三块硬盘。2)开始-运行,输入“diskmgmt.msc”3)右键磁盘,联机。4)右键磁盘初始化。5)选择GPT格式。2. 在磁盘1上创建一个简…...

做网站流量怎么卖/百度排名点击

common-dbutils.jar是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。 1、QueryRunner类 ①update方法: int update(String sql,Object...params) -->可执行增删改…...

广州市委/整站优化 mail

题目:原题链接(困难) 标签:树、二叉树、二叉搜索树 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(N)O(N)O(N)O(N)O(N)O(N)476ms (42.39%)Ans 2 (Python)Ans 3 (Python) 解法一: class Solution:def __init__(s…...

手机网站开发实例/谷歌自然排名优化

一、关于sonic 入门见上一篇文章:sonic云真机linux单机版部署 分布式部署过程中踩过的坑,尤其是数据库连接方面较多问题,这里做一下Mark,便于其他同学参考,会详尽到配置文件层面 二、sonic分布式版本 跟单机版本的明…...