JVM 堆参数调优 (四)
堆参数调优
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 堆参数调优 (四)的更多相关文章
- JVM:参数调优
JVM:参数调优 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 前言 查看 JVM 系统默认值:使用 jps 和 jinfo 进行查看 -Xms:初始堆空间 - ...
- JVM性能参数调优实践,不会执行Full GC,网站无停滞
原文来自:http://bbs.csdn.net/topics/310110257 本文只做整理记录,供个人学习. 1 JVM参数调优是个很头痛的问题,设置的不好,JVM不断执行Full GC,导致整 ...
- JVM堆内存调优
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为操作 ...
- JVM基础和调优(四)
垃圾回收算法中的一些问题 再上一遍中,说道JVM并不是采用一种垃圾回收的方法,因为不同的内存块采取的方法是不样的,那么:为什么要分块?为什么不采用同一种方法回收垃圾,这样不是更加的统一吗? 分块的垃圾 ...
- jvm启动参数调优
1.背景 eclipse启动了一个项目,用了15分钟,我佛了,在家办公也懒得弄一直没管,好嘛,越用越气,越来越慢,现在启动一次要半小时了,气不气,然后下定决心调优一下. 2.知识库(自认为调优重要的几 ...
- JVM参数调优:Eclipse启动实践
本文主要参考自<深入理解 Java 虚拟机>.这本书是国人写的难得的不是照搬代码注释的且不是废话连篇的技术书,内容涵盖了 Java 从源码到字节码到执行的整个过程,包括了 JVM(Java ...
- JVM内存结构、参数调优和内存泄露分析
1. JVM内存区域和参数配置 1.1 JVM内存结构 Java堆(Heap) Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都 ...
- JVM参数调优
JVM参数调优 JVM参数调优是一个很头痛的问题,可能和应用有关系,下面是本人一些调优的实践经验,希望对读者能有帮助,环境LinuxAS4,resin2.1.17,JDK6.0,2CPU,4G内存,d ...
- (转)JVM参数调优八大技巧
这里和大家分享一下JVM参数调优的八条经验,JVM参数调优,这是很头痛的问题,设置的不好,JVM不断执行FullGC,导致整个系统变得很慢,网站停滞时间能达10秒以上,相信通过本文的学习你对JVM参数 ...
随机推荐
- C# 递归获取 文件夹的 所有文件
public void Director(string dir, List<string> list) { DirectoryInfo d = new DirectoryInfo(dir) ...
- vue组件知识点
1.组件的定义 const component = { props: { //外部父组件约束子组件的 里面不要修改 可以通过触发事件来修改 active: Boolean, propOne: Stri ...
- SPSS-因子分析
因子分析 有可能用较少的综合指标分析存在于各变量中的各类信息,而各综合指标之间彼此是不相关的,代表各类信息的综合指标称为因子.定义:因子分析就是用少数几个因子来描述许多指标或因素之间的联系,以较少几个 ...
- MySql数据库常用语句汇总
第一天1.登陆数据库 mysql -uroot -proot; //-u用户名 -p密码2.启动数据库 net start mysql;3.创建表空间(数据库)create database qy97 ...
- async.series
[async.series] series适用于顺序执行异步且前后无关联的调用.对于顺序执行异步且前后有叛逆的调用,则需要使用waterfall. If any functions in the se ...
- PHP ActiveRecord demo栗子中 关于类名 的问题
问题: ActiveRecord如何将单个类名与表名相关联? 我昨天才发现了ActiveRecord,很奇妙的php数据库框架. 但是,我仍然对以下工作感到困惑: 1.下面这个Person Model ...
- SML + NL + HJ
Join是一种试图将两个表结合在一起的谓词,一次只能连接2个表,表连接也可以被称为表关联.在后面的叙述中,我们将会使用”row source”来代替”表”,因为使用row source更严谨一些,并且 ...
- linux安装redis及主从复制、读写分离、哨兵模式
Redis安装与部署 版本最好选择3.0及以上.以后还可以部署Redis集群. 1.下载: [root@bogon redis-3.0.0]# cd /usr/local [root@bogon lo ...
- Flask中路由系统、Flask的参数及app的配置
@app.route('/', methods=['GET', 'POST']) 1. @app.route()装饰器中的参数 methods:当前URL地址,允许访问的请求方式 @app.route ...
- pd.concat()命令
这个生成dataframe函数还是蛮有意思的.