首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JVM常用内存参数配置

Server端JVM最好将-Xms和-Xmx设为相同值,避免每次垃圾回收完成后JVM重新分配内存;开发测试机JVM可以保留默认值。...因为CMS是不会移动内存的,因此非常容易产生内存碎片。因此增加这个参数就可以在FullGC后对内存进行压缩整理,消除内存碎片。...JVM启动参数共分为三类:   1、标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容。...2、非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容。...本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。 JVM内存组成及GC相关内容请见之前的文章:JVM内存组成 GC策略&内存申请。JVM参数的含义实例见实例分析如下: ?

3.6K30

JVM参数配置 java内存区域

5.JVM栈(JVM Stacks),程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期线程相同。...JVM参数配置 JVM启动模式   Client模式:启动速度较快,但运行时性能和内存管理效率不高   Server模式:启动比Client模式慢10%,但运行时性能和内存管理效率较高   在JVM...设置参数-XX:+UseAdaptiveSizePolicy,这是一个开关参数,当这个参数打开后,不需要手工指定新生代的大小(-Xmn)、EdenSurvivor区比例(-XX:SurvivorRatio...由于整个过程中耗时最长的并发标记和并发清除过程,收集线程都可以用户线程一起工作,所以,从总体上来说,CMS收集器的内存回收过程是用户线程一起并发执行的。...-Xms3550m:设置JVM促使内存为3550m。此值可以设置-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xmn2g:设置年轻代大小为2G。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

2.3 JVM内存参数设置

我们可以对运行时数据区的内存进行参数设置. 这是jvm调优的重点. 参数的变化将影响到整体效率 ?...这里单独说一下spring boot项目启动的时候如何设置jvm参数?...方法区(元空间)参数设置 ? 在jdk8之前有各区域叫做永久代, 在jdk8及以后改名字了, 叫做元空间. 这块内存空间占用的是直接的物理内存....比如内存条是8G的, 堆和栈分配了4G的空间, 那么元空间最多可以使用4G 我们可以通过参数来设置使用的最大内存 -XX:MetaspaceSize=256M     元空间的初始空间大小, 以字节位单位...由于调整元空间的大小需要full GC, 这是非常昂贵的操作, 如果应用在启动的时候发生大量的full GC, 通常都是由于永久代或元空间发生了大小的调整, 基于这种情况, 一般建议在JVM参数中将-

2.8K21

内存泄露、内存溢出和堆外内存JVM优化参数配置参数

造成内存泄漏典型场景: 1.单例模式的不正确使用 单例对象在初始化后将在JVM的整个生命周期中以静态变量的方式存在。...堆外内存 关于堆内内存以及相应的内存回收策略,在之前的文章《JVM内存管理和垃圾回收》、《JVM垃圾回收器、内存分配回收策略》中已有介绍。...对于堆外内存是指分配的对象直接受操作系统管理的JVM内存堆以外的空间。同时因为这部分区域直接受操作系统的管理,别的进程可以直接通过操作系统对其进行访问,减少了从JVM中复制数据的过程。...,读写操作频繁的场景 但也存在如下缺点: 容易出现内存泄漏,并且很难排查 堆外内存的数据结构不直观,当存储结构复杂的对象时,会浪费大量的时间对其进行串行化 常用JVM配置参数 -Xms:JVM初始最小堆内存...-Xmx:JVM允许最大堆内存 -XX:PermSize:JVM初始非堆内存 -XX:MaxPermSize:JVM允许最大的非堆内存 -XX:+UseConcMarkSweepGC:年老代激活CMS

1.3K10

JVM 内存区域大小参数设置

) 通过JVM启动参数来配置以上内存空间   Heap(堆)内存大小设置   -Xms512m 设置JVM堆初始内存为512M   -Xmx1g 设置JVM堆最大可用内存为1G...New Generation(新生代)内存大小设置   -Xmn256m 设置JVM的新生代内存大小(-Xmn 是将NewSizeMaxNewSize设为一致。...=3   设置新生代(包括Eden和两个Survivor区)老年代的比值。...设置为3,则新生代与老年代所占比值为1:3,新生代占整个堆栈的1/4 Survivor内存大小设置   -XX:SurvivorRatio=8   设置为8,则两个Survivor区一个...  堆内存减去新生代内存   如上面设置的参数举例如下:   老年代初始内存为:512M-256M=256M   老年代最大内存为:1G-256M=768M Stack

8.4K21

JVM 内存区域大小参数设置

需要提前了解的知识点: JVM内存模型 JVM垃圾回收算法 下图是JVM内存区域划分的逻辑图 JVM内存区域逻辑图 从图中我们大概了解JVM相关的内存区域。...Generation(持久代) Stack(栈区) Metaspace(元空间) Direct ByteBuffer(直接内存) 下面我们就通过一些JVM启动参数来配置以上内存空间 Heap(堆)内存大小设置...(-Xmn 是将NewSizeMaxNewSize设为一致。...(包括Eden和两个Survivor区)老年代的比值(除去持久代)。...默认情况下,类元数据分配受到可用的本机内存容量的限制(容量依然取决于你使用32位JVM还是64位操作系统的虚拟内存的可用性)。 一个新的参数 (MaxMetaspaceSize)可以使用。

4.6K150

深入理解JVMJVM内存区域内存分配

在学习jvm内存分配的时候,看到的这篇博客,该博客对jvm内存分配总结的很好,同时也利用jvm内存模型解释了java程序中有关参数传递的问题。   ...对理解多态、参数传递等的理解都有帮助。   ...这也是为什么我把内存区域分为线程共享和非线程共享的原因,非线程共享的那三个区域的生命周期所属线程相同,而线程共享的区域JAVA程序运行的生命周期相同,所以这也是系统垃圾回收的场所只发生在线程共享的区域...正因为方法区所存储的数据堆有一种类比关系,所以它还被称为 Non-Heap。方法区也可以是内存不连续的区域组成的,并且可设置为固定大小,也可以设置为可扩展的,这点堆一样。   ...调用test实例的change3方法,以实例d2为参数。同理,JVM会在栈中为局部引用变量b分配空间,并且把d2中的指针存放在b中,此时d2和b指向同一个对象。

58630

JAVA JVM常见内存参数配置简析

JVM常见内存参数配置简析 常见参数 -Xms 、-Xmx、-XX:newSize、-XX:MaxnewSize、-Xmn(-XX:newSize、-XX:MaxnewSize) 简析 1、...注: 1)-Xms,-Xmx内存大小建议为512的整数倍,可以根据机器实际内存进行合理的设置,建议最大值-Xmx不要超过剩余物理内存的50% 2)通常会将 -Xms -Xmx两个参数的配置相同的值...3)注意:jvm在执行GC时,会停止工作。...MaxnewSize的增大,可以降低GC频率, 一般来讲对于堆区的内存分配只需要对上述两个参数进行合理配置即可,但是如果想要进行更加精细的分配还可以对堆区内存进一步的细化,那就要用到下面的三个参数了-...而接下来要讲述的三个参数是用来控制新生代内存大小的。

3.4K20

JVM内存分配回收

测试: 通过以下方式运行: 添加的参数: -XX:+PrintGCDetails 运行结果: 从上图我们可以看出eden区内存几乎已经被分配完全(即使程序什么也不做,新生代也会使用至少2000多k内存)...如何选择垃圾收集器 优先调整堆的大小让服务器自己来选择 如果内存小于100M,使用串行收集器 如果是单核,并且没有停顿时间的要求,串行或JVM自己选择 如果允许停顿时间超过1秒,选择并行或者JVM...实战调优 JVM调优主要就是调整下面两个指标 停顿时间:  垃圾收集器做垃圾回收中断应用执行的时间。  .../gc.log Tomcat则直接加在JAVA_OPTS变量里 分析日志得到关键性指标 分析GC原因,调优JVM参数 1、Parallel Scavenge收集器(默认) 分析parallel-gc.log...停顿时间是500ms以内 吞吐量是90%以上 GC常用参数 堆栈设置   -Xss:每个线程的栈大小   -Xms:初始堆大小,默认物理内存的1/64   -Xmx:最大堆大小,默认物理内存的1/

1.5K20

JVM内存区域OOM

说明:本篇博客属于读书笔记,大量参考《深入理解Java虚拟机》这本书 JVM内存 程序计数器 程序计数器是线程私有的,每一个线程都有自己的一个程序计数器,并且互不干扰,程序计数器相当于当前代码所执行指令的指针...程序计数器记录的是当前执行代码的指令地址,当Java程序正在执行Native方法,程序计数器则为空(Undefined),程序计数器是不会抛出OOM异常的 Java虚拟机栈 Java虚拟机栈也是线程私有的,它的生命周期线程的生命周期相同...对象创建的过程 在JVM中当收到一个new指令的时候首先会去常量池中检查是否存在这个类的符号引用,并检查这个类是否已经被加载,解析和初始化过,如果没有,那就先执行类加载过程 类加载检查过后,接下来JVM...,即用过的内存都在一边,空闲的内存在另一边,那么此时的内存分配就是把指针指向空闲内存空间挪动一段于对象大小相同的距离;第二种是“空闲列表”,当Java堆中使用内存和空闲内存相互交错的时候,此时JVM必须维护一个列表...reference直接存的就是对象地址,reference直接指向JVM堆中的对象,这么做的好处就是访问对象速度快,要是对象被频繁的访问,那指针访问的方式将有明显的效率提升 内存溢出 Java堆内存溢出

38820

jvm内存参数图解,Xmn,Xms,Xmx,XX

Java中堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象和数组,如下图所示: 在Java中,堆被划分成两个不同的区域:年轻代、老年代。...这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内存的分派以及回收。 堆是GC收集垃圾的主要区域。GC分为两种:Minor GC、Full GC。...1.年轻代 年轻代用来存放新近创建的对象,尺寸随堆大小的增加和减少而相应的变化,默认值是保持为堆的1/15.可以通过-Xmn参数设置年轻代为固定大小,也可以通过 -XX:NewRatio 来设置年轻代与年老代的大小比例...3.永久代 永久代是Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西。在Java 8中,永久代被彻底移除,取而代之的是另一块堆不相连的本地内存——元空间。...永久代或者“Perm Gen”包含了JVM需要的应用元数据,这些元数据描述了在应用里使用的类和方法。注意,永久代不是Java堆内存的一部分。永久代存放JVM运行时使用的类。

1.2K20

JVM和Linux内存的关系--进程JVM内存空间

三.进程JVM内存空间 JVM本质就是一个进程,因此其内存空间(也称之为运行时数据区,注意JMM的区别)也有进程的一般特点。深入浅出 Java 中 JVM 内存管理,这篇参考下。...JVM进程普通进程内存模型比较如下图: 需要说明的是,这个模型的并不是JVM内存使用的精确模型,更侧重于从操作系统的角度而省略了一些JVM的内部细节(尽管也很重要)。...JVM向操作系统申请一整段内存区域(具体大小可以在JVM参数调节)作为Java程序的堆(分为新生代和老年代);当Java程序申请内存空间,比如执行new操作,JVM将在这段空间中按所需大小分配给Java...最后是要排查JVM启动参数和Java程序的DirectByteBuffer使用情况。...在本例中,查看JVM启动参数,发现启用了-XX:+DisableExplicitGC导致System.gc()被禁用。

2.8K21

JVM从头学(一)—— 堆栈JVM内存模型

java内存模型 JVM是java虚拟机。它把内存分为,寄存器,本地方法区,方法区,栈内存,堆内存。...栈内存存的是引用,基本类型对象。堆存的是数组和实体对象。栈对象的引用的地址就是堆的地址。栈的生命周期很短,一旦对象离开生命周期,就在栈中清除该数据。...如String a = "123";,JVM会在栈中创建引用a,在字符串池中找到是否有”123”这个字符串,如果有,就把地址直接赋予a,如果没有,在字符串池中创建”123”,并把地址赋予a。...如String a = new String("123");,JVM会在栈中创建引用a,并比较字符串池中是否存在,不存在便创建,同时在堆中创建一个”123”的对象,把堆的地址赋予引用a。

47210

Jvm内存模型垃圾回收

内存模型 JVM内存空间包含:方法区、java堆、java栈、本地方法栈。 ? 方法区是各个线程共享的区域,存放类信息、常量、静态变量。...本地方法栈角色和java栈类似,只不过它是用来表示执行本地方法的,本地方法栈存放的方法调用本地方法接口,最终调用本地方法库,实现操作系统、硬件交互的目的。...堆栈分开设计是为什么呢? 栈存储了处理逻辑、堆存储了具体的数据,这样隔离设计更为清晰 堆栈分离,使得堆可以被多个栈共享。...Xmn OutOfMemoryError 程序计数器 线程私有、占用内存小 字节码行号 无 无 方法区 线程共享 存储类加载信息、常量、静态变量等 -XX:PermSize -XX:MaxPermSize...OutOfMemoryError 垃圾回收 Generational Collection 分代收集 目前JVM主要采取的一种方法,思想就是把JVM分成不同的区域。

28500

jvm 参数设置分析

概述 之前的文章中介绍了 jvm 内存管理和垃圾收集的相关内容,结合这些理论知识,通过合理设置参数才能将系统的性能得以提升。 2. JVM 主要参数 2.1....基本的设置参数 JVM 设置参数的主要含义 参数名称 含义 默认值 说明 -Xms 最小堆大小 物理内存的 1/64(<1GB) 空闲堆内存小于40%(通过 MinHeapFreeRatio 参数可调整该阈值...)时,jvm 会增大堆直到 -Xmx -Xmx 最大堆大小 物理内存的 1/4(<1GB) 空闲堆内存大于70%(通过 MaxHeapFreeRatio 参数可以调整该阈值)时,jvm 会减小堆直到...并行收集相关的参数 JVM 并行GC的设置参数 参数名称 含义 默认值 说明 -XX:+UseParGC 使用 ParNew 收集器进行新生代收集 false -XX:+UseConcMarkSweepGC...CMS 相关参数 JVM CMS GC 的设置参数 参数名称 含义 默认值 说明 -XX:+UseConcMarkSweepGC 启用 CMS GC false - -XX:CMSFullGCsBeforeCompaction

86120

JVM内存模型线程

内存工作内存 java内存模型规定了:所有的变量都存储在主内存中 每条线程还有自己的工作内存: 线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取,赋值)都必须在工作内存中进行...不同的线程之间也无法直接访问对方工作内存中的变量 线程间变量值的传递均需要通过主内存来完成:线程、内存、工作内存三者关系如下所示: 这里所讲的主内存,工作内存前面讲的 java内存区域中的...:主内存就直接对应于物理硬件的内存,而为了获得更好的运行速度,虚拟机可能会让工作内存优先存储于寄存器和高速缓存中,因为程序运行时主要访问读写的是工作内存 内存间交互操作 关于主内存工作内存间的交互协议...- 要求volatile修饰的变量不会被指令重排序优化,保证代码的执行顺序程序的顺序相同。...java内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方式来实现可见性的,无论是普通变量还是volatile变量都是如此; **普通变量

19410

JVM内存分配管理详解

概述 了解C++的程序员都知道,在内存管理领域,都是由程序员维护管理,程序员用于最高的管理权限,但对于java程序员来说,在内存管理领域,程序员不必去关心内存的分配以及回收,在jvm自动内存管理机制的帮助下...,不需要想C++一样为每一个new操作去编写delete/free代码,这一切交给jvm,但正是这一切都交给了jvm,一旦出现内存泄漏溢出,如果不了jvm,那么对于程序的编写调试将会非常困难,因此了解...尽管有时候jvm将方法区描述为堆的一个逻辑部分,但是它有一个别名Non-Heap(非堆),用来堆进行区分。...在jvm遇到new关键字后,首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且去检查这个符号引用代表的类是否已被加载,解析和初始化过,如果没有就必须先执行类加载的全过程。...jvm是否使用TLAB可以通过-XX:+/-UserTLAB参数来设定。

61640

JVM参数汇总:JVM内存设置多大合适?Xmx和Xmn如何设置?

所有的JVM实现都必须实现这些参数的功能,而且向后兼容; 其二是非标准参数(-X), 默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容; 其三是非Stable...命令查看java的class字节码文件、verbose、synchronize 三、非标准参数又称为扩展参数 JVM内存设置多大合适?Xmx和Xmn如何设置?...例如: 常用的参数介绍: -Xms512m 设置JVM促使内存为512m。此值可以设置-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。...本文将注重介绍JVM、GC的一些重要参数的设置来提高系统的性能。 JVM内存组成及GC相关内容请见之前的文章:JVM内存组成 GC策略&内存申请。...JVM参数的含义 实例见实例分析 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,

14.5K100

jvm之Java内存区域内存溢出异

概述: 作者对比c++和java ,指出相比c++ ,Java 编程不需要开发者自己管理创建对象的内存,因为借助jvm的自动管理内存机制的帮助,开发人员可以不考虑这些。...但交给Java虚拟机一旦出现内存泄漏和溢出的问题,如果不了解jvm的原理和运行机制,排查出来也是很有难度的,jvm也是成为了Java开发人员需要了解学习的原因,自己觉得学习jvm对 自己编写的代码的运行原理底层能有深入的了解...运行时数据区域 上图为敬,肝了半天,画出了一个图 image.png 程序计数器 对比理解操作系统中的pc+1,cpu的 计数器,能够比较理解jvm的程序计数器,记录当前执行程序经javac编译器编译后的

44500
领券