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

Jenkins优化--修改 JVM内存配置

修改 JVM内存配置 Jenkins 启动方式有两种方式,一种是以 Jdk Jar 方式运行,一种是将 War 包放在 Tomcat 容器下运行。...不管何种方式运行,都会存在一个问题就是,默认 JVM 内存分配太少,导致启动或者运行一段时间后内存溢出报错java.lang.OutOfMemoryError: PermGen space。...所以,需要在启动前修改 JVM 内存配置。...JVM 内存配置大小,例如下边配置: JAVA_OPTS="$JAVA_OPTS -server -Xms512m -Xmx1024m -XX:PermSize=256M -XX:MaxPermSize...=512m" 注意:这里的几个 JVM 参数含义如下: -Xms: 使用的最小堆内存大小 -Xmx: 使用的最大堆内存大小 -XX 内存的永久保存区域大小 -XX 最大内存的永久保存区域大小 这几个参数也不是配置越大越好

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

jvm(1):jvm内存模型

身为一个职业的Java程序员,每天打交到最多的就是jvm,那么套用孙子的一句话“知己知彼方能百战不殆”,熟悉jvm也就意味着是我们进阶路上必过之槛,下面先来张图,大概说明下jvm内存分布 ?...从图上可以看出Java内存主要分5个部分,下面会针对这5个部分分别进行说明 方法区:主要是保存的信息是类的元数据。方法区与堆空间类似,是被JVM中所有的线程共享的区域。...Java堆:堆在JVM规范里是一种通用性的内存池,用于存放所有的Java对象。堆是一个运行时数据区,类的对象从中分配空间,堆的优势是可以动态地分配内存大小,生存周期也不需要事先告诉编译器。...栈是一种快速有效的分配存储方法,访问速度仅次于寄存器,堆栈指针若向下移动,则分配新的内存,若向上移动,则释放那些内存。...由于Java虚拟机需要预先去生成相应的内存空间,所以但我们尝试运行程序的时候,Java虚拟机必须知道被存储在栈内的所有数据的确切大小和生命周期,以便按照上面陈述的分配存储方法通过上下移动堆栈指针来动态调整内存空间

75930

JVM初探 -JVM内存模型

JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧....因此最近抽时间研读了几本评价较高的JVM入门书籍, 算是总结于此....JVM 内存区域 JVM会将Java进程所管理的内存划分为若干不同的数据区域. 这些区域有各自的用途、创建/销毁时间: ? 一....直接内存 直接内存并不是JVM运行时数据区的一部分, 但也会被频繁的使用: 在JDK 1.4引入的NIO提供了基于Channel与Buffer的IO方式, 它可以使用Native函数库直接分配堆外内存,...异常. ---- HotSpot对象 对象新建 new一个Java Object(包括数组和Class对象), 在JVM会发生如下步骤: 1.对分配内存空间的动作进行同步 -采用 CAS配上失败重试 方式保证更新操作的原子性

83140

JVM 札记】JVM 内存划分

是否有必要学习 JVM 为什么要了解 JVM内存划分或者内存管理呢?其实本身我觉得是没有太多必要的,因为作为一个普通的程序员而言,去了解它是一种破坏黑盒子的行为。...但是,JVM 提供了自动的内存管理机制,它的内存自动管理机制虽然有很多实现方式,但是在各种不同的场景下它不一定是最优的。...为什么进行内存划分 既然需要了解 JVM内存划分,那么就先说说 JVM 为什么要进行内存划分呢?这个其实比较好理解,因为这种划分区域的方式可以说随处可见。...当然了,虽然这是事实,但是也并不说明内存按属性划分的管理方式有问题) JVM 内存大致划分 JVM 作为虚拟机的存在可以被认为是一台独立的机器,.class 作为 JVM 上的可执行文件,因此,JVM...当堆中的对象不再使用时,JVM 会在某个时间点回收这些内存空间。

10610

JVM】剖析JVM内存模型

JVM在执行java程序时的过程中会把它所管理的内存划分为若干个不同的数据区域。...1、方法区(元数据空间)   方法区与Java堆一样,是各个线程共享的内存区域。方法区是jvm的元数据区域,类比成为一张表,一个class文件的信息都是表的一条数据存储在内存中。...Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。   Java 堆是垃圾回收机制的主要区域。...当常量池无法在申请到内存时将抛出OutOfMenoryError错误。 6、直接内存   直接内存并不是JVM虚拟机运行时数据区的一部分,也不是JVM虚拟机规范中定义的内存区域。...此区域是JVM规范中没有规定任何OutOfMenoryError的区域。

58830

JVM初探 -JVM内存模型

二、JVM内存空间管理 根据JVM规范,JVM内存划分了如下几个区域: 1. 方法区 2. 堆区 3. 本地方法栈 4. 虚拟机栈 5....在JVM所管理的内存中,堆区是最大的一块,堆区也是JavaGC机制所管理的主要内存区域,堆区由所有线程共享,在虚拟机启动时创建。...对于堆区大小,可以通过参数-Xms和-Xmx来控制,-Xms为JVM启动时申请的最新heap内存,默认为物理内存的1/64但小于1GB;-Xmx为JVM可申请的最大Heap内存,默认为物理内存的1/4但小于...三、JVM内存分配 Java对象所占用的内存主要在堆上实现,因为堆是线程共享的,因此在堆上分配内存时需要进行加锁,这就导致了创建对象的开销比较大。...应用场景 CMS收集器主要用在应用程序对暂停时间要求很高的场景,比如桌面UI应用需要及时响应用户操作事件、服务器必须能快速响应客户端请求或者数据库要快速响应查询请求等等。

89920

JVMJVM运行时内存结构, JDK1.7 JVM内存结构, JDK1.8 JVM内存结构, JVM内存结构

1 JDK1.7结构 1.1 JVM内存图 程序计数器: 线程私有的(每个线程都有一个自己的程序计数器), 是一个指针. 代码运行, 执行命令....在Eden区间变满的时候, GC就会将存活的对象移到空闲的Survivor区间中,根据JVM的策略,在经过几次垃圾收集后,任然存活于Survivor的对象将被移动到Tenured区间。...Perm 永久区 Perm代主要保存class,method,filed对象,这部份的空间一般不会溢出,除非一次性加载了很多的类,不过在涉及到热部署的应用服务器的时候,有时候会遇到java.lang.OutOfMemoryError...PermGen space 的错误,造成这个错误的很大原因就有可能是每次都重新部署,但是重新部署后,类的class没有被卸载掉,这样就造成了大量的class对象保存在了perm中,这种情况下,一般重新启动应用服务器可以解决问题...JDK1.8 结构 2.1 JVM运行时内存图 JDK1.8和JDK1.7的jvm内存最大的区别是, 在1.8中方法区是由元空间(元数据区)来实现的,常量池移到堆中. 1.8不存在方法区,将方法区的实现给去掉了

71910

JVM 彻底搞懂JVM内存区域及直接内存

B站搜索“乐哥聊编程“有本篇文章配套视频‍ https://www.bilibili.com/video/BV1rg411v7rw 面试题:直接内存会导致OOM么?...本地方法栈 本地方法栈和虚拟机方法栈作用类似,不过它是为执行native方法服务 堆 堆是被线程共享的一个内存区域,大部分对象都在堆上分配,少部分允许在栈上分配(通过逃逸分析)。...方法区 方法区也是一块内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。也包括运行时常量池。...jdk8以前主要通过永久代实现方法区 jdk8开始 通过元空间实现方法区 通过本地内存实现 直接内存 直接内存和堆内内存相对应,堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理...传统BIO 访问 直接内存访问

70220

JVM内存区域】

博主:java_wxid 社区:幕后大佬 @TOC 本文的大概内容: JVM内存区域 JVM 内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【JAVA 堆、方法区】...在 Hotspot JVM 内, 每个线程都与操作系统的本地线程直接映射, 因此这部分内存区域的存/否跟随本地线程的生/死对应。 线程共享区域随虚拟机的启动/关闭而创建/销毁。...直接内存并不是 JVM 运行时数据区的一部分, 但也会被频繁的使用 在 JDK 1.4 引入的 NIO 提 供了基于 Channel 与Buffer 的 IO 方式, 它可以使用 Native函数库直接分配堆外内存...由于现代JVM采用分代收集算法, 因此 Java 堆从 GC 的角度还可以细分为: 新生代(Eden 区、From Survivor 区和 To Survivor 区)和老年代。...方法区/永久代(线程共享) 永久代(Permanent Generation), 用于存储被 JVM 加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

71010

Jvm内存划分

在Java开发中我们不用考虑对内存的管理,是因为Jvm帮我们做了很多工作。Jvm为了满足不同的用途将内存大体划分了下面几部分。如下图: ? 下面我们详细介绍一下每一块的具体的功能。...只不过不同的是,这个计数器不是针对程序来说的,而是真对线程来说的,因为每一个线程可能执行的逻辑是不一样的,所以Jvm就要知道每一个线程在上一次的执行位置。所以程序计数器,每一个线程都是独立的。...堆:Jvm中管理内存的最大的地方。它的作用是存储对象的实例。我们可以通过设置-Xmx和-Xms控制堆大小。堆也是Jvm中垃圾回收器回收的主要地方。并且堆内存是所有线程所共享的区域。...方法区:和堆一样也是所有线程共享的内存区域,不同是的是它主要存储被虚拟机加载的类信息、常量、静态变量等信息。 运行时常量池:常量池存放在方法区中,主要保存编译时生成的字面量和符号引用。

59320

JVM内存区域

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为多个区域,这些区域各有自己的用途以及独特的创建和销毁时间,今天就来揭开这些不同的数据区域的神秘面纱 先来一张最经典的图: ?...栈 本地方法栈和虚拟机栈可以统称为栈,由于本地方法栈是jvm调用操作系统native方法所使用的栈且它们的作用是非常相似的,所以这里重点看一下虚拟机栈。...它描述的java方法执行的内存模型 为什么是Java方法执行的内存模型呢? 在虚拟机中,每一次方法调用都会创建栈帧,这个栈帧的生命周期就伴随着这个方法的执行周期。...关于堆的更多内容请持续关注博客更新 方法区 方法区同样是各个线程共享的内存区域,它主要存储已经被虚拟机加载的类信息 类信息 类的全限定名 父类的全限定名 直接实现接口的全限定名 类型标志 类的访问描述符...Class.forName获取的引用 方法表 非抽象类、非接口的类才会有,一个保存类中所有的方法的数组,数组中每个每个元素是对每个方法的直接引用 运行时常量池 当类和接口被加载到JVM

96240

JVM内存结构

说到java内存结构,不得不说下java内存模型,面试中可能经常会混淆,面试官问你的JAVA内存模型,可能人家想听到的是堆、栈、方法区等此类的关键词,只不过表述的有些问题,进而影响你的回答,所以在回答问题之前...,一定先问清楚是内存结构和内存模型。...主要区别,java内存结构是对内存的具体划分,java内存模型是解决多线程下工作线程和主线程数据不一致问题而提出的抽象规则。...),原因是很难确定永久代的大小,依赖很多因素,比如JVM加载的class的总数、常量池的大小等,不确定永久代大小很容易导致其OutOfMemoryError异常 运行时常量池 运行时常量池是方法区的一部分...对象作为这块内存的引用,避免在Java堆中和直接内存来回复制数据,实现零拷贝,显著提高性能

23230

JVM内存划分

前者是 JVM 的规范,而后者则是JVM 规范的一种实现,并且只有 HotSpot 才有 “PermGen space”,而对于其他类型的虚拟机,如JRockit(Oracle)、J9(IBM)并没有“...HotSpot虚拟机 3.1 内存划分 根据JVM规范,内存可分为:虚拟机栈,本地方法栈,堆,方法区,程序计数器五个部分。 但是各种虚拟机HotSpot,JRockit实现却与JVM不尽相同。...如下为JDK8的内存划分: 其中,元空间(Metaspace)的本质和永久代类似,都是对JVM规范中方法区的实现。 不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。...两种对象访问各有优势,使用句柄来访问的最大好处是reference中存储的是稳定的句柄地址,对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,而reference本身不需要修改...参考资料 深入理解Java虚拟机:JVM高级特性与最佳实践(第二版) https://www.cnblogs.com/paddix/p/5309550.html 发布者:全栈程序员栈长,转载请注明出处

76620

JVM内存模型

运行时数据区域 Java虚拟机(Java Virtual Machine,简称JVM)在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。...Java虚拟机栈(JVM Stacks) 与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。...Java 堆不需要连续内存,并且可以通过动态增加其内存,增加失败会抛出 OutOfMemoryError 异常。 ?...而在JDK1.8中, 永久区已经被彻底移除, 取而代之的是元数据区(Metaspace)(这一点在查看GC日志和使用jstat -gcutil查看GC情况时可以观察到),元空间的本质和永久代类似,都是对JVM...直接内存(Direct Memory) 直接内存(Direct Memory)并不是虚拟机运行时数据区的一部分,也不是Java虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用,而且也可能导致OutOfMemoryError

96551

JVM内存区域

简介 JVM虚拟机,也就是虚拟的计算机,它有自己虚拟的CPU、虚拟的内存等等,当然还有大名鼎鼎的垃圾回收器。第一篇我们来讲解一下JVM的虚拟内存。...Java运行时内存区域 Java虚拟机在启动时会根据JVM参数向操作系统申请内存,并将申请到的内存划分为不同的区域。...JVM内存区域包含以下几个运行时数据区(图摘自深入理解JAVA虚拟机第三版)。...堆是JVM中最大的一块内存空间,也是最容易发生OOM的内存空间。我们常说的垃圾回收器就是用来管理堆的,而垃圾回收器的算法又与JVM的响应时间和吞吐量密切相关,可以说堆是JVM中最重要的一块内存区。...直接内存的分配不会受到Java堆大小的限制,但是,既然是内存,则肯定还是会受到本机总内存(包括物理内存、SWAP分区或者分页文件)大小以及处理器寻址空间的限制,一般服务器管理员配置虚拟机参数时,会根据实际内存去设置

90400

JVM 内存结构

Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分为若干个不同的数据区域。 ? 这些区域中,一些是线程私有的,一些是线程共享的。...线程私有的:程序计数器、虚拟机栈、本地方法栈 线程共享的:堆、方法区、直接内存 1、程序计数器 一块较小的内存空间,用于标记当前线程所执行字节码的行号。...所有实例和数组都在这里分配内存,也是线程共享的内存区域。 -Xms 设置最小值;-Xmx 设置最大值。 堆内存分配会另写一篇文章介绍。...6、直接内存 直接内存并不是虚拟机内存的一部分,也不是 Java 虚拟机规范中定义的内存区域。...jdk1.4 中新加入的 NIO,引入了通道与缓冲区的 IO 方式,它可以调用 Native 方法直接分配堆外内存,这个堆外内存就是本机内存,不会影响到堆内存的大小。

46220
领券