学习笔记JVM篇(一)

news2024/11/17 4:46:11

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.coloradmin.cn/o/2137088.html

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

相关文章

【程序分享】express 程序:可扩展的高级工作流程,用于更快速的从头算材料建模

分享一个 express 程序&#xff1a;可扩展的高级工作流程&#xff0c;用于更快速的从头算材料建模。 感谢论文的原作者&#xff01; 主要内容 “在这项工作中&#xff0c;我们介绍了一个开源的Julia项目express&#xff0c;这是一个可扩展的、轻量级的、高通量的高级工作流框…

学python要下什么包吗,有推荐的教程或者视频吗?

初学者可以尝试三种方法来学习Python第三方库&#xff0c;第一种传统&#xff0c;第二种省心&#xff0c;第三种轻量。 1、安装PythonPycharm&#xff0c;通过pip进行包管理&#xff0c;或者Pycharm后台也可以 2、安装Anaconda&#xff0c;预装了几百个数据科学包&#xff0c…

模仿抖音用户ID加密ID的算法MB4E,提高自己平台ID安全性

先看抖音的格式 对ID加密的格式 MB4EENgLILJPeQKhJht-rjcc6y0ECMk_RGTceg6JBAA 需求是 同一个ID 比如 413884936367560 每次获取得到的加密ID都是不同的&#xff0c;最终解密的ID都是413884936367560 注意这是一个加密后可解密原文的方式&#xff0c;不是单向加密 那么如下进行…

Windows 环境下 vscode 配置 C/C++ 环境

vscode Visual Studio Code&#xff08;简称 VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构、调试等功能&#xff0c;非常适合开发者使用。VSCode 通过安装扩展&#xff08;Extension…

abVIEW 可以同时支持脚本编程和图形编程

LabVIEW 可以同时支持脚本编程和图形编程&#xff0c;但主要依赖其独特的 图形编程 环境&#xff08;G语言&#xff09;&#xff0c;其中程序通过连线与节点来表示数据流和功能模块。不过&#xff0c;LabVIEW 也支持通过以下方式实现脚本编程的能力&#xff1a; 1. 调用外部脚本…

第4步CentOS配置SSH服务用SSH终端XShell等连接方便文件上传或其它操作

宿主机的VM安装CENTOS文件无法快速上传&#xff0c;也不方便输入命令行&#xff0c;用SSH终端xshell连接虚拟机的SSH工具就方便多了&#xff0c;实现VM所在宿主机Win10上的xshell能连接vm的centos要实现以下几个环节 1、确保宿主机与虚拟机的连通性。 2、虚拟机安装SSH服务&…

ESP8266_MicroPython——GPIO_LED_KEY_外部中断

MicroPython 文章目录 MicroPython前言一、安装软件二、点亮第一颗LED灯三、KEY按键四、外部中断总结 前言 MicroPython比较简单但是没有系统的更新过文章&#xff0c;准备写一下ESP8266——MicroPython的文章做一个系列。 一、安装软件 安装开发软件 Thonny&#xff0c;安装…

豆包MarsCode编程助手:产品功能解析与应用场景探索!

随着现代技术的不断进化升级&#xff0c;人工智能正在逐步改变着我们的日常工作方式。特别是对于复杂的项目&#xff0c;代码编写、优化、调试、测试等环节充满挑战。为了简化这些环节、提高开发效率&#xff0c;许多智能编程工具应运而生&#xff0c;豆包MarsCode 编程助手就是…

瑞芯微Android6 内核编译报错解决方案

1、报错内容如下图所示 错误内容&#xff1a; Kernel: arch/arm/boot/zImage is ready make: *** [kernel.img] Error 127 2、分析与解决方法 由于之前在ubuntu环境下编译没问题&#xff0c;现在是在centos环境下重新编译的时候报错&#xff0c;所以经过分析对比两个环境的…

非关系型数据库Redis

文章目录 一&#xff0c;关系型数据库和非关系型数据可区别1.关系型数据库2.非关系型数据库3.区别3.1存储方式3.2扩展方式3.2事务性的支持 二&#xff0c;非关系型数据为什么产生三&#xff0c;Redis1.Redis是什么2.Redis优点3.Redis适用范围4. Redis 快的原因4.1 基于内存运行…

1-4微信小程序基础

模板配置 &#x1f32e;&#x1f32e;目标 1.能够使用WXML模板语法渲染页面结构2.能够使用WXSS样式渲染标签样式3.能够使用app.json对小程序进行全局配置4.能够使用page.json对小程序页面进行个性化配置5.如何发起网络数据请求 数据绑定的基本原则 在data中定义数据在WXML中…

(论文解读)Visual-Language Prompt Tuning with Knowledge-guided Context Optimization

Comment: accepted by CVPR2023 基于知识引导上下文优化的视觉语言提示学习 摘要 提示调优是利用任务相关的可学习标记将预训练的视觉语言模型&#xff08;VLM&#xff09;适应下游任务的有效方法。基于CoOp的代表性的工作将可学习的文本token与类别token相结合&#xff0c;…

Linux环境使用Git同步教程

&#x1f4d6; 前言&#xff1a;由于CentOS 7已于2024年06月30日停止维护&#xff0c;为了避免操作系统停止维护带来的影响&#xff0c;我们将把系统更换为Ubuntu并迁移数据&#xff0c;在此之前简要的学习Git的上传下载操作。 目录 &#x1f552; 1. 连接&#x1f558; 1.1 配…

Effective C++笔记之二十二:C++临时变量的析构

先来看段代码 #include <iostream> #include <string>std::string myBlog() {return "https://blog.csdn.net/caoshangpa"; }int main() {const char *p myBlog().c_str();std::cout << p << std::endl;return 0; } 预期输出&#xff1a;…

Netty笔记06-组件ByteBuf

文章目录 概述ByteBuf 的特点ByteBuf的组成ByteBuf 的生命周期 ByteBuf 相关api1. ByteBuf 的创建2. 直接内存 vs 堆内存3. 池化 vs 非池化4. ByteBuf写入代码示例 5. ByteBuffer扩容6. ByteBuf 读取7. retain() & release()TailContext 释放未处理消息逻辑HeadContext 8. …

【新片场-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…

饿了么基于Flink+Paimon+StarRocks的实时湖仓探索

摘要&#xff1a;本文整理自饿了么大数据架构师、Apache Flink Contributor 王沛斌老师在8月3日 Streaming Lakehouse Meetup Online&#xff08;Paimon x StarRocks&#xff0c;共话实时湖仓架构&#xff09;上的分享。主要分为以下三个内容&#xff1a; 饿了么实时数仓演进之…

GHOST重装后DEF盘数据救援指南

一、现象解析&#xff1a;GHOST重装后的DEF盘失踪之谜 在计算机维护的日常中&#xff0c;GHOST重装因其快速便捷的特点&#xff0c;成为众多用户解决系统问题的首选方法。然而&#xff0c;这一操作虽能迅速恢复系统至初始状态&#xff0c;却也暗藏风险&#xff0c;尤其是当不慎…