jvm内存模型、常见参数及调优
JVM内存结构:

主要分为:方法区、堆、虚拟机栈、本地方法栈、程序计数器,其中方法区和堆是线程共享的,其他的都是线程隔离的。
方法区:
主要存放类的信息、静态变量、常量、编译后的方法代码,永久代PermGen是方法区的实现,JDK1.8后永久代被移除换成了元空间Metaspace,元空间的本质和永久代类似,都是对方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。元空间大小,理论上取决于32位/64位系统可虚拟的内存大小。
堆:
唯一用途就是用来存放对象实例,根据对象的存活周期划分为新生代和老年代OldGen,两者的默认占比为1:2(即新生代:老年代),其中新生代又可以细化为Eden+From Survivor+To Survivor,默认占比为8:1:1。
虚拟机栈:
描述了Java方法执行的内存模型,每个方法执行时都会创建一个栈帧,每个方法从调用到执行完的过程就对应着一个栈帧在虚拟机中入栈到出栈的过程。栈帧存储着局部变量表、操作数栈、动态链接、方法返回地址等信息。每一个方法从调用到执行完的过程就对应着一个栈帧在虚拟机中入栈到出栈的过程。
本地方法栈:
与虚拟机栈类似,只是虚拟机服务的对象不同而已,虚拟机栈服务的是Java方法,而本地方法栈服务的是本地方法即native方法。
程序计数器:
用于记录每条线程当前所执行到的字节码行号,以便线程切换后能恢复到正确的执行位置。因此每条线程都有独立的程序计数器,且各线程间互不影响。
tomcat调节jvm初始内存大小
windows下tomcat的运行文件为catalina.bat,打开文件,在文件中部找到“rem ----- Execute The Requested Command -----”字样 ,在它后面添加如下内容即可
set "JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%" rem ----- Execute The Requested Command ---------------------------------------
set JAVA_OPTS=%JAVA_OPTS% -server -Xms2048m -Xmx2048m -Xmn512m -XX:PermSize=400m -XX:MaxPermSize=700m
echo Using CATALINA_BASE: "%CATALINA_BASE%"
echo Using CATALINA_HOME2: "%CATALINA_HOME2%"
echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"if ""%1"" == ""debug"" goto use_jdk
echo Using JRE_HOME: "%JRE_HOME%"goto java_dir_displayed
:use_jdk
echo Using JAVA_HOME: "%JAVA_HOME%"
:java_dir_displayed
echo Using CLASSPATH: "%CLASSPATH%"
Eclipse调优:
更改eclipse.ini
做如下更改

当虚拟机进行垃圾回收时会输出GC日志到gc.log,可以将输出的gc.log上传到GC日志在线解析工具https://gceasy.io/进行解析。
常见 JVM 参数说明
堆区:
-Xms 初始堆大小,默认是物理内存的1/64,
-Xmx 最大堆大小,物理内存的1/4,
空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制
因此服务器一般设置-Xms、-Xmx 相等,生产环境建议设为1024m以上
-Xmn 年轻代大小
-XX:NewSize 设置年轻代大小
-XX:MaxNewSize 年轻代最大值
非堆区:
-XX:PermSize 设置持久代(perm gen)初始值(非堆内存初始值),物理内存的1/64
-XX:MaxPermSize 设置持久代最大值(最大非堆内存),物理内存的1/4
与垃圾回收相关的JVM参数:
-XX:-DisableExplicitGC — 让System.gc()不产生任何作用
-XX:+PrintGCDetails — 打印GC的细节
-XX:+PrintGCDateStamps — 打印GC操作的时间戳
-XX:NewRatio — 可以设置老生代和新生代的比例
-XX:PrintTenuringDistribution — 设置每次新生代GC后输出幸存者乐园中对象年龄的分布
-XX:InitialTenuringThreshold / -XX:MaxTenuringThreshold:设置老年代阀值的初始值和最大值
-XX:TargetSurvivorRatio:设置幸存区的目标使用率
jvm内存模型、常见参数及调优的更多相关文章
- 记录JVM内存模型,参数含义和优化
一.JVM内存模型 (图片来自网络) 根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) Perm (永久代) 其中New和Tenured属于堆内存,堆内存会从J ...
- JVM内存模型及参数调优
堆.栈.方法区概念区别 1.堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.根据垃圾回收机制的不同, Java堆有可能拥有不同的结构,最为常见的就是 ...
- JVM 内存模型及垃圾回收
java内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈.堆.方法区.程序计数器.本地方法栈五个部分. 程序计数器:程序计数器是指CPU中的寄存器,它保存的是程序当前执行的指令的地址(也可以说 ...
- JVM内存结构、参数调优和内存泄露分析
1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...
- JVM性能调优(1) —— JVM内存模型和类加载运行机制
一.JVM内存模型 运行一个 Java 应用程序,必须要先安装 JDK 或者 JRE 包.因为 Java 应用在编译后会变成字节码,通过字节码运行在 JVM 中,而 JVM 是 JRE 的核心组成部分 ...
- 【JVM】TroubleShooting之内存溢出异常(OOM)与调优
1. OOM概述 If your application's execution time becomes longer and longer, or if the operating system ...
- JVM性能调优(3) —— 内存分配和垃圾回收调优
前序文章: JVM性能调优(1) -- JVM内存模型和类加载运行机制 JVM性能调优(2) -- 垃圾回收器和回收策略 一.内存调优的目标 新生代的垃圾回收是比较简单的,Eden区满了无法分配新对象 ...
- 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置
VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...
- <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
随机推荐
- JS求数组最大值常用方法
第一种方法: 循环数组 let ary = [1,2,22,3,99,100],maxNum = ary[0] function getMaxNum(ary){ for(let i = 1,len = ...
- 【hdu 1848】Fibonacci again and again
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s) ...
- <QluOJ2018NewCode>约数个数
题目描述 p^q表示p的q次方,正整数M可以分解为M=(p1^a1)*(p2^a2)*(p3^a3)*……*(pn^an)的形式,其中p1,p2……pn为质数(大于1并且只能被1和自身整除的数叫做质数 ...
- Lede定时重拨
系统,计划任务, 0 4 * * * ifup wan 梅林定时重拨: #! /bin/sh #断开拨号连接 killall pppd #延时10秒 #重新拨号 pppd >& &a ...
- C# 获取控制台程序路径
- JMeter Webservice API测试计划
Web Services Web服务被定义为旨在通过网络支持两台机器之间交互的软件系统.它被设计为具有以通常在Web服务描述语言(WSDL)中指定的机器可处理格式描述的接口. 通常,“HTTP”是最常 ...
- 第二阶段:1.流程图:10.visio绘制泳道图
选择跨智能 同时水平 设置好泳道图标题以及泳道名字 泳道位置可以拖拽更换 左侧有一些基本的形状 包括分隔符等等 添加分隔符并填上分隔符上面的阶段名称 左边选择形状界面 然后拖拽使用 同时可以用连接线链 ...
- 【一起学源码-微服务】Nexflix Eureka 源码七:通过单元测试来Debug Eureka注册过程
前言 上一讲eureka client是如何注册的,一直跟到源码发送http请求为止,当时看eureka client注册时如此费尽,光是找一个regiter的地方就找了半天,那么client端发送了 ...
- 【题解】NOIP2017逛公园(DP)
[题解]NOIP2017逛公园(DP) 第一次交挂了27分...我是不是必将惨败了... 考虑这样一种做法,设\(d_i\)表示从该节点到n节点的最短路径,\(dp(i,k)\)表示从\(i\)节点 ...
- h5项目中关于ios手机软键盘导致页面变形的完美解决方案
1.项目背景:vue项目,手机加短信验证码登录: 2.问题: 在ios中input吊起软键盘,输入完成后,收起软件盘,页面不会回弹,导致页面下方出现空白,也就是页面变形: 3.最开始的解决方案是,用i ...