当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

00000007b怎么解决看这里!深入JVM 原理(五)Java堆内存调整参数(调优关键)

堆内存的参数调整

通过之前的分析可以发现,实际上每一块子内存区中都会存在有一部分的可变伸缩区,其基本流程:

如果空间不足,在可变的范围之内扩大内存空间,当一段时间之后发现内存空间没有这么紧张的时候,再将可变空间进行释放。所以在整个调整过程之中:

-Xms:设置初始分配大小,默认为物理内存的“1/64”

-Xmx:最大分配内存,默认为物理内存的“1/4”

在整个堆内存的调整策略之中,有经验的人基本只会调整两个参数:“-Xmx”(最大内存)、“-Xms”(初始化内存)。如果要取得这些内存的整体信息,直接利用Runtime类即可;

Sy(“Max_memory=”+Run().maxMemory()/(double)1024/1024+”M”);

Sy(“Total_memory=”+Run().totalMemory()/(double)1024/1024+”M”);

Max_memory=1820.5M (默认最大内存)

Total_memory=123.0M (初始化内存)

发现默认的情况下分配的内存是总内存的1/4;;而初始化内存为“1/64”;那么也就是说整个内存的可变范围(伸缩区):123.0M ~ 1820.5M 之间,那么现在就可能造成程序性能下降;所以,我最好能让伸缩区的大小为0;即让 Max_memory 和 Total_memory 保持一致;

(java -Xms2G -Xmx2G TestDemo)

Max_memory=1963.0M

Total_memory=1963.0M

那么这个时候就避免了伸缩区的可调策略,从而提升了整个程序的性能;

范例:观察GC的详解日志(java -Xms2G -Xmx2G -XX:+PrintGCDetails TestDemo)

Max_memory=1963.0M

Total_memory=1963.0M

[GC ()) [PSYoungGen: 31488K->608K(611840K)] 31488K->616K(2010112K), 0.0149295 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]

[Full GC ()) [PSYoungGen: 608K->0K(611840K)] [ParOldGen: 8K->490K(1398272K)] 616K->490K(2010112K), [Metaspace: 2791K->2791K(1056768K)], 0.0061879 secs] [Times: user=0.02 sys=0.00, real=0.01 secs]

Heap

PSYoungGen total 611840K, used 5248K [0x0000000795580000, 0x00000007c0000000, 0x00000007c0000000)

eden space 524800K, 1% used [0x0000000795580000,0x0000000795aa0178,0x00000007b5600000)

from space 87040K, 0% used [0x00000007b5600000,0x00000007b5600000,0x00000007bab00000)

to space 87040K, 0% used [0x00000007bab00000,0x00000007bab00000,0x00000007c0000000)

ParOldGen total 1398272K, used 490K [0x0000000740000000, 0x0000000795580000, 0x0000000795580000)

object space 1398272K, 0% used [0x0000000740000000,0x000000074007ab88,0x0000000795580000)

Metaspace used 2798K, capacity 4486K, committed 4864K, reserved 1056768K

class space used 304K, capacity 386K, committed 512K, reserved 1048576K

下面再编写一个代码,观察GC的触发操作:

范例:测试GC处理(请保存内存空间小)(-Xms10M -Xmx10M -XX:+PrintGCDetails)

Random random = new Random();

string string = “213123”;

while (true)

{

string += string + random.nextInt(8888888)+random.nextInt(8888888);

(); //强制产生垃圾

}

}

如果在开发之中,你发现程序执行速度变慢,那么就需要对程序内存进行分析:

可视化工具:jvisualvm (命令行执行此命令) 或 jconsole

命令查看:jmap(jmap -heap PID)

他会将整个内存空间的情况进行取得;即日常开发下可用这两者方法进行查看调整堆内存;

如果不会调内存的话,可直接将-Xms 和 -Xmx 调成一样大小即可。

1.《00000007b怎么解决看这里!深入JVM 原理(五)Java堆内存调整参数(调优关键)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《00000007b怎么解决看这里!深入JVM 原理(五)Java堆内存调整参数(调优关键)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2230709.html

上一篇

如何初始化 删除驱动器看这里!Lust路斯特SO84系列伺服器维修及常见故障维修

下一篇

12306的常用联系人怎么删除看这里!你确定真的会用12306手机客户端?

00000007b怎么解决?总结很全面速看!深入JVM 原理(五)Java堆内存调整参数(调优关键)

00000007b怎么解决?总结很全面速看!深入JVM 原理(五)Java堆内存调整参数(调优关键)

00000007b怎么解决相关介绍,调整堆内存参数 以前的分析表明,实际上每个子内存区都有一部分可变区。基本过程如下: 如果空间不足,则在可变范围内扩展内存空间,如果在一段时间后发现内存空间没有这么紧张,则释放可变空间。 所以在整个调整...

00000007b怎么解决?总结很全面速看!宁波上元教育:什么是并发编程,并发编程的优缺点

00000007b怎么解决?总结很全面速看!宁波上元教育:什么是并发编程,并发编程的优缺点

00000007b怎么解决相关介绍,一直以来,并发编程对新进来的小白来说一直觉得很深刻,所以诞生了,为了提高理解和积累并发编程的认识,想写点什么。(莎士比亚,莎士比亚。) 为什么需要用的并发? 凡事总有好坏两面,之间的trade-off...

00000007b怎么解决看这里!JVM系列(七)运行时数据区(方法区)

00000007b怎么解决看这里!JVM系列(七)运行时数据区(方法区)

00000007b怎么解决相关介绍,1.堆栈、堆栈、方法区域交互 查看是否共享线程。 互动 2.理解方法领域 2.1正式文件 the Java virtual machine has a method area that is shar...

关于00000007b怎么解决,你需要知道这些宁波上元教育:什么是并发编程,并发编程的优缺点

关于00000007b怎么解决,你需要知道这些宁波上元教育:什么是并发编程,并发编程的优缺点

00000007b怎么解决相关介绍,一直以来并发编程对于刚入行的小白来说总是觉得高深莫测,于是乎,就诞生了想写点东西记录下,以提升理解和堆并发编程的认知。为什么需要用的并发? 凡事总有好坏两面,之间的trade-off是什么,也就是说并...

00000007b怎么解决?我来告诉你答案JVM系列(七)运行时数据区(方法区)

00000007b怎么解决?我来告诉你答案JVM系列(七)运行时数据区(方法区)

00000007b怎么解决相关介绍,1. 栈、堆、方法区的交互关系 从线程共享与否的角度来看 交互关系 2. 方法区的理解 2.1 官方文档 The Java Virtual Machine has a method area that...

00000007b怎么解决

00000007b怎么解决

00000007b怎么解决相关介绍,有的友友蓝屏了,不知道怎么办了,下面就是蓝屏错误代码的解释。自己就查看代码解决蓝屏问题。希望对友友们有所帮助。欢迎收藏备用。 0x00000000 作业完成。 0x00000001 不正确的函数。 0...

00000007b怎么解决?终于找到答案了JVM系列(七)运行时数据区(方法区)

00000007b怎么解决?终于找到答案了JVM系列(七)运行时数据区(方法区)

00000007b怎么解决相关介绍,1. 栈、堆、方法区的交互关系 从线程共享与否的角度来看 交互关系 2. 方法区的理解 2.1 官方文档 The Java Virtual Machine has a method area that...

关于00000007b怎么解决,你需要知道这些JVM系列(七)运行时数据区(方法区)

关于00000007b怎么解决,你需要知道这些JVM系列(七)运行时数据区(方法区)

00000007b怎么解决相关介绍,1. 栈、堆、方法区的交互关系 从线程共享与否的角度来看 交互关系 2. 方法区的理解 2.1 官方文档 The Java Virtual Machine has a method area that...