JVM系列之内存区域

news2024/12/18 18:28:40

每日禅语

有一位年轻和尚,一心求道,多年苦修参禅,但一直没有开悟。有一天,他打听到深山中有一古寺,住持和尚修炼圆通,是得道高僧。于是,年轻和尚打点行装,跋山涉水,千辛万苦来到住持和尚面前,两人打起了机锋。年轻和尚:​“请问高僧,您得道之前,做什么?​”住持和尚:​“砍柴担水做饭。​”年轻和尚:​“得道之后又做什么?​”住持和尚:​“砍柴担水做饭。​”年轻和尚哂笑:​“何谓得道?​”住持和尚:​“我得道之前,砍柴时惦念着挑水,挑水时惦念着做饭,做饭时又想着砍柴;得道之后,砍柴即砍柴,担水即担水,做饭即做饭,这就是得道。​”住持和尚说,得道就是“砍柴即砍柴,担水即担水,做饭即做饭”​,这真是一语道破禅机,认认真真地干好手中的每件事情便是得道。不要把佛法想得过于高深和遥不可及,其实佛法很平凡,它存在于我们生活的每个细节之中。做佛就是做人,一个真正成佛的人,往往在人间最平常的地方。正如佛所说,真正的智慧成就,即非般若波罗蜜。​“般若波罗蜜”是梵语,是“智慧”的意思,智慧到了极点,到了没有智慧的境界,那才是真智慧。真理就存在于平凡中,能到达人间最平凡处,才能接近佛法之道,也就是做人之道。

在佛家看来,世法与佛法是同样的道理,因此,出家的人要懂世法,世法懂了,佛法就通了。真正的佛法,并不是以梅花明月、洁身自好便能彻悟的,后世学佛的人,只重理悟而不重行持,大错而特错矣。先学做人,再学做佛,这是佛法的本义。一个人如果真的能够照此修行,不但可以使自己获得幸福,还能够造福社会,成为社会的有用之材。

问题1:JVM内存区域和内存模型是一个东西吗?

Java内存区域是指 JVM运行时将数据分区域存储 ,简单的说就是不同的数据放在不同的地方。通常又叫 运行时数据区域

Java内存模型(JMM)定义了程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。

问题2:内存区域是一个什么样的东西呢?

JVM的内存区域在JDK1.8之前和JDK1.8以后有一个大的版本更新和不同的点,看看下面两幅图,能不能找到不同点:

JDK1.8之前

JDK1.8之后

问题3:各个模块的代表什么含义呢?

Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。堆是垃圾收集器管理的主要区域,又称为“GC堆”,可以说是Java虚拟机管理的内存中最大的一块。

方法区:方法区(JDK 8 之后改为 Metaspace)存储类的元数据、静态变量和常量池。

栈:栈为每个线程分配,用于存储局部变量表、操作数栈和返回地址。

程序计数器:程序计数器是每个线程独占的,记录线程当前执行的字节码指令地址。

问题4:各个模块的大小怎么计算呢?

堆计算方式:
  • 最大堆大小:通过 -Xmx 参数配置,例如:-Xmx2g 表示最大堆大小为 2 GB。
  • 初始堆大小:通过 -Xms 参数配置,例如:-Xms512m 表示初始堆大小为 512 MB。
  • 默认值(未指定时):
    • 初始大小:物理内存的 1/64(最小 1 MB,最大 1 GB)。
    • 最大大小:物理内存的 1/4。
调整方法:
  • -Xmx 和 -Xms 可设置堆的上下限。两者通常设置为相同值以避免堆扩展时的性能开销。
方法区的计算方式:
  • 最大 Metaspace 大小:通过 -XX:MaxMetaspaceSize 参数配置,例如:-XX:MaxMetaspaceSize=256m
  • 初始 Metaspace 大小:通过 -XX:MetaspaceSize 参数配置,例如:-XX:MetaspaceSize=128m
  • 默认值(未指定时):
    • 初始大小:大约 20 MB。
    • 最大大小:受限于物理内存大小。
调整方法:
  • 调整 -XX:MetaspaceSize 和 -XX:MaxMetaspaceSize

栈的计算方式:
  • 线程栈大小:通过 -Xss 参数配置,例如:-Xss1m 表示每个线程的栈大小为 1 MB。
  • 默认值(未指定时):
    • 通常为 1 MB 或 512 KB,具体值依赖于 JVM 实现和操作系统。
调整方法:
  • 通过 -Xss 调整。如果线程数过多且栈大小设置过大,可能会耗尽内存。
程序技术器的计算方式:
  • 程序计数器占用的内存非常小,JVM 自动分配,无需手动配置。 

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

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

相关文章

自动驾驶AVM环视算法--python版本的俯视碗型投影模式

c语言版本和算法原理的可以查看本人的其他文档。《自动驾驶AVM环视算法--3D碗型投影模式的exe测试工具》本文档进用于展示部分代码的视线,获取方式网盘自行获取(非免费介意勿下载):链接: https://pan.baidu.com/s/1STjUd87_5wDk_C…

【并发容器】源码级ConcurrentHashMap详解(java78)

1. ConcurrentHashMap 为什么要使用ConcurrentHashmap 在多线程的情况下,使用HashMap是线程不安全的。另外可以使用Hashtable,其是线程安全的,但是Hashtable的运行效率很低,之所以效率低下主要是因为其实现使用了synchronized关…

程序设计考题汇总(四:SQL练习)

文章目录 查询结果限制返回行数 查询结果限制返回行数 select device_id from user_profile LIMIT 2;

Alan Chhabra:MongoDB AI应用程序计划(MAAP) 为客户提供价值

MongoDB全球合作伙伴执行副总裁 Alan Chhabra 每当有人向我问询MongoDB,我都会说他们很可能在不觉之间已经与MongoDB有过交集。事实上,包括70%财富百强在内的许多世界领先企业公司都在使用MongoDB。我们在MongoDB所做的一切都是为了服务客户&#xff0c…

centos使用mkisofs构建无人值守镜像(附官方学习文档)

安装mkisofs yum install -y mkisofs 挂载镜像并确认 并拷贝文件(/mnt 为我们的工作目录) 1.3 准备自动应答文件(保存为 ins.ks) 修改系统引导 实际上就是添加inst.ks 这个引导参数 传递应答文件 传统模式引导

jenkins pipeline打包流程

Jenkins Pipeline 是 Jenkins 提供的一种用于持续集成和持续交付(CI/CD)的脚本化流程工具。它允许你通过编写一个 Jenkinsfile 文件来定义整个构建、测试和部署的流程。本文介绍打包springcloud项目,react项目为docker镜像 文章目录 1.项目结…

【容器】k8s学习笔记原理详解(十万字超详细)

Pod详解 Pod介绍 Pod结构 每个Pod中都可以包含一个或者多个容器,这些容器可以分为两类: 用户程序所在的容器,数量可多可少Pause容器,这是每个Pod都会有的一个根容器,它的作用有两个: 可以以它为依据&am…

用.Net Core框架创建一个Web API接口服务器

我们选择一个Web Api类型的项目创建一个解决方案为解决方案取一个名称我们这里选择的是。Net 8.0框架 注意,需要勾选的项。 我们找到appsetting.json配置文件 appsettings.json配置文件内容如下 {"Logging": {"LogLevel": {"Default&quo…

多音轨视频使用FFmpeg删除不要音轨方法

近期给孩子找宫崎骏动画,但是有很多是多音轨视频但是默认的都是日语,电视上看没办法所以只能下载后删除音轨文件只保留中文。 方法分两步,先安装FFmpeg在转文件即可。 第一步FFmpeg安装 FFmpeg是一个开源项目,包含了处理视频的…

Ubuntu22.04切换gcc版本教程

在编译安装程序的时候,由于gcc版本过高,导致编译无法通过,需要降低gcc版本。 一、安装gcc版本 根据自己的需求安装gcc版本。 sudo apt update sudo apt install gcc-10 g++-10二、切换gcc版本 sudo update-alternatives --install /usr/bin/gcc gcc

[SZ901] JTAG合并功能(类似FPGA菊花链)

SZ901 JTAG支持将JTAG端口组合,最多将四个JTAG变成一个 设置如下 Vivado 识别结果如下 两块板子,变成一组,,可以同时抓取信号,调试! SZ901 已上架淘宝,搜素“SZ901”哦

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候,有一个需求是限制相机倾斜角,也就是鼠标中键调整视图俯角时,不能过大,一般 pitch 角度范围在 0 至 -90之间,-90刚好为正俯视。 在网上查阅了很多资料,发现并没有一个合适的…

如何解决samba服务器共享文件夹不能粘贴文件

sudo vim /etc/samba/smb.conf在samba的配置文件中增加一个选项 writable yes重启Samba服务以使更改生效: sudo service smbd restart

数据结构简介:结构创造效率

一、数据结构的本质 数据结构是组织大量数据的方法(data structures:methods of organizing large amounts of data )。 根据这个定义,一条数据,就不能构成数据结构。 因为结构是数据与数据之间的关联,…

【经验分享】容器云运维的知识点

最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…

Linux系列之如何更换Centos yum源?

环境 Centos7Xshell7 问题描述 最近安装了一个虚拟机,准备用来学习,不过使用yum命令安装一些软件,不过使用这个命令时候,提示 Cannot find a valid baseurl for repo: base/7/x86_64,Could not retrieve mirrorlis…

RabbitMQ如何构建集群?

大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…

负载均衡oj项目:介绍

目录 项目介绍 项目演示 项目介绍 负载均衡oj是一个基于bs模式的项目。 用户使用浏览器向oj模块提交代码,oj模块会在所有在线的后端主机中选择一个负载情况最低的主机,将用户的代码提交给该主机,该主机进行编译运行,将结果返回…

第8章 搬移特性

8.1 搬移函数 模块化是优秀软件设计的核心所在,好的模块化能够让我在修改程序时只需理解程序的一小部分。为了设计出高度模块化的程序,我得保证互相关联的软件要素都能集中到一块,并确保块与块之间的联系易于查找、直观易懂。同时&#xff0c…

rust的axux框架开启负载均衡和重启自身的方法-会议签到的调优

开启负载均衡和重启自身 更换axum后台的意外解决的尝试在caddy反代,使用负载均衡,加多一个节点axum主程序 ip映射信息做全局共享axum重启自身刷新全局共享配置 前期刚实现了rust的后台关键业务.结果出现了两类大问题停止服务.在正用着的时候,出现很多意外,真是刺激… 更换axum…