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收集器则是基于标记-清除算法的,

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

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

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

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

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

AFL安装和初步使用

代码漏洞 AFL安装和初步使用 0. 前言1. 下载2. 安装3. 初步使用1)准备文件2)插桩编译C生成二进制3)开始Fuzz(1)正常执行(2)**可能出现的问题**(3)正常结果 AFL安装和初步…

【Linux网络】数据链路层【下】{MAC/MTU/ARP/ICMP/NAT/PING/代理服务器原理}

文章目录 1.逐步深入数据链路层1.1MAC帧1.2由集线器到交换机1.3认识MTU 2.ARP 地址解析协议/RARP逆地址解析协议3.DNS(Domain Name System)域名从输入url后到能看到网页 发生了什么【典中典】 4.ICMP协议:一个网络层协议有了TCP,为什么还要用ICMPICMP协议…

论文研读:ViT-V-Net—用于无监督3D医学图像配准的Vision Transformer

目录 摘要 介绍 方法 VIT-V-Net体系结构 损失函数 图像相似性度量 变形场正则化 结果与讨论 摘要 在过去的十年里,卷积神经网络(ConvNets)在各种医学成像应用中占据了主导地位并取得了最先进的性能。然而,由于缺乏对图像中远程空间关系的理解&a…

解决Ubuntu 22.04 vscode搜狗拼音输入无法输入中文

关闭vscode 编辑~/.bashrc,添加以下内容 export GTK_IM_MODULExim export QT_IM_MODULExim export XMODIFIERSimfcitx source ~/.bashrc && code 重新加载环境变量后启动code,即可以正常使用搜狗拼音输入法了

读人工智能全传11人工智能会出什么错

1. 人工智能会出什么错 1.1. 一些报道是公正合理的,不过坦白地说,大部分报道都愚蠢得无可救药 1.2. 一些报道颇有知识性和引导性,而大部分则是杞人忧天式的恐吓 1.3. 滑稽的报道迎合了大众对人工智能的“终结者式恐惧” 1.3.1. 我们创造出…

win10系统更新后无法休眠待机或者唤醒,解决方法如下

是否使用鼠标唤醒 是否使用鼠标唤醒 是否使用键盘唤醒

C# .net6使用Hangfire

首先我们先来了解什么是Hangfire? Hangfire 是一个用于 .NET 的任务调度库,允许你在后台运行任务,而不需要依赖外部的任务队列服务或复杂的基础设施。它简化了后台任务的创建、调度和管理过程,使得在 .NET 应用程序中处理长期运行…

昇思25天学习打卡营第25天 | ResNet50迁移学习

ResNet50迁移学习 https://gitee.com/mindspore/docs/blob/r2.2/tutorials/application/source_zh_cn/cv/transfer_learning.ipynb 在实际应用场景中,由于训练数据集不足,所以很少有人会从头开始训练整个网络。普遍的做法是,在一个非常大的…

嵌入式C++、Qt/QML和MQTT:智能工厂设备监控系统的全流程介绍(附代码示例)

1. 项目概述 本项目旨在开发一套先进的智能工厂设备监控系统,集成嵌入式技术、工业通信协议和人机界面等多项技术,实现对工厂设备的全方位实时监控、高精度数据采集和智能化分析。该系统将显著提升工厂设备的运行效率,大幅降低维护成本&…

Python数据分析-Excel和 Text 文件的读写操作

1.Excel和 Text 文件的读写操作 1. Text 文件读写包 import sys print(sys.argv[0]) print(__file__) print(sys.path[0]) qopen(sys.path[0] "\out.txt","w",encodingutf-8) q.write(这个是测试一下) q.close() print(done)open 语句可以打开的创建text…

案例 | 人大金仓助力山西政务服务核心业务系统实现全栈国产化升级改造

近日,人大金仓支撑山西涉企政策服务平台、政务服务热线联动平台、政务网、办件中心等近30个政务核心系统完成全栈国产化升级改造,推进全省通办、跨省通办、综合业务受理、智能审批、一件事一次办等业务的数字化办结进程,为我国数字政务服务提…

大鲸鱼—docker 基本概念及安装使用

目录 一、docker前言 1.什么是Docker? 2.Docker的宗旨 3.容器的优点 4.Docker与虚拟机的区别 5.Docker核心概念 镜像 容器 仓库 6.为什么要用容器 7.容器越来越受欢迎的原因 8.容器在内核中支持2种重要技术 二、Docker安装 三、Docker 镜像操作 1.搜…

<数据集>水稻叶片病害识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:1448张 标注数量(xml文件个数):1448 标注数量(txt文件个数):1448 标注类别数:3 标注类别名称:[BrownSpot,RiceBlast,BacterialBlight] 序号类别名称图片数框数1Rice…

uniapp微信小程序 TypeError: $refs[ref].push is not a function

我的写法 this.$refs.addPopup.open();报错 打印出来是这样的 解决 参考未整理 原因 在当前页面使用的v-for循环 并且循环体内也有组件使用了ref(而我没有把每个ref做区别命名) 这样就导致了我有很多同名的ref,然后就报错了 解决办法&a…

Java类与对象

类是对现实世界中实体的抽象,是对一类事物的描述。 类的属性位置在类的内部、方法的外部。 类的属性描述一个类的一些可描述的特性,比如人的姓名、年龄、性别等。 [public] [abstract|final] class 类名 [extends父类] [implements接口列表] { 属性声…

超声波清洗机哪家好?家用超声波眼镜清洗机推荐

超声波清洗机现在已经成为了很多家庭的新宠,它能够帮助我们轻松解决日常生活中的清扫烦恼。但是,面对市面上品种繁多的清洗机产品,我们该如何选择一款适合自己的呢?毕竟不同的品牌和型号,在清洗效果、噪音水平、除菌能力等方面都…

电商出海第一步,云手机或成重要因素

电商出海第一步并非易事,挑战和机遇并存,出海企业或个人或将借助云手机从而达成商业部署全球化的目的; 下面我们从网络稳定、数据安全、成本、以及多平台适配方面来看,究竟为什么说云手机会成为出海的重要因素; 首先…

虚幻引擎ue5游戏运行界面白茫茫一片,怎么处理

根剧下图顺序即可调节游戏运行界面光照问题: 在大纲里找到post,然后选中它,找到Exposure 把最低亮度和最高亮度的0改为1即可