首页 > 系统相关 >13.JVM内存模型深度剖析

13.JVM内存模型深度剖析

时间:2024-10-11 12:53:31浏览次数:3  
标签:13 Java 对象 MaxMetaspaceSize XX 内存 JVM

一、JDK体系结构

JDK代表Java Development Kit(Java开发工具包),是用于开发和编译Java应用程序的软件包。JDK是由Oracle提供的Java平台的官方实现,包含了开发和运行Java程序所需的工具、库和JRE(Java Runtime Environment)。

二、JAVA语言跨平台特性

Java的跨平台特性是指Java代码可以在任何支持Java虚拟机(JVM)的操作系统上运行,无需重新编译。这是通过Java字节码(.class文件)实现的,字节码是一种中间表示,可以在任何支持Java运行时环境的系统上运行。

Java的跨平台特性主要由Java虚拟机(JVM)保证,JVM是一个可以执行Java字节码的虚拟机进程,不同操作系统上的JVM是不同的,但提供了相同的接口。当你编写好Java代码后,编译生成的.class文件可以在任何支持JVM的机器上运行,无需改变。

三、JVM内存结构及内存模型

在minor gc过程中对象挪动后,引用如何修改?

对象在堆内部挪动的过程其实是复制,原有区域对象还在,一般不直接清理,JVM内部清理过程只是将对象分配指针移动到区域的头位置即可,比如扫描s0区域,扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代,最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可,s0区域之前对象并不直接清理,当有新对象分配了,原有区域里的对象也就被清除了。

minor gc在根扫描过程中会记录所有被扫描到的对象引用(在年轻代这些引用很少,因为大部分都是垃圾对象不会扫描到),如果引用的对象被复制到新地址了,最后会一并更新引用指向新地址。

四、JVM内存参数设置

Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里):

java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K -XX:MatespaceSie=256M -XX:MaxMetaspaceSize=256M -jar **********.jar

-Xss:每个线程的栈大小;-Xss设置越小执行次数越小,说明一个线程栈里能分配的栈帧就越少,但是对JVM整体来说能开启的线程数会更多

-Xms: 设置堆的初始大小,默认物理内存的1/64

-Xmx: 设置堆的最大可用大小,默认物理内存的1/4

-Xmn:新生代大小

-XX:NewRadio: 默认2表示新生代占老年代的1/2,占整个内存的1/3

-XX:SurvivorRatio: 默认8表示一个Survivor区占用1/8的Eden内存,即1/10的新生代内存

关于元空间的JVM参数有两个:-XX:MetaspaceSize=N和 -XX:MaxMetaspaceSize=N

XX:MaxMetaspaceSize: 设置元空间最大值, 默认是-1, 即不限制, 或者说只受限于本地内存大小。

-XX:MetaspaceSize: 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小), 以字节为单位,默认是21M左右,达到该值就会触发full gc进行类型卸载, 同时收集器会对该值进行调整: 如果释放了大量的空间, 就适当降低该值; 如果释放了很少的空间, 那么在不超过-XX:MaxMetaspaceSize(如果设置了的话) 的情况下, 适当提高该值。这个跟早期jdk版本的-XX:PermSize参数意思不一样,-XX:PermSize代表永久代的初始容量。

由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生大量Full GC,通常都是由于永久代或元空间发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值,并设置得比初始值要大,对于8G物理内存的机器来说,一般两个值都设置为256M。

标签:13,Java,对象,MaxMetaspaceSize,XX,内存,JVM
From: https://blog.csdn.net/Csdn_xzh/article/details/142851228

相关文章

  • Volatile关键字以及JMM内存模型
    JMM内存模型:这个简单来说就是一个规范,对数据进行计算的时候先从主内存中读取到PC寄存器然后进行计算之后将计算的结果最后再放入到主内存中下面以i++的计算过程为例子:引申出这种情况下的三大特性(线程安全):1.原子性:当线程对资源进行操作的时候不能被其他线程所打断......
  • JVM系列(四) -内存布局详解
    一、摘要熟悉Java语言特性的同学都知道,相比C、C++等编程语言,Java无需通过手动方式回收内存,内存中所有的对象都可以交给Java虚拟机来帮助自动回收;而像C、C++等编程语言,需要开发者通过代码手动释放内存资源,否则会导致内存溢出。尽管如此,如果编程不当,Java应用程序......
  • 【C/C++内存管理】
    【知识预告】C/C++内存分布C语言中动态内存管理方式C++内存管理new和delete的实现原理常见面试题内存泄漏1C/C++内存分布intglobalVar=1;staticintstaticGlobalVar=1;voidTest(){ staticintstaticVar=1; intlocalVar=1; intnum1[10]={1,2,3,......
  • VMware Fusion 13.6.1 发布下载,修复 4 个已知问题
    VMwareFusion13.6.1发布下载,修复4个已知问题VMwareFusion13.6.1forMac-领先的免费桌面虚拟化软件适用于基于Intel处理器和搭载Apple芯片的Mac的桌面虚拟化软件请访问原文链接:https://sysin.org/blog/vmware-fusion-13/查看最新版。原创作品,转载请保留出处。......
  • 20222313 2024-2025-1《网络与系统攻防技术》实验一报告
    1.实验内容本次实践的对象是一个名为pwn1的linux可执行文件。该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个......
  • ARC136C Circular Addition [高维前缀和]
    Description给定一个长度为\(n\)的正整数序列\(A\),求有多少对\((i,j)\)使得\(A_i+A_j\)不发生进位操作。\(A_i<10^6\)。Solution显然对于每个\(A_i\),设\(B_i=999999-A_i\),那么\(A_i\)可以和所有位上的数都小于等于\(B_i\)对应位上的数的数匹配,考虑用桶加前缀......
  • 内存映射和共享内存
    内存映射(Memory-mappedfile)和共享内存(Sharedmemory)都是进程间通信(IPC)的机制,但它们在实现方式和使用场景上有一些区别:内存映射(Memory-mappedfile):内存映射是一种将文件或设备的内容映射到进程的地址空间的技术。这样,进程可以像访问普通内存一样访问文件内容。它通常用于文......
  • [JOI 2013 Final]彩灯
    [JOI2013Final]彩灯题意给出一个\(01\)序列,可以把一段区间反转。求反转后序列最长的交替子段,即\(010101\ldots\)或\(101010\ldots\)。思路首先发现一个性质,反转的一定是一段交替子段。因为反转不交替子段对答案的贡献不优。枚举反转哪一段交替子段,统计左右两边的......
  • [JOI 2013 Final]JOIOI 塔
    [JOI2013Final]JOIOI塔题意给出一个由\(\text{JOI}\)组成的字符串,可从中取出一些子序列。求最多取出多少\(\text{IOI}\)和\(\text{JOI}\)。思路若答案\(x\)可行,则所有\(y<x\)均可行,若答案\(x\)不可行,则所有\(y>x\)均不可行。这样就可以可行性二分。考虑如......
  • [JOI 2013 Final]现代豪宅
    [JOI2013Final]现代豪宅题意给出一个\(n\timesm\)的网格图,每两个格子之间有一扇门。初始上下方向的门都是开着的,左右方向的门是关着的。有一些格子有按钮,可以把打开的门关上,关上的门打开。走一步需要一秒,按按钮需要一秒,求从\((1,1)\)到达\((n,m)\)的最小步数。思路......