备战金九银十(一)JVM

jvm学习笔记(jvm内存模型&垃圾收集算法&类加载机制) 对jvm内存模型&垃圾收集算法&类加载机制进行了整理,读者可以作为参考进行学习和探讨,, 立即下载

1、基本概念

  • 程序计数器:是当前线程所执行的字节码的行号指示器。(线程私有)
  • 虚拟机栈:描述Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧,用户存储局部变量表、操作数栈、动态链接方法出口等信息(线程私有)
  • 本地方法区:和栈类似,区别是本地方法区为Native方法服务(线程私有)
  • 堆:创建的对象和数组都在java的堆内存中,也是垃圾收集器最重要的收集区域(线程共享)
  • 方法区(永久代):用于存储JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据(线程共享)
  • 新生代:用于存放新生的对象,一般会占用堆三分之一。新生代由于频繁创建对象会触发minorGC(复制、清空、互换(复制算法))
  • 老年代:存放应用程序内生命周期长的内存对象
  • 永久代:指内存的永久保存区域,主要存放Class和元数据

2、GC算法

  • GC功能:哪些垃圾需要回收?什么时候回收?怎么回收?
  • 如何判断哪些对象可以回收?引用计数法、GCRoot搜索算法

引用计数法:对象的引用计数为0,那么这个对象就是可回收对象(此方法可能会有循环引用问题)

可达性分析法:如果GCRoot和一个对象之间没有任何可达路径,则该对象是不可达的。不可达对象变成可回收对象至少要经过两次标记过程

  • 算法:标记清除算法、复制算法、标记整理算法、分代收集算法

标记清除算法:此方法分为两个阶段,标记和清除。标记阶段标记出所有需要回收的对象,清除阶段回收被标记的对象所占用的空间。 此方法会造成碎片化严重,后续可能发生大对象不能找到可用空间的问题

复制算法:按内存容量将内存划分为等大小的两块,每次只使用一块,当这一块内存满了之后将存活的对象复制到另一块去,把已使用的内存清除掉。此方法最大的问题是内存被压缩到了原本的一半,且存活对象多的话效率会比较低下。

标记整理算法:标记后不是清理对象,而是将存活的对象移动到内存的另一端,然后清除端边界外的对象

分代收集算法:根据对象存活的不同生命周期将内存划分为不同的域,一般情况将GC的堆划分为老年代和新生代。老年代的特点是每次垃圾回收的时候只有少量对象被回收。新生代的特点是每次垃圾回收的时候都有大量垃圾需要被回收,因此可以根据不同的区域算则不同的算法

  • 常见的垃圾收集器:serial、parnew、cms、g1

serial:(复制算法、单线程)它不但只会使用一个CPU或者一条线程去完成垃圾收集工作,并且在垃圾收集的同时,必须暂停其他工作线程,直到垃圾回收结束

parnew:parnew是serial的多线程版本,缺点是serial一样

cms:主要目标是获取最短垃圾回收停顿时间,它使用的标记清除算法。它工作分为四个阶段:初始标记(暂停其他线程)、并发标记、重新标记(暂停其他线程)、并发清除

G1:基于标记整理算法,不产生内存碎片。可精确控制停顿时间,在不牺牲吞吐量的情况下,实现低停顿垃圾回收

3、引用

四种引用类型:

  • 强引用:把一个对象赋值给一个引用变量,这个引用变量就是一个强引用。(此引用可能会造成内存泄漏)
  • 软引用:软引用需要使用softreference类来实现。当系统内存不够时会被回收,软引用通常使用在对内存敏感的程序中
  • 弱引用:弱引用需要使用WeakReference类来实现,比软引用生命周期更短,只要启动了垃圾回收机制就会被回收。
  • 虚引用:虚引用需要使用PhantonReference类来实现,它不能单独使用,必须和引用队列联合使用,其主要作用是跟踪对象被垃圾回收的状态

4、类加载机制

Java的类加载机制分为五个部分:加载、验证、准备、解析、初始化

  • 加载:这个阶段会在内存中生成一个代表这个类的class对象,作为方法区这个类的各种入口
  • 验证:确保Class文件的字节流中包含的信息是否符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。
  • 准备:在方法区分配这个类变量所需要的内存空间
  • 解析:虚拟机将常量池中的符号引用替换为直接引用的过程

符号引用:引用的目标不一定要已经加载到内存中,符号引用的字面量形式明确定义在Java虚拟机规范的Class文件中

直接引用:是指向目标的指针,相对偏移量或者一个能够间接定位到目标的句柄,如果有了引用,那引用的目标必定已经在内存中存在

  • 初始化:执行定义的Java代码。并且执行类构造器,<client>方法是由编译器自动收集类中的类变量的赋值操作。如果一个类中没有静态变量赋值也没有静态代码块,那么编译器可以不为这个类生成<client>方法

注意以下几种情况不会执行类初始化:

1、通过子类引用父类的静态字段,只会触发父类的初始化,而不会触发子类的初始化

2、定义对象数组,不会触发该类的初始化。

3、常量在编译期间会存入调用类的常量池中,本质上并没有直接引用定义常量的类,不会触发定义常量的类。

4、通过类名取Class对象,不会触发类的初始化。

5、通过Class.forName加载指定类时,如果initialize为false,也不会触发类的初始化

6、通过ClassLoader默认的loadClass方法,也不会触发初始化。

三种类加载器:启动类加载器、扩展类加载器、应用程序类加载器

汇川EASY系列之以太网通讯(MODBUS_TCP做从站) 汇川easy系列PLC做MODBUS_TCP从站,,ModbusTCP服务器默认开启,无需设置通信协议(即不需要配置),端口号为“502”。ModbusTCP从站最多支持31个ModbusTCP客户端(ModbusTCP主站)同时连接。 阅读详情

相关推荐

【实战指南】基于YOLOv11的肺结节检测系统开发与优化(LUNA2016数据集)

本文提供了基于YOLOv11模型和LUNA2016数据集开发肺结节检测系统的完整实战指南。详细介绍了从环境搭建、数据预处理、模型训练与优化,到构建Web应用系统的全流程,旨在帮助开发者快速掌握医疗影像AI项目的核心开发技能。

weixin_29031057的博客 140

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

JVM(Java虚拟机)详解(JVM 内存模型、堆、GC、直接内存、性能调优)

墨鸦的博客 4万+

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 & 垃圾回收定位清除算法 & JVM中的垃圾回收器

本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清除算法;然后介绍了Java中的垃圾回收器,由串行、到并行再到并发,最后到G1的演变;最后给出了垃圾回收器的对比和使用指引。

Arya的博客,专注后端领域 9486

C#开发者必备:VSPD虚拟串口快速配置指南(附汉化教程)

本文为C#开发者提供了VSPD虚拟串口的快速配置与汉化教程。详细介绍了如何安装、汉化VSPD,并创建稳定的虚拟串口对,重点讲解了如何将其集成到C#开发工作流中,使用SerialPort类进行数据通信测试、协议模拟及故障排查,有效提升硬件通信开发的效率。

weixin_29224529的博客 258

普通人也能看懂的Transformer源代码解释(PyTorch)

Transformer源代码解释之PyTorch篇 章节 词嵌入 位置编码 多头注意力 搭建Transformer 在这里插入图片描述 词嵌入 Transformer本质上是一种Encoder,以翻译任务为例,原始数据集是以两种语言组成一行的,在应用时,应是Encoder输入源语言序列,Decoder里面输入需要被转换的语言序列(训练时)。一个文本常有许多序列组成,常见操作为将序列进行一些预处理(如词切分等)变成列表,一个序列的列表的元素通常为词表中不可切分的最小词,整个文本就是一个大列表,元素为一个一

qq_50974223的博客 4167

Java的内存模型以及GC算法

然而这其实是很重要的。程序计数器是众多编程语言都共有的一部分,作用是标示下一条需要执行的指令的位置,分支、循环、理的基本概念,因此不同的线程之间需要不停的获得运行,挂起等待运行,所以各线程之间的计数器互。每一个方法调用直至执行完的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。由于栈帧的进出栈,显而易见的带来了空间分配上的问题。堆是虚拟机所管理的内存中最大的一块,在虚拟机启动时创建,此块内存的唯一目的就是存放对象。内存区域划分为栈与堆两部分,在这种粗略的划分下,栈标示的就是当前讲的虚拟机栈,或。

2301_78021017的博客 332

最新Python爬虫实战(入门爬虫篇)——案例7:电影网站电影数据采集(详细爬虫思路截图+抓包动图演示+完整爬虫代码+详细注释)

本次案例通过Python爬虫技术,成功实现了对某电影网站Top250多页电影详细信息的批量爬取与Excel保存。代码采用模块化设计,包含分页请求构造、XPath+正则提取结构化信息、Excel数据持久化保存等完整流程。通过配置User-Agent等请求头信息,有效模拟浏览器行为以绕过豆瓣基础反爬策略。整个爬虫逻辑遵循"分页遍历 → 请求页面 → 解析HTML → 提取电影信息 → 保存到Excel"的标准流程,与主流静态网站爬取范式高度一致。

努力让自己发光,对的人才能迎着光而来 11万+

JVM 与 GC 讲解

JVM(Java Virtual Machine)是一种在计算机上运行Java字节码的虚拟机。它允许Java程序在不同的操作系统上具有跨平台的能力,因为它提供了一个统一的运行环境。JVM 负责将Java源代码编译成字节码,然后在运行时解释执行或者编译执行这些字节码。

匠人精神,持之以恒! 1040

微信小程序|基于小程序+云开发制作一个租房小程序

经济发展的同时伴随着大批人群的流动,租房需求一直是持久不衰的话题,如何租好房,好租房,跟随此文一起制作一个租房小程序,让租房不再困难。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 4928

AUTOSAR SHE 密钥更新协议

依赖内存槽的使用用例,内存槽有不同的保护协议。M2是新的计数值C_ID‘,相应的标志位F_ID',0填充第一个块,以及新的密钥K_ID'的组合的CBC算法加密的消息。例如,我要更新一个MASTER_ECU_KEY, 那么参考上表,我需要知晓Non-volatile的MASTER_ECU_KEY (即授权密文为MASTER_ECU_KEY自己的密文).内存的更新协议分为两部分,第一部分是实际内存更新到发送一个秘密且真实的key到SHE,然后第二部分为验证,即提供给后台一个key更新成功的证据。

weixin_46481662的博客 3277

java gc内存_Java内存模型和GC机制

最近学习Python的GC机制时,想到了java的GC,忘得差不多了,(⊙﹏⊙)b!!这里便做一下回顾总结。推荐周志明译本的《深入理解Java虚拟机》。1. Java内存模型1.1 程序计数器程序计数器,是一块较小的内存空间,它可以看作当前线程所执行的字节码的行号指示器。字节码解释器工作时就是通过改变这个计数器的值,来获取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都...

weixin_42116791的博客 411

【PCIe 总线及设备入门学习专栏 3.2.2 -- PCIe 中什么是 SR-IOV】

SR-IOV(Single Root I/O Virtualization)是 PCIe 规范中的一种技术,允许物理 PCIe 设备(称为 Physical Function, PF)虚拟化为多个虚拟设备(称为 Virtual Functions, VFs),使多个操作系统或虚拟机能够共享同一个物理设备。SR-IOV:一种 PCIe 虚拟化技术,允许将一个物理 PCIe 设备虚拟化为多个虚拟设备。:物理设备的主要管理接口。:PF 的轻量级副本,分配给虚拟机或操作系统。

CodingCos的博客 1513

勇敢码农,不怕困难!阿里内部不外传秘籍50万字Java面试手册奉上

6月见底,现在可以说是备战金九银十的最佳时候了。为了让大家能在面试中过关斩将,小编特地找了在阿里的朋友要了这份阿里内部不外传秘籍:50万字Java面试手册。 这份面试手册涉及的技术栈非常全面而且足够细致,内容包括网络协议、Java基础、字符串、集合、并发、JVM、数据结构、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各种中间件等等。 最后统计出来足足有50多万个字符。 内容展示: Java基础篇(55道面

m0_59083374的博客 924

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

下载量已过亿次!阿里内部不外传秘籍 50 万字 Java 面试手册首次开放

6 月见底,现在可以说是备战金九银十的最佳时候了。为了让大家能在面试中过关斩将,小编特地找了在阿里的朋友要了这份阿里内部不外传秘籍:50 万字 Java 面试手册。这份面试手册涉及的技术栈非常全面而且足够细致,内容包括最后统计出来足足有 50 多万个字符。

m0_68263709的博客 380

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

快点来白嫖!面试阿里露馅被怼了!大厂面经合集

前言 又到一年金九银十之际。 Java作为目前用户最多,使用范围最广的软件开发技术之一。 Java的技术体系主要由支撑Java程序运行的虚拟机,提供各开发领域接口支持的Java,Java编程语言及许多第三方Jvav框架构成。 其中,以Java的虚拟器为今天的着重点 以下是我整理收藏的一些JVM大厂面试经典问题与相应答案,希望可以给看文的朋友一些帮助 由于篇幅过长,请耐心往下看,文末提供小编收藏已久的JVM面试宝典! 一、Netty概念及体系结构 01 Netty——异步和事件驱动 Java网络编程NI

m0_56710876的博客 339

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

备战金九银十,Java面试题总结,苦战30天拿下高薪Java岗!

备战金九银十,Java面试题总结,苦战30天拿下高薪Java岗!

程序员高级码农的博客 1126

开发三年就是高级开发?Java开发如何备战金九银十,挑战年薪50W

我分享的这份春招,金三银四Java后端开发面试总结包含了JavaOOP、Java集合容器、Java异常、并发编程、Java反射、Java序列化、JVM、Redis、Spring MVC、MyBatis、MySQL数据库、消息中间件MQ、Dubbo、Linux、ZooKeeper、 分布式&数据结构与算法等25个专题技术点,都是小编在各个大厂总结出来的面试真题,已经有很多粉丝靠这份PDF拿下众多大厂的offer,今天在这里总结分享给到大家!

mh17680313750的博客 1505

备战金九银十必看:2025 最新版 Java 面试手册(五大面试专栏)

全套的 Java 春招面试手册,“性能调优+微服务架构+并发编程+开源框架+分布式”等五大面试专题,包含 Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、并发、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached 等等。

sjkflw121150的博客 792

备战金九银十,Java研发面试题+答案整合PDF,走到哪刷到哪

限于篇幅,大家也都看到了,每个面试点我都举三个例子,其实在准备"金九银十"时,我已经整理好这份面试题了,包括了ActiveMQ消息中间件、Dubbo、JVM、kafka、Linux、MongoDB、Mybatis、MySQL、Nginx、RabbitMq、Redis、Spring Boot、Spring Cloud、Spring MVC、Tomcat、Zookeeper、并发编程等...

SharingOfficer的博客 404

闭关28天,奉上[Java一线大厂高岗面试题解析合集],备战金九银十!

时间不等人,2020年转眼就要过去大半了,春招在疫情中度过,不知有多少人还在惋惜... 马上又是秋招的高峰“金九银十”,估计现在就已经有不少的程序猿(媛)朋友早就踏上提前批之路了吧,机会来临,好好把握,争取一举上岸!从7月份开始小编就在整理“Java一线大厂高岗面试题”,一题一题的抠,整出了这份备战金九银十的Java面试汇总(附解析),总共有以下六部分的内容: Java基础-中级-高级 开源框架(SSM:Spring+SpringMVC+MyBatis) 性能调优(JVM+MyS

mifffy_java的博客 542

备战金九银十:2020年最全大厂Java核心知识点整理

前言: 相信在前不久的金九银十跳槽季中,有许多同学面试或者跳槽失利的就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任的说一句,复习准备的是否充分,将直接影响你入职的成功率。 但很多小伙伴却苦于没有合适的资料来回顾整个 Java 知识体系,或者有的小伙伴可能都不知道该从哪里开始复习。 我偶然从一个网友群中发现了整理的这份资料,不论是从整个 Java 知识体系,还是从面试的角度来看,都是一份含技术量很高的资料。下面的文章将带大家认识到自己不足的点。

weixin_45127309的博客 510

Java程序员如何备战金九银十?

2025已过半,想必有不少小伙伴已经开始提前为金九银十面试做准备了。今天写下这篇文章的原因是这几天有很多粉丝希望我出一份对标金九银十的面试题总结,近期急需面试。

Javatutouhouduan的博客 333

金九银十,该如何备战(自身经历,纯干货)

目录 零、前言 一、基础 二、数据库 三、框架 四、分布式 五、中间件 六、面试资料分享 零、前言 ​ 都说金三银四,金九银十,我在金三银四的尾声去面试了一波,在这里就将之前面试的要点以及自己准备时所参考过的资料总结一下,在这金九银十之际,给大家做一个参考,希望大家能够找到一个满意的工作,早日达成自己的小目标! ​ 从三月份开始(实际可能更早),便开始准备笔试面试,刷过算法(到现在为止都还是两数之和),看过源码(这个给我加分挺多的),也花了时间在一些基础的底层,总之,八股对于面试还是必不

ONESTARの博客 1132

备战金九银十,400道阿里必问Java后端高频面试考点详细解析分享

临近秋招,又到了“金九银十”面试求职高峰期,在金三银四时也参与过不少面试,2024都说工作不好找,也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档(400道高频题),同时也整理一些图文解析及笔记,今天在这免费分享给大家,希望大家在即将9月的面试做好复习,长期的积累和短期的突击让自己能找到一个满意的工作!有需要的朋友可以帮忙转发关注下,后台私信回复我【面试】即可获得资料免费领取方式!总体来说可以分为两大块:基础知识和大型网站架构所用技术。基础知识。

mh17680313750的博客 723

金九银十备战资源库:源码笔记+厂面试真题+跳槽解析

内容过多,不适合在文章全部阐述,在文末分享了我为金九银十准备的备战资源库,包含了源码笔记类,大厂面试真题,跳槽解析,简历解析,项目实战源码+笔记+工具,有需要的可以直接转发本文后,私信关键词【666】即可获取!! 阿里一面 1.JVM分区 2.垃圾收集算法 3.索引怎么优化 4.一个8G的服务器,堆的大小应该设置成多少 5.redis基本数据类型 6.synchronized原理 7.tcp三次握手 8.海量数据求频率最多的100个 9.spring一个事务中调用另外一个事务,另一个事务

Java6888的博客 273
上一篇: Jenkins部署到线上环境
苏奇伦
博客等级 码龄11年 8粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值