堆参数调优

1、堆的结构

JAVA7

  堆逻辑上分为:新生区、养老区、永久区;实际上堆只有新生区、养老区

  Minor GC:轻量的垃圾回收;   Major GC(Full GC):重量级垃圾回收。

  

Java8

  没有永久区了,被元空间取代;

  

2、堆内存调优

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

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

  -XX:+PrintGCDetails:输出详细的GC处理日志;

 (1)使用代码输出实际默认的内存,代码如下:

public class Demo1
{
public static void main(String[] args)
{
long totalMemory = Runtime.getRuntime().totalMemory(); //JVM中的初始内存总量
long maxMemory = Runtime.getRuntime().maxMemory(); //JVM试图使用的最大内存 System.out.println("totalMemory = " + totalMemory + "Byte 、 " +
(totalMemory / (double) 1024 / 1024) + " MB");
System.out.println("MaxMemory = " + maxMemory + " Byte 、 " +
(maxMemory / (double) 1024 / 1024) + " MB");
}
}

  结果如下:(物理内存:12G

  totalMemory = 191365120Byte 、 182.5 MB        // 182.5 * 64 / 1024

  MaxMemory = 2831679488 Byte 、 2700.5 MB   // 2700.5 * 4 / 1024  

     结论:发现默认的情况下分配的内存是总内存的 “1 / 4”、而初始化内存为 “1 / 64”。

(2)在IDEA中设置VM参数:

  VM 参数: -Xms1024M -Xmx1024M -XX:+PrintGCDetails

 运行结果: 

  totalMemory = 1029177344Byte 、 981.5 MB   //1024M

  MaxMemory = 1029177344 Byte 、 981.5 MB

  Heap

  PSYoungGen      total 305664K, used 20971K [0x00000000eab00000, 0x0000000100000000, 0x0000000100000000)

  eden space 262144K, 8% used [0x00000000eab00000,0x00000000ebf7afb8,0x00000000fab00000)

  from space 43520K, 0% used [0x00000000fd580000,0x00000000fd580000,0x0000000100000000)

  to   space 43520K, 0% used [0x00000000fab00000,0x00000000fab00000,0x00000000fd580000)

   ParOldGen       total 699392K, used 0K [0x00000000c0000000, 0x00000000eab00000, 0x00000000eab00000)

  object space 699392K, 0% used [0x00000000c0000000,0x00000000c0000000,0x00000000eab00000)

  Metaspace       used 3516K, capacity 4500K, committed 4864K, reserved 1056768K

  class space    used 389K, capacity 392K, committed 512K, reserved 1048576K

计算堆内存: (305664 + 699392)/ 1024 = 981.5 MB

3、MMO异常的代码:

为了更快的产生OOM,设置如下参数;

        VM 参数: -Xms8M -Xmx8M -XX:+PrintGCDetails

public class Demo2
{
public static void main(String[] args)
{
String str = "hello world";
while(true)
{
str += str + new Random().nextInt(88888888)
+ new Random().nextInt(999999999);
}
}
}
public class Demo1
{
public static void main(String[] args)
{
long totalMemory = Runtime.getRuntime().totalMemory(); //JVM中的初始内存总量
long maxMemory = Runtime.getRuntime().maxMemory(); //JVM试图使用的最大内存 System.out.println("totalMemory = " + totalMemory + "Byte 、 " +
(totalMemory / (double) 1024 / ) + " MB");
System.out.println("MaxMemory = " + maxMemory + " Byte 、 " +
(maxMemory / (double) 1024 / ) + " MB");
}
}

JVM 堆参数调优 (四)的更多相关文章

  1. JVM:参数调优

    JVM:参数调优 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 前言 查看 JVM 系统默认值:使用 jps 和 jinfo 进行查看 -Xms:初始堆空间 - ...

  2. JVM性能参数调优实践,不会执行Full GC,网站无停滞

    原文来自:http://bbs.csdn.net/topics/310110257 本文只做整理记录,供个人学习. 1 JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整 ...

  3. JVM堆内存调优

    堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...

  4. JVM基础和调优(四)

    垃圾回收算法中的一些问题 再上一遍中,说道JVM并不是采用一种垃圾回收的方法,因为不同的内存块采取的方法是不样的,那么:为什么要分块?为什么不采用同一种方法回收垃圾,这样不是更加的统一吗? 分块的垃圾 ...

  5. jvm启动参数调优

    1.背景 eclipse启动了一个项目,用了15分钟,我佛了,在家办公也懒得弄一直没管,好嘛,越用越气,越来越慢,现在启动一次要半小时了,气不气,然后下定决心调优一下. 2.知识库(自认为调优重要的几 ...

  6. JVM参数调优:Eclipse启动实践

    本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...

  7. JVM内存结构、参数调优和内存泄露分析

    1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...

  8. JVM参数调优

    JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...

  9. (转)JVM参数调优八大技巧

    这里和大家分享一下JVM参数调优的八条经验,JVM参数调优,这是很头痛的问题,设置的不好,JVM不断执行FullGC,导致整个系统变得很慢,网站停滞时间能达10秒以上,相信通过本文的学习你对JVM参数 ...

随机推荐

  1. 什么是 BULK INSERT

    MSDN的解释: 在 SQL Server 中以用户指定的格式将数据文件导入到数据库表或视图中. 语法: BULK INSERT [ database_name . [ schema_name ] . ...

  2. C# DataTable to Html

    原地址:忘了 /// <summary> /// DataTable 转换为 Html /// </summary> /// <param name="dt&q ...

  3. Oracle 查询表的字段注释

    SELECT TABLE_NAME, COLUMN_NAME, COMMENTSFROM USER_COL_COMMENTSWHERE TABLE_NAME = 'TB_MENU';

  4. vue组件知识点

    1.组件的定义 const component = { props: { //外部父组件约束子组件的 里面不要修改 可以通过触发事件来修改 active: Boolean, propOne: Stri ...

  5. window上安装 MongoDB 及其 PHP扩展

    window上安装 MongoDB 及其 PHP扩展   工具/原料   window MongoDB MongoDB 方法/步骤     MongoDB 下载 MongoDB提供了可用于32位和64 ...

  6. 2017-2018面向对象程序设计(Java)课程助教工作职责及分工

    2017-2018面向对象程序设计(Java)课程助教工作职责及分工 一.研究生助教团队名单 张光辉,王玉环,牟巧玲,徐进 二.工作职责与要求 1) 针对所指导学习小组学生,批改课程实验作业每周一次, ...

  7. 总是Eqw

    1.投递总是Eqw状态 qstat -j job_ID #Eqw状态的job id qconf -sq all.q |grep host qconf -shgrp @allhosts

  8. HttpClient之EntityUtils对象

    最近在学习安卓并用thinkphp做后台,为了抵抗自己的烂记性,就在这里记录一下当我从tp后台获取到json串传到安卓客户端所用到的一个方法函数. EntityUtils对象是org.apache.h ...

  9. Spring整合EHCache框架

    在Spring中使用缓存可以有效地避免不断地获取相同数据,重复地访问数据库,导致程序性能恶化. 在Spring中已经定义了缓存的CacheManager和Cache接口,只需要实例化便可使用. Spr ...

  10. Spring mvc接收中文参数值乱码(tomcat配置问题)

    问题| 使用java写的接口,中文参数乱码   问题分析| 请求方打印参数日志,中文无问题,tomcat中日志显示接收的参数乱码   实际是tomcat配置问题   解决方法| 在tomcat的配置文 ...