探索JVM的ABC

news/2024/12/26 18:06:18/文章来源:https://www.cnblogs.com/luo630/p/18442257

序章

JVM 是什么?JVM 是 Java Virtual Machine 的缩写。

它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。

各种语言(Java、Kotlin、Groovy、Scala 等)编写的程序,编译成字节码,再加载到JVM中运行。

通过 JVM,程序员可以屏蔽与 不同操作系统(Windows、MacOS、Linux、Unix等)交互的细节。

 

#参考资料1 重要资料。

 

JVM 规范:The Java® Virtual Machine Specification

https://docs.oracle.com/javase/specs/jvms/se8/html/index.html

#官网

最新的是 Java 23的。

https://docs.oracle.com/javase/specs/index.html

文档中是 规范的介绍,具体规范的实现有不同种类,比如,HotSpot、JRockit、J9 等。HotSpot 是最常用的。

注,读者还没看过该文档。

 

JVM运行时内存

在 阅读 参考资料1 后,总结自己对JVM的理解。

组成:

  • 堆内存
    • 新生代
      • Eden 区
      • Survivor 区
        • From Survivor 区
        • To Survivor 区
    • 老年代
  • 非堆内存
    • 方法区
      • <= Java 7 永久代 PermGen
      • >= Java 8 元空间 MetaSpace
  • 线程(栈,也是 非堆内存)
    • 虚拟机栈
    • 本地方法栈
    • 程序计数器

画了个草图:

 

堆内存 理解:组成、默认分配。

堆内存和 垃圾回收:

 

JVM的几个调优参数

注意,参数试用的版本主要针对 Java 8,更高版本会有不同的参数,还需探索。

 

1、调整最大堆内存和最小堆内存
“-Xmx –Xms:指定 java 堆最大值(默认值是物理内存的 1/4(<1GB))和初始 java 堆最小值(默认值是物理内存的 1/64(<1GB))。”

两者一般设置为相同,可以减少 gc。

示例:

-Xmx512m -Xms512m。

2、打印GC

-XX:+PrintGCDetails。

示例,

-Xmx512m -Xms512m -XX:+PrintGCDetails。

3、OOM时输出 dump 文件进行分析

-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=你要输出的日志路径。

 

---END---

 

看的越多,对JVM的了解就感觉越不够,什么 Safe Point、TLAB 等,之前感觉都没听过过。

还知道有 Stop The World 这个东西,知道在 full gc 时会发生,谁先到,还有其它七八种会导致 STW 的方式。

keep going...国庆快乐🎈

 

声明,本文中的自制图片可用于任何非商业用途的活动中,比如,其它博文

 

本文链接:

https://www.cnblogs.com/luo630/p/18442257

 

参考资料

1、大白话带你认识 JVM【推荐】

https://javaguide.cn/java/jvm/jvm-intro.html

原文:

来自 说出你的愿望吧丷投稿,

原文地址:https://juejin.im/post/5e1505d0f265da5d5d744050

2、三款主流 Java Virtual Machine丨HotSpot、JRockit、J9

https://blog.csdn.net/qq_15609303/article/details/104125408

3、

 

ben发布于博客园

ben发布于博客园

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微积分快速入门6部分:阿基米德公式

15 发现阿基米德公式 在前面的课程中,我们揭示了一些微积分关系,即系统如何变化的 “算术”:这些规则对我们有什么帮助?如果我们已经有了一个等式,那么这些规则就是我们找到逐步模式的捷径。幂次法则让我们不再把一个增长的正方形或立方体看成是一个图形,而是让我们通过x…

暗黑破坏神2(Diablo II) D2BS kolton bot使用图文教程

暗黑破坏神2的bot,无疑最强大的是kolbot,它可以自动开荒自动升级。这里就是教朋友怎么设置这个bot。已经整合自动开荒(AutoSmurf)的D2BS kolton bot 文件的百度云盘下载地址: (适用于Diablo 2 1.14d) 链接:https://pan.baidu.com/s/1OXbFJbTwCrtpuyqf8ZqT5Q 提取码:db…

Windows应急响应-PcShare远控木马

Windows—PcShare远控木马应急思路分享。目录应急背景木马查杀1.查看异常连接2.查看进程3.查看服务定位到注册表开始查杀入侵排查1.账户排查2.开机自启3.服务4.计划任务5.网络情况6.进程排查重启再排查一遍 应急背景 曲某今天想要装一款软件,通过网上搜索看到非官方网站进入后…

Windows应急响应-灰鸽子远控木马

Windows—灰鸽子远控木马应急思路分享。目录应急背景木马查杀1.查看异常连接2.根据端口号查看对应进程文件3.排查异常服务4.发现启动项开始查杀入侵排查1.账号排查2.查看服务3.查看启动项4.查看计划任务5.网络情况6.进程排查重启再排查一遍 应急背景 历某今天刚入职公司,拿到公…

Xinference 安装使用(支持CPU、Metal、CUDA推理和分布式部署)

也支持多卡模型并行推理1. 详细步骤 1.1 安装 # CUDA/CPU pip install "xinference[transformers]" pip install "xinference[vllm]" pip install "xinference[sglang]"# Metal(MPS) pip install "xinference[mlx]" CMAKE_ARGS="…

KeyShot基础操作1

KeyShot的基本操作,包含视图、导入导出、各个面板简介等内容。注:学习此软件纯粹是工作中突然要我去对接模型厂家,厂家不能对外提供模型原件,于是就自己学了下这个软件渲染模型。--本篇导航--快捷键 视图操作(视图基本操作、几何图形视图) 模型导入、工程保存导出 各个面…

高级语言程序设计第二次个人作业

班级链接:https://edu.cnblogs.com/campus/fzu 作业要求链接:https://edu.cnblogs.com/campus/fzu/2024C/homework/13282 学号:102400130 姓名:杨子旭 章节习题在第四题的时候发现即使代码正确也无法输出正确结果,最后发现是win7系统原因,测试发现在win10的系统可以转为十…

YouTube 注释 All In One

YouTube 注释 All In OneYouTube 注释 All In One old YouTube 批注是在视频上添加文字层,链接或热点。 他们添加了链接到其他网站或视频的交互式框(您想要的任何链接)。https://zh-cn.aiseesoft.com/how-to/add-annotations-to-youtube.html将注释支持带回 YouTube™! 201…

AnimationClip优化工具 - 删除连续相同的帧

下图中Rotation.z的前4个关键帧[0, 3](即15帧, 30帧, 45帧, 60帧),值都没变; (3, 4)Rotation.z变为60(即61帧到90帧); 后3个关键帧[5, 7]一直维持在60没变。可以分析下:前4个关键帧,[1, 2]删除对动画没影响,后3个关键帧[5, 7]删除对动画也没影响。public class AnimC…

实验1 C语言输入输出和简单程序编写

一,实验目的 1. 会使用C语言程序开发环境(vs2010/devc++等),能熟练、正确使用它们编写、编译、运行、调 试C程序 2. 知道C程序结构和编码规范,能正确使用 3. 能正确、熟练使用C语言输入输出函数: scanf() , printf() , getchar() , putchar() 4. 能灵活、组合使用基本数据…

VScode Cmake-tools 部分问题记录

我的 Visual Studio Code 先前一直安装了 cpp-tools 和 cmake-tools。随后,我升级了我的 GCC 环境版本。然而,重新启动 Visual Studio Code 后,旧的 GCC 版本仍保留在工具包中。起初,我以为是 cpp-tools 插件的问题,一直无法解决这个 bug。后来卸载了相关插件后才发现是 c…

数组0.1

一维数组 数组的运用场合 当我们需要涉及的变量特别多,光想名字都要想半天 所以引入数组 Q: (1)在程序中怎样存放100个学生的成绩? (2)定义100个整型变量吗? (3)C语言中的解决方案是……? A: (1)存储学生成绩用整型数组 mark[100]; (2)存储一行文字用字符数组 …