jvm中的内存设置

在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。

PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。

GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误

Java Heap分为3个区
1.Young
2.Old
3.Permanent

Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。

JVM的Heap分配可以使用-X参数设定,

-Xms
初始Heap大小

-Xmx
java heap最大值

-Xmn
young generation的heap大小

JVM有2个GC线程
第一个线程负责回收Heap的Young区
第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区

Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
为什么一些程序频繁发生GC?

有如下原因:
1.程序内调用了System.gc()或Runtime.gc()。
2.一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
3.Java的Heap太小,一般默认的Heap值都很小。
4.频繁实例化对象,Release对象 此时尽量保存并重用对象,例如使用StringBuffer()和String()。

如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态,许多Server端的Java程序每次GC后最好能有65%的剩余空间

经验之谈:

1.Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3。
2.一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

注意:

1.增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也就是GC期间,Java应用程序不做任何工作。
2.Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

Stack的设定
每个线程都有他自己的Stack。

-Xss
每个线程的Stack大小

Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。

硬件环境

硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用。

4种GC

1、第一种为单线程GC,也是默认的GC,该GC适用于单CPU机器。
2、第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
3、第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
4、第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。

单文件的JVM内存进行设置

默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。
设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。
java -Xms64m -Xmx256m Test
-Xms是设置内存初始化的大小
-Xmx是设置最大能够使用内存的大小(最好不要超过物理内存大小)

tomcat启动jvm内存设置

Linux:

在/usr/local/apache-tomcat-5.5.23/bin目录下的catalina.sh添加:JAVA_OPTS='-Xms512m -Xmx1024m'要加“m”说明是MB,否则就是KB了,在启动tomcat时会报内存不足。
-Xms:初始值
-Xmx:最大值
-Xmn:最小值Windows
在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m 如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.解决办法:

修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions

原值为

-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs加入 -Xms300m -Xmx350m

重起tomcat服务,设置生效

weblogic启动jvm内存设置

在weblogic中,可以在startweblogic.cmd中对每个domain虚拟内存的大小进行设置,默认的设置是在commEnv.cmd里面。

JBoss

默认可以使用的内存为64MB
$JBOSSDIR$/bin/run.config
JAVA_OPTS = "-server -Xms128 -Xmx512"

Eclipse

在所在目录下,键入
eclipse.exe -vmargs -Xms256m -Xmx512m
256m表示JVM堆内存最小值
512m表示JVM堆内存最大

Websphere

进入控制台去设置:应用程序服务器 > server1 > 进程定义 > Java 虚拟机
系统学习es安装过程中的JVM内存设置 深入讲解es安装过程中JVM内存的合理设置方法,帮助用户避免常见性能问题。结合实际场景说明参数调优技巧,提升系统稳定性与搜索效率。 阅读详情

相关推荐

群晖NAS实战:Python项目部署全流程解析

本文详细解析了在群晖NAS上部署Python项目的完整流程。从开启SSH、选择连接工具,到通过套件中心一键安装Python3、配置pip及国内镜像源,再到上传项目、安装依赖、后台运行及排错,提供了清晰的避坑指南。旨在帮助用户将群晖NAS从存储设备转变为可执行自定义任务的智能服务器,实现自动化脚本、数据监控等应用。

weixin_29057163的博客 593

IntelliJ IDEA设置JVM运行参数

打开 IDEA 安装目录,看到有一个 bin 目录,其中有两个 vmoptions 文件,需针对不同的JDK进行配置: 32 位:idea.exe.vmoptions 64 位:idea64.exe.vmoptions -Xms512m -Xmx1024m -XX:MaxPermSize=512m -XX:ReservedCodeCacheSize=225m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.u.

keeper42的博客 3383

从零开始搭建水质监测系统:STM32+Lora+4G的物联网应用详解

本文详细介绍了如何从零开始搭建一个基于STM32、LoRa和4G技术的工业级水质监测物联网系统。文章深入剖析了系统架构设计、核心硬件选型(如STM32F103系列MCU)、关键电路接口、嵌入式软件驱动开发、多任务调度以及云端数据集成与可视化的完整实战流程,为智慧农业、环境监测等领域的物联网应用提供了宝贵的“避坑指南”和解决方案。

m0n1o2p的博客 586

Eclipse设置内存大小

本文介绍了三种修改Java程序内存配置的方法:1) 通过修改Eclipse配置文件eclipse.ini中的-Xms和-Xmx参数;2) 在Eclipse的Installed JRE设置中编辑Default VM Arguments;3) 在Run Configurations的VM arguments中设置。文中还提供了查看当前JVM内存信息的Java代码示例。需要注意的是,当同时设置JDK和Run Configurations参数时,Run Configurations的配置会覆盖JDK设置。这三种方法

我的博客 1万+

如何设计一个处理物联网设备数据流的后端系统。

设计一个处理物联网设备数据流的后端系统,需要综合考虑设备数据采集、传输、处理、存储等多个方面,保证系统能够处理海量数据,具备高可用性、扩展性和安全性。合理选择适当的技术架构和工具(如MQTT、Kafka、InfluxDB等),并确保系统能够灵活应对不断变化的业务需求和设备接入。

weixin_53227829的博客 841

Python爬虫实战:巧用HEAD请求和Cookie令牌绕过沃尔玛反爬(附完整代码)

本文详细介绍了如何利用Python爬虫技术,通过HEAD请求和Cookie令牌绕过沃尔玛的反爬机制。文章深入解析了人机验证系统的运作原理,并提供了完整的工程化实现代码,包括令牌池设计、高并发架构和异常处理策略,帮助开发者高效采集电商数据。

weixin_29046035的博客 1014

JVM(java 虚拟机)内存设置

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 一、设置JVM内存设置 1. 设置JVM内存的参数有四个: -XmxJava Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定; -XmsJava Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值; -XmnJava Heap Young区大小,不熟悉最好保留默认值; -Xss每个线程的Stack大小,不熟悉最好保留默认值; 2. 如何设.

m0_67402914的博客 1万+

LSTM预测股票数据---数据预处理

# 导入相应的模块 import pandas as pd import numpy as np import matplotlib.pyplot as plt import tensorflow as tf # 获取训练集 def get_train_data(data,batch_size = 60 ,time_step = 20,train_begin = 0,train_end = 58...

qq_35358021的博客 3360

JVM 调优的参数设置参数值

JVM 提供了丰富的参数设置,允许开发者根据应用的具体需求进行调优。通过合理配置内存管理、垃圾回收和线程等方面的参数,开发者可以显著提升 Java 应用程序的性能和稳定性。设置 JVM 参数的方式多种多样,包括命令行、配置文件、环境变量和集成开发环境等。在实际应用中,了解并灵活应用这些调优参数,是确保 Java 应用程序在不同环境中高效运行的关键。

Flying_Fish_roe的博客 5326

48V电气架构全面科普和解析:下一代智能电动汽车核心驱动

随着电动汽车(EV)技术的不断发展,传统的12V电力系统已经逐渐无法满足日益增长的功率需求,尤其是在电动汽车中,48V电气系统的引入成为了一种理想的解决方案。在电动汽车中,48V系统与Zonal架构的结合,不仅有效提升了车辆电力系统的能效,还为未来的技术升级提供了灵活的设计基础。随着电动汽车(EV)技术的发展,车辆电气系统的工作电压逐步从传统的12V系统向更高的电压过渡。随着电动汽车技术的不断进步,传统的12V电气系统逐渐无法满足现代高性能电动汽车的需求,而48V电力系统的引入成为一种理想的解决方案。

weixin_43199439的博客 7824

NoC架构深度解析:从拓扑结构到流量控制的全面指南

本文深入解析了片上网络(NoC)架构,从总线架构的瓶颈出发,阐述了NoC作为芯片内部“交通网”的核心优势。文章详细探讨了主流拓扑结构(如Mesh、Torus、Ring)的选型权衡,并系统介绍了数据包格式、路由算法、路由器流水线、流量控制机制以及网络接口(NI)设计,为理解现代多核SoC的通信基石提供了全面指南。

gg901的博客 1042

JVM 中的内存如何分配及相应的命令设置

JVM 中的内存如何分配及相应的命令设置

timchen525的专栏 4497

麒麟和UOS系统编写桌面点击可执行文件

在桌面上创建一个快捷方式(.desktop 文件)来运行脚本。打开文本编辑器,创建一个新文件,如。这可以通过文本编辑器来完成。首先,确保您的脚本具有执行权限。现在,您应该可以双击桌面上的。保存此文件到桌面目录,例如,在桌面上创建一个快捷方式(文件来运行您的脚本了。使用图形界面或命令行给。现在您可以双击桌面上的。为您脚本的实际路径。是您脚本的实际路径。文件来运行您的脚本了。

u013934107的博客 7255

docker 设置 jvm 内存_减少Docker和Kubernetes中的JVM内存占用

前言本文记录了如何在 Kubernetes[1] 上减小 JVM 应用容器占用的内存:哪些 JVM 标记更重要,如何正确设置以及如何测量参数对应用内存占用的影响。故事从一个工作中的问题开始。笔者为 Wix[2] 工作,作为数据流团队的一员负责所有的 Kafka[3] 基础设施。最近安排的任务是为 Node.js[4] 服务建立一个 Kafka 客户端代理。0 问题:Kafka 客户端 sideca...

weixin_39603537的博客 387

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

JVM中的内存设置详解

一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。 PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。 GC(Garbage Colle

草原孤狼的专栏 634

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

docker 设置 jvm 内存_减少 Docker 和 Kubernetes 中的 JVM 内存占用

(给ImportNew加星标,提高Java技能)编译:覃佑桦suo.im/6wP5i7本文记录了如何在 Kubernetes 上减小 JVM 应用容器占用的内存:哪些 JVM 标记更重要,如何正确设置以及如何测量参数对应用内存占用的影响。故事从一个工作中的问题开始。笔者为 Wix 工作,作为数据流团队的一员负责所有的 Kafka基础设施。最近安排的任务是为 Node.js 服务建立一个 ...

weixin_39640444的博客 295

Java虚拟机(JVM)中的内存设置详解

Java虚拟机(JVM)中的内存设置详解 本文向您介绍在Java虚拟机,即JVM中如何设置内存,达到良好的GC效率。 AD: 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。 PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于...

snowme103的专栏 139

docker设置jvm参数_减少 Docker 和 Kubernetes 中的 JVM 内存占用

(给ImportNew加星标,提高Java技能)编译:覃佑桦suo.im/6wP5i7本文记录了如何在 Kubernetes 上减小 JVM 应用容器占用的内存:哪些 JVM 标记更重要,如何正确设置以及如何测量参数对应用内存占用的影响。故事从一个工作中的问题开始。笔者为 Wix 工作,作为数据流团队的一员负责所有的 Kafka基础设施。最近安排的任务是为 Node.js 服务建立一个 ...

weixin_39960147的博客 463

Java虚拟机(JVM)中的内存设置详解教程

Java虚拟机(JVM)中的内存设置详解教程

dongpf的专栏 1011
上一篇: eclipse.ini 配置说明
下一篇: oracle中的正则表达式
「已注销」
博客等级 码龄20年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值