JVM(java 虚拟机)内存设置_jvm 修改注册中心、配置中心地址-程序员宅基地

个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 

一、设置JVM内存设置

1. 设置JVM内存的参数有四个:

-Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设值应该视物理内存大小及计算机内其他内存开销而定;

-Xms   Java Heap初始值,Server端JVM最好将-Xms和-Xmx设为相同值,开发测试机JVM可以保留默认值;

-Xmn   Java Heap Young区大小,不熟悉最好保留默认值;

-Xss   每个线程的Stack大小,不熟悉最好保留默认值;

2. 如何设置JVM内存分配:

(1)当在命令提示符下启动并使用JVM时(只对当前运行的类Test生效):

java -Xmx128m -Xms64m -Xmn32m -Xss16m Test

(2)当在集成开发环境下(如eclipse)启动并使用JVM时:

a. 在eclipse根目录下打开eclipse.ini,默认内容为(这里设置的是运行当前开发工具的JVM内存分配):

  1. -vmargs  

  2. -Xms40m  

  3. -Xmx256m 

-vmargs表示以下为虚拟机设置参数,可修改其中的参数值,也可添加-Xmn,-Xss,另外,eclipse.ini内还可以设置非堆内存,如:-XX:PermSize=56m,-XX:MaxPermSize=128m。

此处设置的参数值可以通过以下配置在开发工具的状态栏显示:

在eclipse根目录下创建文件options,文件内容为:org.eclipse.ui/perf/showHeapStatus=true

修改eclipse根目录下的eclipse.ini文件,在开头处添加如下内容:

  1. -debug  

  2. options  

  3. -vm  

  4. javaw.exe 

重新启动eclipse,就可以看到下方状态条多了JVM信息。

b. 打开eclipse-窗口-首选项-Java-已安装的JRE(对在当前开发环境中运行的java程序皆生效)

编辑当前使用的JRE,在缺省VM参数中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

c. 打开eclipse-运行-运行-Java应用程序(只对所设置的java类生效)

选定需设置内存分配的类-自变量,在VM自变量中输入:-Xmx128m -Xms64m -Xmn32m -Xss16m

注:如果在同一开发环境中同时进行了b和c设置,则b设置生效,c设置无效,如:

开发环境的设置为:-Xmx256m,而类Test的设置为:-Xmx128m -Xms64m,则运行Test时生效的设置为:

-Xmx256m -Xms64m

(3)当在服务器环境下(如Tomcat)启动并使用JVM时(对当前服务器环境下所以Java程序生效):

a. 设置环境变量:

变量名:CATALINA_OPTS

变量值:-Xmx128m -Xms64m -Xmn32m -Xss16m

b. 打开Tomcat根目录下的bin文件夹,编辑catalina.bat,将其中的�TALINA_OPTS%(共有四处)替换为:-Xmx128m -Xms64m -Xmn32m -Xss16m

二、查看设置JVM内存信息

Runtime.getRuntime().maxMemory(); //最大可用内存,对应-Xmx

Runtime.getRuntime().freeMemory(); //当前JVM空闲内存

Runtime.getRuntime().totalMemory(); //当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和

关于maxMemory(),freeMemory()和totalMemory():

maxMemory()为JVM的最大可用内存,可通过-Xmx设置,默认值为物理内存的1/4,设值不能高于计算机物理内存;

totalMemory()为当前JVM占用的内存总数,其值相当于当前JVM已使用的内存及freeMemory()的总和,会随着JVM使用内存的增加而增加;

freeMemory()为当前JVM空闲内存,因为JVM只有在需要内存时才占用物理内存使用,所以freeMemory()的值一般情况下都很小,而 JVM实际可用内存并不等于freeMemory(),而应该等于maxMemory()-totalMemory()+freeMemory()。及其 设置JVM内存分配。

官方文档见:

http://docs.sun.com/source/819-0084/pt_tuningjava.html

java启动参数共分为三类;
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;

标准参数中比较有用的:

verbose 
-verbose:class
 
 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。
-verbose:gc 
 输出每次GC的相关情况。
-verbose:jni 
 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。

非标准参数又称为扩展参数

一般用到最多的是

-Xms512m  设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

-Xmx512m ,设置JVM最大可用内存为512M。

-Xmn200m设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

-Xss128k:

设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

 

 

-Xloggc:file
 与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。
 若与verbose命令同时出现在命令行中,则以-Xloggc为准。
-Xprof

 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。

用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了;但是由于这些参数中的确有很多是对我们很有用的,比如我们经常会见到的-XX:PermSize、-XX:MaxPermSize等等;

 

首先来介绍行为参数

上面表格中黑体的三个参数代表着jvm中GC执行的三种方式,即串行、并行、并发
串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿;
并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行;
并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大;

 

性能调优参数列表:

 

我们在日常性能调优中基本上都会用到以上黑体的这几个属性

附Java/C/C++/机器学习/算法与数据结构/前端/安卓/Python/程序员必读/书籍书单大全:

(点击右侧 即可打开个人博客内有干货):技术干货小栈
=====>>①【Java大牛带你入门到进阶之路】<<====
=====>>②【算法数据结构+acm大牛带你入门到进阶之路】<<===
=====>>③【数据库大牛带你入门到进阶之路】<<=====
=====>>④【Web前端大牛带你入门到进阶之路】<<====
=====>>⑤【机器学习和python大牛带你入门到进阶之路】<<====
=====>>⑥【架构师大牛带你入门到进阶之路】<<=====
=====>>⑦【C++大牛带你入门到进阶之路】<<====
=====>>⑧【ios大牛带你入门到进阶之路】<<====
=====>>⑨【Web安全大牛带你入门到进阶之路】<<=====
=====>>⑩【Linux和操作系统大牛带你入门到进阶之路】<<=====

天下没有不劳而获的果实,望各位年轻的朋友,想学技术的朋友,在决心扎入技术道路的路上披荆斩棘,把书弄懂了,再去敲代码,把原理弄懂了,再去实践,将会带给你的人生,你的工作,你的未来一个美梦。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JKX_geek/article/details/104679097

智能推荐

Parasoft C/C++test 2020.2全新发布!将静态分析集成到现代开发流程中_parasoft c++test 静态分析-程序员宅基地

文章浏览阅读733次。对现代静态分析工具的期望我们在客户中经常看到的流行图片是基于Git的开发环境,它具有动态的分支和合并方法。团队希望静态分析能够无缝集成到此类工作流程中。凭借庞大而复杂的代码库,团队希望现代静态分析工具能够:与CI/CD实践紧密结合。 帮助他们专注于日常工作,并提供快速的反馈,而无需长时间拖延。 启用对先前存在问题的过滤,并在功能分支中仅显示新的和相关的违规。 启用有效的抑制/放弃共享和管理。在2020.2版本中,我们引入了ParasoftC/C++test的增强功能集合,使其更适合现代._parasoft c++test 静态分析

从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick_stm32 f103延时函数-程序员宅基地

文章浏览阅读1w次,点赞12次,收藏35次。系列文章目录Github开源地址从头开始写STM32F103C8T6驱动库(一)——STM32CubeMX创建并调整工程结构从头开始写STM32F103C8T6驱动库(二)——编写系统初始化程序,配置时钟树从头开始写STM32F103C8T6驱动库(三)——编写GPIO驱动文章目录系列文章目录前言1.Systick定时器介绍2.Systick定时器使用方法3.编写微秒延时程序(delay_us)4.编写毫秒延时程序(delay_ms)前言上一章我们编写了GPIO驱动函数,但是如果我们想_stm32 f103延时函数

块级元素与内联元素(行内元素)及浮动知识总结_两个行内元素一个变浮动-程序员宅基地

文章浏览阅读4.7k次,点赞8次,收藏13次。块级元素 顾名思义就是以块显示的元素,高度宽度都是可以设置的。比如我们常用的div、p、ul默认状态下都是属于块级元素。块级元素比较霸道,默认状态下每次都占据一整个行,后面的内容也必须再新起一行显示。当然非块级元素也可以通过css的display:block;将其更改成块级元素。此外还有个特殊的,float也具有此功能,设置float后,就不用再display:block;了,浮动后自动就是块元素_两个行内元素一个变浮动

按钮在页面上相对定位排列_el-button位置-程序员宅基地

文章浏览阅读365次。//在父级div上加style="position: relative",代表绝对定位<div class="us-details" style="position: relative"> //在子级div上加style="position: absolute;right:20px;bottom:56px", //其中position: absolute代表相对定位,right:20px;bottom:56px"代表在父级div框架中靠右下排列 <..._el-button位置

批量解压/压缩文件的bat小程序_批量压缩视频.bat源代码-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏16次。批量解压压缩包bat小程序我们做数据分析时,在资源网站下载的数据是压缩包的形式,面对大量的压缩包,一个一个解压显然是没有效率的,这是我们就需要一个批量解压压缩包的工具,在这里提供给大家一个Windows下bat的一个小工具用于批量解压压缩包。::将这个批处理放在目录下运行,将解压缩该目录及其子目录下的所有压缩文件@echo off::假定winrar软件安装于c盘默认目录下,如自定义目录安装,请修改该行set "rar=C:\Windows\System32\WinRAR.exe"::默认对_批量压缩视频.bat源代码

Python对Redis增删改查_python redis.delete用法-程序员宅基地

文章浏览阅读989次。pip install redisimport redis# 连接redis# 几个常用默认参数:# host='localhost', port=6379, db=0, decode_responses=False, password=Nonecon_redis = redis.StrictRedis(decode_responses=True)五大数据类型使用String类型# 增加数据:set key value(如果key存在,则修改为新的va.._python redis.delete用法

随便推点

The program 'java' can be found in the following packages: * default-jre * gcj-5-jre-headless * o-程序员宅基地

文章浏览阅读4.9k次,点赞7次,收藏11次。Ubuntu系统安装jdk的问题,配置环境变量,明明是按照教程来的,然后运行Java -version时一直报以下错误The program 'java' can be found in the following packages: * default-jre * gcj-5-jre-headless * openjdk-8-jre-headless * gcj-4.8-jre-h..._the program 'java' can be found in the following packages: * default-jre * g

ThinkPHP 微信支付及退款_thinkphp 微信退款v2-程序员宅基地

文章浏览阅读454次,点赞3次,收藏3次。目录微信支付微信退款1.以下代码修改完自己的2.appid3.商户号4.商户密钥微信支付 //微信支付 public function index(){ //接收用户下单信息 $data = []; $data['sorts'] = input('sorts');//套餐分类 $data['sciencename']=input('sciencename');//景区名称 $data['price']=input('price');//订单价格 $data['cre_thinkphp 微信退款v2

数据仓库概念的简单理解_sybase power dimension-程序员宅基地

文章浏览阅读5k次。数据仓库概念的简单理解 一个典型的企业数据仓库系统通常包含数据源、数据存储与管理、OLAP服务器以及前端工具与应用四个部分。如下图所示: 数据源:是数据仓库系统的基础,是整个系统的数据源泉。通常包括企业内部信息和外部信息。内部信息包括存放于企业操作型数据库中(通常存放在RDBMS中)的各种业务数据和办公自动化(OA)系统包含的各类文档数据。外部信息包括各类法律_sybase power dimension

MySQL主从同步中 主服务器宕机了如何处理,从服务器宕机如何处理_主从服务器假如主服务器异常-程序员宅基地

文章浏览阅读3.3k次。主库宕机:(1)确保所有的relay log全部更新完毕,在每个从库上执行show processlist(2)更新完毕后,登录所有从库查看master.info文件,对比选择pos最大的作为新的主库,(3)然后登录这个新的主库,执行stop slave;进入主目录,删除master.Info和relay-log.info配置my.cnf文件开启log-bin文件(4)创建用于同步的用户并..._主从服务器假如主服务器异常

常系数齐次线性递推学习-程序员宅基地

文章浏览阅读281次。这是一种对于矩阵快速幂的优化方式因为我很菜不会正常的证明,只能用同学教我的比较清真的证明了我们通过举例来说明,假设有一个递推公式是f[i]=2*f[i-1]+f[i-2];我们考虑把的过程与把递推公式往下化的过程可以发现取模的每一步对应的是把递推公式往下化一层那么再思考一下普遍情况下应该安排对什么取模如果递推公式是那么取模的多项式就应该是那么多项式取模时如果n比较小..._齐次线性递推

emui10.1是鸿蒙系统,华为EMUI10将使用鸿蒙OS微内核,鸿蒙系统离我们很近了-程序员宅基地

文章浏览阅读3.2k次。(文章来源:科技热点观察)华为鸿蒙系统自从曝光到发布直到现在,都非常受各位消费者的关注,主要也是因为它是华为所自主开发出的第一款国产系统,这也就代表着鸿蒙系统的出身是非常高的,之前发布会上余承东的介绍,也让很多消费者震惊了,鸿蒙系统是一款面向未来的物联网系统,可以囊括全部设备,手机平板只是其中的一个终端而已,可见鸿蒙系统的定位是多么领先和高端,远远超出苹果系统和安卓系统。而我们也都知道,华为目前正..._emui10.1是什么系统