Java虚拟机五 堆的参数配置
堆空间是Java进程的重要组成部分,几乎所有的应用相关的内存空间都和堆有关。
1.最大堆和初始堆的设置
当Java程序启动时,虚拟机就会分配一块初始堆空间,使用参数 -Xms 指定这块空间的大小。一般来说,虚拟机尽可能维持初始堆空间的范围内运行。如果初始堆空间耗尽会进行扩展。最大堆空间使用参数 -Xmx指定。
在实际工作中,可以直接将初始堆 -Xms 与最大堆 -Xmx 设置相等。这样的好处是可以减少程序运行时进行的垃圾回收次数,从而提高程序的性能。
新生代的配置
参数 -Xmn 可以用于设置新生代的大小。设置一个较大的新生代会减小老年代的大小,这个参数对系统性能以及GC行为影响较大。新生代的大小一般设置为整个堆空间的1/3到1/4。
参数 -XX:SurvivorRatio 用来设置新生代中 eden空间和from/to空间的比例关系,含义如下:
--X:SurvivorRatio=eden/from=eden/to
这段代码连续向系统请求10MB空间,每次申请1MB
[GC (Allocation Failure) [PSYoungGen: 512K->488K(1024K)] 512K->512K(19968K), 0.0008869 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
PSYoungGen total 1024K, used 860K [0x00000000ffe80000, 0x0000000100000000, 0x0000000100000000)
eden space 512K, % used [0x00000000ffe80000,0x00000000ffedd2f8,0x00000000fff00000)
from space 512K, % used [0x00000000fff00000,0x00000000fff7a020,0x00000000fff80000)
to space 512K, % used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
ParOldGen total 18944K, used 10264K [0x00000000fec00000, 0x00000000ffe80000, 0x00000000ffe80000)
object space 18944K, % used [0x00000000fec00000,0x00000000ff6060a0,0x00000000ffe80000)
Metaspace used 2666K, capacity 4486K, committed 4864K, reserved 1056768K
class space used 286K, capacity 386K, committed 512K, reserved 1048576K
Java HotSpot(TM) 64-Bit Server VM warning: NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.
这里eden与from的比值为2比1,故eden区为512kb。这里使用的jdk1.8最后提示:NewSize (1536k) is greater than the MaxNewSize (1024k). A new max generation size of 1536k will be used.
超过了设定的1M
由于eden区无法容纳任何一个程序分配的1MB数组,故触发了一次新生代GC,对eden区进行了部分回收,同时,这个偏小的新生代无法为1MB数组预留空间,所以所有的都分配在老年代,老年代最终占用10264KB空间。
在实际工作中,应该根据系统的特点做合理的设置,基本策略是:尽可能将对象预留在新生代,减少老年代GC的次数。
除了可以使用-Xmn指定新生代的绝对大小外,还可以使用 -XX:NewRatio 来设置新生代和老年代的比例。 -XX:NewRatio=老年代 / 新生代
Java虚拟机五 堆的参数配置的更多相关文章
- 了解java虚拟机—非堆相关参数设置(4)
非堆内存相关配置 -XX:PermSize 永久区初始大小 -XX:MaxPermSize 永久区最大大小 在JDK1.8中使用-XX:MxMetaspaceSize配置永久区最大大小 -Xss 线程 ...
- 实战Java虚拟机之一“堆溢出处理”
从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四 ...
- 如何设置Java虚拟机JVM启动内存参数
Tomcat默认的Java虚拟机JVM启动内存参数大约只有64MB或者128MB,非常小,远远没有利用现在服务器的强大内存,所以要设置Java虚拟机JVM启动内存参数.具体设置方法为: Tomcat修 ...
- Java虚拟机详解----常用JVM配置参数
本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技能,它只是一些人为确定的规则,没有太多 ...
- 【转】Java虚拟机详解----常用JVM配置参数
原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html 本文主要内容: Trace跟踪参数 堆的分配参数 栈的分配参数 零.在IDE的后台打印GC日志: ...
- 【java虚拟机】常用的jvm配置参数
转自:https://www.cnblogs.com/pony1223/p/8661219.html 零.在IDE的后台打印GC日志: 既然学习JVM,阅读GC日志是处理Java虚拟机内存问题的基础技 ...
- Java虚拟机六 堆溢出的处理
在Java程序中,如果堆空间不足,有可能抛出内存溢出错误:Out Of Memory,简称OOM. Exception in thread "main" java.lang.Out ...
- 2019/05/11 JAVA虚拟机原理堆、栈、方法区概念区别
Java堆 堆内存用于存放由new创建的对象和数组.在堆中分配的内存,由java虚拟机自动垃圾回收器来管理.在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对 ...
- java虚拟机的堆内存配置
官网文档地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html 接录如下: -XX:MaxHeapSize=si ...
随机推荐
- 如何使用 URLOpenStream 函数
URLOpenStream 和 URLDownloadToFile 类似, 都是下载文件的 COM 函数; 前者是下载到 IStream 流, 后者是直接下载到指定路径; 不如后者使用方便. 它们都声 ...
- Node.js之exports与module.exports
每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {} module.exports = {}; Node.js为了方 ...
- scala中获取Map中key和value的方法
val scores=Map("Alice"->10,"Bob"->3,"Cindy"->8) // 获取所有的key v ...
- 教你ABBYY FineReader 12添加图像的技巧
ABBYY FineReader 12是一款OCR图片文字识别软件,而且强大的它现在还可使用快速扫描窗口中的快速打开.扫描并保存为图像或任务自动化任务,在没有进行预处理和OCR的ABBYY FineR ...
- JSP输出当前日期
如何在网页中动态交互,输出当前日期? <%@ page language="java" import="java.util.*" contentType= ...
- 06-Linux RPM 命令参数使用详解
rpm 执行安装包二进制包(Binary)以及源代码包(Source)两种.二进制包可以直接安装在计算机中,而源代码包将会由 RPM自动编译.安装.源代码包经常以src.rpm作为后缀名. 常用命令组 ...
- 在Linux上安装jdk,mysql,tomcat的准备工作
准备工作: 因为JDK,TOMCAT,MYSQL的安装过程中需要从网上下载部分支持包才可以继续,所以要提前安装下载好下面四个依赖 yum install glibc.i686 yum -y insta ...
- 8 -- 深入使用Spring -- 2...2 指定Bean的作用域
8.2.2 指定Bean的作用域 当使用XML 配置方式来配置Bean实例时,可以通过scope来指定Bean实例的作用域,没有指定scope属性的Bean实例作用域默认是singleton. 当采用 ...
- ckeditor4.4.6添加代码高亮
研究了很久才发现,在 ckeditor4.4.6中添加代码高亮超级简单啊,下面直接上过程 ckeditor4.4.6支持自定义代码高亮,利用Code Snippet插件并默认启用highlight.j ...
- python3存入redis是bytes
在python3 中使用redis存储数据,存进去的是bytes >>> import redis >>> import time >>> imp ...