学习笔记JVM篇(一)

1、类加载的过程

加载->验证->准备->解析->初始化->使用->卸载

2、JVM内存组成部分(HotSpot)

名称作用特点
元空间(JDK8之前在方法区)用于存储类的元数信息,例如名称、方法名、字段等;以及动态生成的代理类,字节码。位于直接内存,线程共享
本地方法栈存储一些Native方法(用C写的方法)线程私有
虚拟机栈存储栈帧,每个栈帧中包含方法局部变量、方法参数、返回值等。线程私有
用于存储对象、数组等信息。是GC操作的空间。线程共享
PC寄存器用于记录线程执行到哪里线程私有

这里举个简单的例子:User u = new User();

User:类信息存储在元空间内容

u:对象引用存储在虚拟机栈中

new User():存储在堆中

3、堆空间

对于JVM优化来说,堆是最重要的部分,GC(垃圾回收就是发生在堆内存中),堆内存结构如下

4、JVM内存划分和内存垃圾回收的过程

1、首先创建对象会根据对象大小(可配置)来确定是分配在新生代还是老年代,绝大多数的对象是直接创建在新生代的Eden区

2、当Eden区满了之后会触发MinorGC用于,此时如果对象还存活会被复制到S1(from)区,当下次一次MinorGC时,如果该对象还存活着,则会从S1移动到S2(to)区。如此往复15次(可配),对象依旧存活说明该对象是一个比较稳定的对象,此时会吧对象移动到老年代。(我们也要尽可能减少MinorGC次数)

3、虽然老年代的空间比较大,但是也会有满的时候,当老年代满了就会触发FullGC对整个堆的垃圾进行回收,我们优化JVM的关键就是减少FullGC。FullGC的过程会出现STW

4、堆内存中的垃圾回收基本使用分代算法,即不同的区域用不同的垃圾回收算法。

5、JVM相关参数

(1)通用参数
  • -version:显示JVM版本信息。
  • -help:显示帮助信息。
  • -Dproperty=value:设置系统属性。
(2)内存相关参数
  • -Xms<size>:设置初始堆大小。
  • -Xmx<size>:设置最大堆大小。
  • -Xmn<size>:设置年轻代大小。
  • -XX:NewRatio=<value>:设置年轻代与老年代的比例。
  • -XX:MetaspaceSize=<size>:设置元空间初始大小。
  • -XX:MaxMetaspaceSize=<size>:设置元空间最大大小。
(3)垃圾回收(GC)相关参数
  • -XX:+UseSerialGC:使用串行垃圾收集器。
  • -XX:+UseParallelGC:使用并行垃圾收集器。
  • -XX:+UseConcMarkSweepGC:使用并发标记扫描垃圾收集器。
  • -XX:+UseG1GC:使用G1垃圾收集器。
  • -XX:SurvivorRatio=<value>:设置Eden区与Survivor区的比例。
  • -XX:MaxTenuringThreshold=<value>:对象晋升到老年代前在年轻代的最大存活次数。
(4)日志和其他诊断参数
  • -verbose:gc:输出详细的GC日志。
  • -XX:+PrintGCDetails:打印详细的GC信息。
  • -XX:+PrintHeapAtGC:在每次GC后打印堆信息。
  • -XX:+PrintPromotionFailure:打印晋升失败的信息。
  • -Xlog:gc*:使用新的日志记录机制记录GC信息。
(5)性能调优参数
  • -server:使用Server模式,优化长时间运行的应用程序。
  • -client:使用Client模式,适合短时间运行的应用程序。
  • -XX:+AggressiveOpts:启用激进的优化选项。
  • -XX:+UseFastAccessorMethods:使用更快的JNI访问方法。
  • -XX:+UseCompressedOops:使用压缩的对象指针(仅限64位)。
(6)线程相关参数
  • -XX:ThreadStackSize=<size>:设置线程栈大小。
  • -XX:ParallelGCThreads=<N>:设置并行GC线程数。

这些参数可以根据不同的应用需求进行调整,以达到最佳的性能和稳定性。请注意,不同版本的JVM可能会有不同的默认值和支持的参数,因此在使用时应参考当前JVM版本的官方文档。

6、方法区和元空间的联系

(1)【方法区】是一个概念,用于存储类的元数据信息,包括结构、类名等信息。而【元空间】和【永久代】是方法区的实现。在JDK8之前,HotSopt采用的是永久代,JDK8之后改成了元空间。

(2)元空间是位于直接内存中(即服务器的直接内存),可以根据需要进行配置。用空间不足也会包OOM,报的是OutOfMemoryError: Metaspace

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

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

相关文章

[苍穹外卖]-09Spring Task定时任务

Spring Task spring Task是spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑 只要是需要定时处理的场景都可以使用Spring Task定时任务框架 cron表达式就是一个字符串,可以定义任务触发的时间 构成规则: 分为6或7个域, 由空格隔开,每个域代表一个含义每…

Java 全面指南:从入门到精通

目录 1. 引言 Java 的背景 Java 的起源及历史发展 主要的应用场景 Java 的核心特性 面向对象 跨平台性&#xff08;JVM 的角色&#xff09; 自动内存管理与垃圾回收机制 Java 版本与发展历程 Java SE 8, 11, 17 等主要版本特性 新增功能概述&#xff08;如 Lambda 表…

SpringBoot新技能:零停机更新代码

在个人或者企业服务器上&#xff0c;总归有要更新代码的时候&#xff0c;普通的做法必须先终止原来进程&#xff0c;因为新进程和老进程端口是一个&#xff0c;新进程在启动时候&#xff0c;必定会出现端口占用的情况&#xff0c;但是&#xff0c;还有黑科技可以让两个SpringBo…

【机器学习】--- 深度学习中的注意力机制

深度学习中的注意力机制 在深度学习领域&#xff0c;注意力机制&#xff08;Attention Mechanism&#xff09;已经成为近年来最受瞩目的研究热点之一。它不仅提升了现有模型的性能&#xff0c;更启发了全新的网络结构&#xff0c;如Transformer模型。注意力机制被广泛应用于自…

c语言中的局部跳转以及全局跳转

一、前言 在c语言中&#xff0c;当我们在处理某些异常情况的时候&#xff0c;经常会使用goto语句来进行跳转。goto用起来很方便&#xff0c;但可能很多人都不知道&#xff0c;goto只能在一个函数里面跳转&#xff0c;并不能够跨函数跳转。本文将介绍能够跨函数跳转的接口setjm…

升级VMware

1、vm17pro安装包 VMware Workstation 17 Pro软件下载&#xff1a; 官网下载&#xff1a;Download VMware Workstation Pro 2、点击下一步更改地址 3、注册码 VMware Workstation 17 Pro注册码&#xff1a; 4A4RR-813DK-M81A9-4U35H-06KND 4、打开虚拟机 注&#xff1a; 升…

ip地址数字范围是多少?ip地址四段数字的含义是什么

IP地址&#xff0c;作为互联网上的唯一标识&#xff0c;是由一串数字组成的。这些数字不仅代表了设备的网络位置&#xff0c;还蕴含了丰富的信息。本文将深入探讨IP地址的数字范围以及四段数字的具体含义。 一、IP地址数字范围是多少 IP地址由四段数字组成&#xff0c;每一段数…

JavaEE:文件内容操作(二)

文章目录 文件内容操作读文件(字节流)read介绍read() 使用read(byte[] b) 使用 read(byte[] b, int off, int len) 使用 写文件(字节流)write介绍write(int b) 使用write(byte[] b) 使用write(byte[] b, int off, int len) 使用 读文件(字符流)read() 使用read(char[] cbuf) 使…

基于python+django+vue的鲜花商城系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

如何做系统架构?从动态系统思考的角度

在动态系统思考的背景下&#xff0c;系统架构不再只是一个静态的、结构化的设计&#xff0c;而是一个随着时间推移、基于不同要素互动产生涌现行为的动态过程。系统架构师的任务不仅仅是定义系统的形态和结构&#xff0c;更是通过剖析系统的互动网络、功能涌现和使用场景&#…

UVA1395 Slim Span(最小生成树)

*原题链接*(洛谷) 非常水的一道题。看见让求最小边权差值的生成树&#xff0c;很容易想到kruskal。 一个暴力的想法是以每条边为最小边跑一遍kruskal&#xff0c;然后统计答案。时间复杂度&#xff0c;再看题中很小的数据范围和3s的时限。最后还真就过了。 不过我天真的想了…

三维点云处理(C++)学习记录——PDAL

一、OSGeo4W简概 OSGeo4W是一个基于Windows系统&#xff08;版本7-11&#xff09;的开源地理软件二进制包发布平台。OSGeo4W包括开源GIS桌面应用程序&#xff08;QGIS、GRASS GIS&#xff09;、地理空间库&#xff08;PROJ、GDAL/OGR、GEOS、SpatiaLite、SAGA GIS&#xff09;、…

鸿蒙开发笔记_电商严选02_登录页面跳转到我的页面、并传值

鸿蒙开发笔记整理,方便以后查阅! 由于上班较忙,只能抽空闲暇时间,快速整理更新中。。。 登录页面跳转到我的页面、并传值 效果图 我的设置页面 /*** 我的设置页面*/ import CommonConstants from ./CommonConstants import ItemData from ./ItemData import DataModel fr…

面试官问:你为什么对这个职位感兴趣?

当面试官问到你为什么对某个职位感兴趣时&#xff0c;你的回答应该反映出你对该职位的热情&#xff0c;以及你如何能够为公司带来价值。 重点&#xff1a;在面试前一定要去研究下这家公司&#xff0c;包括他们的团队&#xff0c;文化&#xff0c;产品&#xff0c;服务等各个方…

55 mysql 的登录认证流程

前言 这里我们来看一下 mysql 的认证的流程 我们这里仅仅看 我们最常见的一个 认证的处理流程 我们经常会登录的时候 碰到各种异常信息 认证失败的大体流程 大概的流程是这样 客户端和服务器建立连接之后, 服务器向客户端发送 salt 然后 客户端根据 salt 将客户端传入的…

不同的二叉搜索树

题目 给你一个整数 n &#xff0c;求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种&#xff1f;返回满足题意的二叉搜索树的种数。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;5示例 2&#xff1a; 输入&#xff1a;n 1 输出&#xff…

运行QWen2-1.5b模型时报错“RuntimeError: cutlassF: no kernel found to launch!”

运行QWen2-1.5b模型时报错“RuntimeError: cutlassF: no kernel found to launch!” #问题&#xff1a;成功加载QWen2-1.5b模型&#xff0c;但是推理时 “model.generate( model_inputs.input_ids, top_pself.top_p, max_new_tokens512 )时”&#xff0c;报错“RuntimeError: …

【吊打面试官系列-Redis面试题】使用过 Redis 做异步队列么,你是怎么用的?

大家好&#xff0c;我是锋哥。今天分享关于【使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 使用过 Redis 做异步队列么&#xff0c;你是怎么用的&#xff1f; 一般使用 list 结构作为队列&#xff0c;rpus…

关系数据库(1,2)

目录 关系 域 笛卡尔集 元组 分量 基数 码 关系模式 关系模式的表示方式 关系数据库 基本关系操作 完整性 关系 单一的数据结构&#xff0c;二维表是一个逻辑结构&#xff0c;关系模型建立在集合代数的基础上。 域 指具有相同数据类型的集合。 笛卡尔集 笛卡尔集是…

pytorch快速入门(一)—— 基本工具及平台介绍

前言 该pytorch学习笔记应该配合b站小土堆的《pytorch深度学习快速入门教程》使用 环境配置&#xff1a;Anaconda Python编译器&#xff1a;pycharm、jupyter 两大法宝函数 dir&#xff08;&#xff09;&#xff1a;知道包中有什么东西&#xff08;函数 / 属性..…