JDK8后不会出现PerGen space内存溢出
-server Java虚拟机的运行模式 多cpu是性能更好的发挥
java heap 初始化大小 默认为物理内存的64分之一,最大不能超过物理内存的80%
java heap 最大值.建议设置为物理内存一半
Metaspacesize 初始元数据空间
MaxMetaspaceSize 最大元数据空间,默认无上限,
堆(heap) 设置越大gc回收时间越慢反之回头快但是垃圾回收频率高
XMS 初始内存
XMX 最大内存
OutOfMemoryError: Java heap space: 堆内存溢出
OutOfMemoryError: PermGen space: 静态内存溢出
StackOverflowError: 栈内存溢出
堆内存:new 出来的对象
栈内存: 局部变量
静态内存区; class
1.修改内存的目的
日常开发中,开发项目比较大的时候依赖的jar包比较多,并且在应用服务器启动的时候,会将项目引用的所有的类依次全部加载到内存当中,java的逻辑内存模式分为
堆内存(存储类的实例,数组、引用数据类型也就是用new生成的对象)、
栈内存(存储局部变量比如方法参数)、
静态内存区(持久区,该区内存不会被gc回收,存常量、静态变量、类的源数据:方法、属性什么的)
2.在开发当中经常遇到的内存溢出的异常
OutOfMemoryErroe:Java heap space异常------>堆内存满了
JVM中堆内存的大小默认使用的最小内存是我们物理内存的1/64,最大的使用我们物理内存的1/4,我们通过调整JVM中的初始内存和最大内存来改变我们使用内存的限制
OutOfMemoryError:PermGen space异常-------->静态内存区满了
通常是因为加载的类太多导致的,jdk8以下的需要修改两个参数限制静态区最小和最大内存范围,,jdk8改变了内存模型,将类定义存放到了源数据空间,而源数据空间与堆内存共享的是同一块内存区域,所以在jdk8版本以后就不会再出现PermGen space异常了。
StackOverflowError异常---------->栈内存溢出
通常是由于死循环或无线递归导致的
3.配置内存参数
网上有两种方式,一种是在start.bat,一种是在catalina.bat中
bin/catalina编辑:配到第2行/192行都行
JAVA_OPTS=“-server -Xms512m -Xmx1024m
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m ”
说明:server:是指虚拟机的运行模式,配置为server时,在使用多个CPU时,性能可以得到更好的发挥
-Xms:java heap初始大小 ,默认为物理内存的1/64,最大不要超过物理内存的80%,也叫堆内存
-Xmx:java heap的最大值,建议设置为物理内存的一半,不要超过实际的物理内存
MetaspaceSize:初始源空间的值,默认21m,
MaxMetaspaceSize:最大源空间的值,默认无上限
虚拟机的堆大小决定了虚拟机花费在数据垃圾上的时间和频率,调整虚拟机的堆大小目的是最小化垃圾回收的时间,一般用物理内存的80%作为堆内存的大小
虚拟机配置
catalina中设置(E:\tomcats\tomcat-8\bin\catalina.bat第二行加入以下代码)
JAVA_OPTS="-server -Xms=256m -Xmx512m -XX:metaspace=128m -XX:MaxMetaspaceSize=256m"
参数说明
server -- 虚拟机运行模式,多个cpu可以更好发挥
Xms256m -- java heap初始大小,默认物理内存1/64,最大不超过80%,堆内存
Xmx512m -- java heap最大值,默认物理内存1/64,建议为一半,堆内存
metaspace -- 初始源空间大小
MaxMetaspaceSize -- 最大源空间大小
1.修改内存的目的
日常开发中,开发项目比较大的时候依赖的jar包比较多,并且在应用服务器启动的时候,会将项目引用的所有的类依次全部加载到内存当中,java的逻辑内存模式分为
堆内存(存储类的实例,数组、引用数据类型也就是用new生成的对象)、
栈内存(存储局部变量比如方法参数)、
静态内存区(持久区,该区内存不会被gc回收,存常量、静态变量、类的源数据:方法、属性什么的)
2.在开发当中经常遇到的内存溢出的异常
OutOfMemoryErroe:Java heap space异常------>堆内存满了
JVM中堆内存的大小默认使用的最小内存是我们物理内存的1/64,最大的使用我们物理内存的1/4,我们通过调整JVM中的初始内存和最大内存来改变我们使用内存的限制
OutOfMemoryError:PermGen space异常-------->静态内存区满了
通常是因为加载的类太多导致的,jdk8以下的需要修改两个参数限制静态区最小和最大内存范围,,jdk8改变了内存模型,将类定义存放到了源数据空间,而源数据空间与堆内存共享的是同一块内存区域,所以在jdk8版本以后就不会再出现PermGen space异常了。
StackOverflowError异常---------->栈内存溢出
通常是由于死循环或无线递归导致的
3.配置内存参数
网上有两种方式,一种是在start.bat,一种是在catalina.bat中
bin/catalina编辑:配到第2行/192行都行
JAVA_OPTS=“-server -Xms512m -Xmx1024m
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m ”
-Xms:java heap初始大小 ,默认为物理内存的1/64,最大不要超过物理内存的80%
-Xmx:java heap的最大值,建议设置为物理内存的一半,不要超过实际的物理内存
MetaspaceSize:初始源空间的值,默认21m,
MetaspaceSize:最大源空间的值,默认无上限
虚拟机的堆大小决定了虚拟机花费在数据垃圾上的时间和频率,调整虚拟机的堆大小目的是最小化垃圾回收的时间,一般用物理内存的80%作为堆内存的大小
catalina中设置(E:\tomcats\tomcat-8\bin\catalina.bat第二行加入以下代码)
JAVA_OPTS="-server -Xms=256m -Xmx512m -XX:metaspace=128m -XX:MaxMetaspaceSize=256m"
分配JVM内存
catalina中设置,或在startup中配置
JAVA_OPTS="-server -Xms=256 -Xmx512m -XX:metaspace=128m -XX:MaxMetaspaceSize=256m"
set JAVA_OPTS="-server -Xms256m -Xmx512m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
1.修改内存的目的
日常开发中,开发项目比较大的时候依赖的jar包比较多,并且在应用服务器启动的时候,会将项目引用的所有的类依次全部加载到内存当中,java的逻辑内存模式分为
堆内存(存储类的实例,数组、引用数据类型也就是用new生成的对象)、
栈内存(存储局部变量比如方法参数)、
静态内存区(持久区,该区内存不会被gc回收,存常量、静态变量、类的源数据:方法、属性什么的)
2.在开发当中经常遇到的内存溢出的异常
OutOfMemoryErroe:Java heap space异常------>堆内存满了
JVM中堆内存的大小默认使用的最小内存是我们物理内存的1/64,最大的使用我们物理内存的1/4,我们通过调整JVM中的初始内存和最大内存来改变我们使用内存的限制
OutOfMemoryError:PermGen space异常-------->静态内存区满了
通常是因为加载的类太多导致的,jdk8以下的需要修改两个参数限制静态区最小和最大内存范围,,jdk8改变了内存模型,将类定义存放到了源数据空间,而源数据空间与堆内存共享的是同一块内存区域,所以在jdk8版本以后就不会再出现PermGen space异常了。
StackOverflowError异常---------->栈内存溢出
通常是由于死循环或无线递归导致的
3.配置内存参数
网上有两种方式,一种是在start.bat,一种是在catalina.bat中
bin/catalina编辑:配到第2行/192行都行
JAVA_OPTS=“-server -Xms512m -Xmx1024m
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m ”
-Xms:java heap初始大小 ,默认为物理内存的1/64,最大不要超过物理内存的80%
-Xmx:java heap的最大值,建议设置为物理内存的一半,不要超过实际的物理内存
MetaspaceSize:初始源空间的值,默认21m,
MetaspaceSize:最大源空间的值,默认无上限
虚拟机的堆大小决定了虚拟机花费在数据垃圾上的时间和频率,调整虚拟机的堆大小目的是最小化垃圾回收的时间,一般用物理内存的80%作为堆内存的大小
配置内存(在tomcat/bin/catalina.bat或者catalina.sh文件里面修改)
set JAVA_OPTS="-server -Xms256m -Xmx512m
-XX:MetaspaceSize=128m
-XX:MaxMetaspaceSize=256m
内存溢出
1、OutOfMemoryError:Java heap space异常
2、OutOfMemoryError:PermGen space异常
3、StackOverflowError
内存溢出
1、OutOfMemoryError:Java heap space异常
2、OutOfMemoryError:PermGen space异常
Java的内存模型
tomcat修改内存:
(1)内存分为:堆内存、栈内存、静态内存区
1>堆内存:主要用于存取类的实例、数组等引用数据类型(用new生成的对象)。
2>栈内存:存取一些局部变量。比如方法参数。
3>静态内存区:即持久区,该区内存不会被gc回收。 存取一些常量,静态变量,类的源数据;比如方法啊,属性啊。
(2)内存溢出异常:
1>java heap space异常:表示堆内存满了。原因:程序bug或引用的jar比较多。jvm默认的堆内存最小是物理内存的六十四分之一,最大是物理内存的四分之一。解决方法:通过调整虚拟机的初始内存和最大内存来加大内存使用限制。
2>PermGen space:静态内存区满了,原因:加载的类太多,jdk8以下版本需要设置静态内存区最大和最小值,jdk8以后版本就不存在该异常。
3>StackOverflowError异常:栈内存溢出,原因:死循环或无限递归导致。
JVM 堆内存默认最小内存为物理内存的1/64 ,最大为物理内存的1/4.
即如8G内存,则最小内存为 128M,最大2048M
JAVA_OPTS="-server -Xms256m -Xms512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m"
修改tomcat内存有两种方式:
修改bin目录下的catalina.bat;
修改bin目录下的startup.bat
jvm默认的最小内存为机器物理内存的1/64,
最大内存为机器物理内幕才能的1/4
1/64 1/4
Xms:java heap初始内存
Xmx:java heap最大内存
内存模型:堆内存、栈内存、静态内存区
tomcat参数的配置
修改内存
为什么要修改Tomcat内存?
日常开发中,开发项目比较大的时候依赖的jar包比较多,并且在应用服务器启动的时候,会将项目引用的所有的类依次全部加载到内存当中,java的逻辑内存模式分为堆内存(存储类的实例,数组、引用类型也就是用new生成的对象)、栈内存(存储局部变量比如方法参数)、静态内存区(持久区,该区内存不会被gc回收,存常量、静态变量、类的源数据:方法属性什么的)
在开发当中经常遇到的内存溢出的异常
OutOfMemoryErroe:Java heap space异常------>堆内存满了
JVM中堆内存的大小默认使用的最小内存是我们物理内存的1/64,最大的使用我们物理内存的1/4,我们通过调整JVM中的初始内存和最大内存来改变我们使用内存的限制
OutOfMemoryError:PermGen space异常
表示静态内存区满了,通常是因为加载的类太多导致的,jdk8以下的需要修改两个参数限制静态区最小和最大内存范围,,jdk8改变了内存模型,将类定义存放到了源数据空间,而源数据空间与堆内存共享的是同一块内存区域,所以在jdk8版本以后就不会再出现PermGen space异常了。
StackOverflowError异常
栈内存溢出:通常是由于死循环或无线递归导致的
配置内存参数
网上有两种方式,一种是在start.bat,一种是在catalina中
bin/catalina编辑:配到第2行/192行都行
JAVA_OPTS=“-server -Xms512m -Xmx1024m
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m ”
-Xms:java heap初始大小 ,默认为物理内存的1/64,最大不要超过物理内存的80%
-Xmx:java heap的最大值,建议设置为物理内存的一半,不要超过实际的物理内存
MetaspaceSize:初始源空间的值,默认21m,
MetaspaceSize:最大源空间的值,默认无上限
虚拟机的堆大小决定了虚拟机花费在数据垃圾上的时间和频率,调整虚拟机的堆大小目的是最小化垃圾回收的时间,一般用物理内存的80%作为堆内存的大小
1、内存问题:
内存溢出
JAVA_OPTS="-server -Xms256m -Xmx512m -XX:MetaspaceSize = 128m -XX:MaxMetaspaceSize = 256m"
OutOfMemoryError:Java head space异常
原因:堆内存满
OutOfMemoryError : PermGen space异常
原因:静态内存区满,加载的类太多
StackOverflowError异常
原因:栈内存溢出,死循环或无限递归导致