堆参数调优

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. hdu2973-YAPTCHA-(欧拉筛+威尔逊定理+前缀和)

    YAPTCHA Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. Linux安装face_recgnition

    Ubuntu 3:apt-get install python3.6-dev 4:pip3 install face_recgnition 5:  pip3 install opencv-python ...

  3. html----h1-6标签

    Html的标题标签h1-h6种选择,从大到小:默认上下margin一样,靠左,不好改变:能用定位改变. 1.<h1></h1> display:block; font-size ...

  4. 目前为止最全的微信小程序项目实例

    https://blog.csdn.net/zuoliangzhu/article/details/53862576#t1

  5. ssh X协议转发

    X协议的作用是远程登录Linux运行GUI界面 主机2开启ssh服务service ssh start 主机1 ssh连接主机2:ssh -X root@192.168.1.110 -p 53 然后可 ...

  6. MySQL 按指定字段自定义列表排序

    问题描述 大家都知道, mysql 中按某字段升序排列的 SQL 为 (以 id 为例, 下同): SELECT * FROM `MyTable` WHERE `id` IN (1, 7, 3, 5) ...

  7. 基本数据类型(dict)

    05. 基本数据类型(dict)内容:1. 字典的简单介绍2. 字典增删改查和其他操作3. 字典的嵌套⼀. 字典的简单介绍字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对 ...

  8. Dedecms织梦内容页获取当前页面顶级栏目名称方法

    Dedecms织梦做站的时候,需要在当前页面调用顶级栏目名称的时候,织梦默认{dede:field name='typename' /} 可以获取当前栏目页上一级栏目的名称,而不是当前栏目顶级栏目名称 ...

  9. vue, js 正则邮箱验证、匹配非法字符、匹配中文

    验证邮箱 let self = this let regEmail= /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)* ...

  10. 安装scrapy时遇到的问题

    会报错,安装这个试试: pip install cryptography --force-reinstall