堆参数调优

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. arcgis_SDE安装步骤

    弄了将近一个星期的Oracle和ArcSDE终于让我给弄好了!下面把过程跟大家分享一下: 首先是Oracle10gR2的安装,在Oracle的官方网站上可以下到Oracle10gR2的安装程序,安装过 ...

  2. gdufe1534-小小怪一定认真听课-dfs

    Problem Description: 又到了选课的时间啦.大一萌新小小怪下士第一次选课没有制定好高效的策略,导致第一学期的学分不高,他想在第二学期获得尽可能多的学分,因此作为小小怪下士的上司搭档兼 ...

  3. 安装 Java Cryptography Extension (JCE) Unlimited Strength

    http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html cp ./* /usr/java/ ...

  4. support:design:26.1.0

    https://blog.csdn.net/qzltqdf3179103/article/details/79583491 compileSdkVersion 26buildToolsVersion ...

  5. SpringBoot 热启动

    在开发过程中,当写完一个功能我们需要运行应用程序测试,可能这个小功能中存在多个小bug,我们需要改正后重启服务器,这无形之中拖慢了开发的速度增加了开发时间,SpringBoot提供了spring-bo ...

  6. Linq to sql 之 ExecuteQuery 错误:指定的转换无效

    问题:通过dbContext.ExecuteQuery 得到数据并赋值给一个集合. 代码: public IEnumerable<LeaveCodeSum> GetLeavTotal(st ...

  7. cloudera cdh5.13.0 vmware 快速安装

    1. 从官网上载VMWARE VM快速安装包 https://www.cloudera.com/downloads/quickstart_vms/5-12.html 2. 下载后的安装包,解压之后得到 ...

  8. JAVA 关于JNI本地库加载

    1.调用JNI的时候,通常我们使用System.loadLibrary(String libname)来load JNI library, 同样也可以使用System.load(String file ...

  9. 虚拟机VM下CentOS7部署WASND9+HTTP9

    本地操作系统:WIN10(64位) 虚拟机:14.1.1 build-7528167 安装环境:CentOS7 64 软件版本:IM 1.8  WAS 9.0+HTTP9.0 一.安装CentOS7 ...

  10. Attention Please

    关于BJJ与Matlab的学习时间安排在五六日晚间: 其余一切重心在学术!