jvm内存分配与收回策略

【README】基础知识
1、    Minor GC/新生代GC:指发生在新生代的垃圾收集动作,因为java对象大多都具备朝生夕灭的特性,所以minor gc比较频繁,一般回收速度也比较快;
2、    Major GC/Full GC/老年代GC:发生在老年代的gc,出现了major gc, 经常会伴着出现minor gc(并非绝对)。Major gc的速度一般会比minor gc慢10倍以上; 
 

【1】对象优先在eden区域分配

/*** 对象优先在eden区域分配*/
public class Page93 {private static final int _1MB = 1024 * 1024;public static void main(String[] args) {minorGC(); }/*** vm params: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8*/private static void minorGC() {byte[] allocation1, allocation2, allocation3, allocation4;allocation1 = new byte[2 * _1MB];allocation2 = new byte[2 * _1MB];allocation3 = new byte[2 * _1MB];allocation4 = new byte[4 * _1MB]; }
}
// gc日志和内存区域使用情况 
HeapPSYoungGen      total 9216K, used 7291K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 89% used [0x00000000ff600000,0x00000000ffd1efb0,0x00000000ffe00000)from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)ParOldGen       total 10240K, used 4096K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 40% used [0x00000000fec00000,0x00000000ff000010,0x00000000ff600000)Metaspace       used 2624K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 279K, capacity 386K, committed 512K, reserved 1048576K

1.1、jvm参数分析:

-Xms20M设置java堆容量最小值;

-Xmx20M设置 java堆容量最大值;

-Xmn10M设置java堆新生代容量;(所以java堆老年代容量为20M-10M=10M)

-XX:+PrintGCDetials设置在发生gc时打印内存回收日志,并且在进程退出时输出当前的内存各区域分配情况;

-XX:SurvivorRatio设置Eden:Suivivor: Suivivor = 8:1:1

所以java堆的新生代的可用容量为9M=Eden区+1个Survivor区的总容量;

1.2、PSYoungGen表示其堆新生代的垃圾收集器是Parallel Scavenge(吞吐量+自适应);

总容量=0x0000000100000000-0x00000000ff600000=0xa00000字节=10MB;

已使用容量=7298K;

Eden区容量=8M,已使用量=0x00000000ffd20b48-0x00000000ff600000=0x0000000000720b48(16)=7M+131K

Survivor区容量=1M,使用量=0

Survivor区容量=1M,使用量=0

1.3、ParOldGen标识其堆老年代的垃圾收集器是 Parallel Old(吞吐量优先收集器组合PO+PS);

总容量=0x00000000ff600000-0x00000000fec00000=0xa00000字节=10MB;

已使用量=4M;

 

【2】大对象直接进入老年代

/*** 大对象直接进入老年代*/
public class Page94 {private static final int _1MB = 1024 * 1024;public static void main(String[] args) {testPretenureSizeThreshold(); }/*** vm params: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 -XX:PretenureSizeThreshold=3145728(3M)*/private static void testPretenureSizeThreshold() {byte[] allocation;allocation = new byte[4 * _1MB]; }
}
// gc日志和内存区域使用情况 
HeapPSYoungGen      total 9216K, used 5243K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 64% used [0x00000000ff600000,0x00000000ffb1ef90,0x00000000ffe00000)from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)ParOldGen       total 10240K, used 0K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 0% used [0x00000000fec00000,0x00000000fec00000,0x00000000ff600000)Metaspace       used 2624K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 279K, capacity 386K, committed 512K, reserved 1048576K

【3】长期存活对象将进入老年代

/*** 长期存活的对象进入老年代 */
public class Page95 {private static final int _1MB = 1024 * 1024;public static void main(String[] args) {testTenuringThreshold(); }/*** vm params: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails -XX:SurvivorRatio=8 * -XX:MaxTenuringThreshold=1 -XX:+PrintTenuringDistribution */private static void testTenuringThreshold() {byte[] allocation1, allocation2, allocation3;allocation1 = new byte[_1MB / 4];/* 什么时候进入老年代取决于 XX:MaxTenuringThreshold 设置 */allocation2 = new byte[4 * _1MB];allocation3 = new byte[4 * _1MB];allocation3 = null; allocation3 = new byte[4 * _1MB]; }
}
// gc日志和内存区域使用情况
HeapPSYoungGen      total 9216K, used 5499K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 67% used [0x00000000ff600000,0x00000000ffb5efa0,0x00000000ffe00000)from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)ParOldGen       total 10240K, used 8192K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 80% used [0x00000000fec00000,0x00000000ff400020,0x00000000ff600000)Metaspace       used 2624K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 279K, capacity 386K, committed 512K, reserved 1048576K

【4】动态对象年龄判定

/*** 动态对象年龄判定*/
public class Page97 {private static final int _1MB = 1024 * 1024;public static void main(String[] args) {testTenuringThreshold();}/*** vm params: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails* -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=15* -XX:+PrintTenuringDistribution*/private static void testTenuringThreshold() {byte[] allocation1, allocation2, allocation3, allocation4;allocation1 = new byte[_1MB / 4];/* allocation1+allocation2 大于survivor空间一半 */allocation2 = new byte[_1MB / 4];allocation3 = new byte[4 * _1MB];allocation4 = new byte[4 * _1MB];allocation4 = null;allocation4 = new byte[4 * _1MB];allocation4 = new byte[4 * _1MB];allocation4 = new byte[4 * _1MB];}
}
// gc日志和内存区域使用情况
[GC (Allocation Failure) --[PSYoungGen: 5591K->5591K(9216K)] 13783K->14047K(19456K), 0.0013548 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Ergonomics) [PSYoungGen: 5591K->0K(9216K)] [ParOldGen: 8456K->9216K(10240K)] 14047K->9216K(19456K), [Metaspace: 2617K->2617K(1056768K)], 0.0061721 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) --[PSYoungGen: 4096K->4096K(9216K)] 13312K->13312K(19456K), 0.0006086 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (Ergonomics) [PSYoungGen: 4096K->0K(9216K)] [ParOldGen: 9216K->9215K(10240K)] 13312K->9215K(19456K), [Metaspace: 2618K->2618K(1056768K)], 0.0050350 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
HeapPSYoungGen      total 9216K, used 4178K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 51% used [0x00000000ff600000,0x00000000ffa14930,0x00000000ffe00000)from space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)ParOldGen       total 10240K, used 9215K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 89% used [0x00000000fec00000,0x00000000ff4ffcc0,0x00000000ff600000)Metaspace       used 2624K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 279K, capacity 386K, committed 512K, reserved 1048576K

【5】空间分配担保

/*** 空间分配担保*/
public class Page99 {private static final int _1MB = 1024 * 1024;public static void main(String[] args) {testHandlePromotion();}/** * vm params: -verbose:gc -Xms20M -Xmx20M -Xmn10M -XX:+PrintGCDetails* -XX:SurvivorRatio=8 -XX:-HandlePromotionFailure(HandlePromotionFailure这个参数不起作用)*/private static void testHandlePromotion() {byte[] allocation1, allocation2, allocation3, allocation4, allocation5, allocation6, allocation7;allocation1 = new byte[2 * _1MB];allocation2 = new byte[2 * _1MB];allocation3 = new byte[2 * _1MB];allocation1 = null;allocation4 = new byte[2 * _1MB];allocation5 = new byte[2 * _1MB];allocation6 = new byte[2 * _1MB];allocation4 = null;allocation5 = null;allocation6 = null;allocation7 = new byte[2 * _1MB];}
}
// gc日志和内存区域使用情况 
[GC (Allocation Failure) [PSYoungGen: 7127K->728K(9216K)] 7127K->4832K(19456K), 0.0027073 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 7032K->584K(9216K)] 11136K->4688K(19456K), 0.0009033 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
HeapPSYoungGen      total 9216K, used 2796K [0x00000000ff600000, 0x0000000100000000, 0x0000000100000000)eden space 8192K, 27% used [0x00000000ff600000,0x00000000ff8290e0,0x00000000ffe00000)from space 1024K, 57% used [0x00000000fff00000,0x00000000fff92020,0x0000000100000000)to   space 1024K, 0% used [0x00000000ffe00000,0x00000000ffe00000,0x00000000fff00000)ParOldGen       total 10240K, used 4104K [0x00000000fec00000, 0x00000000ff600000, 0x00000000ff600000)object space 10240K, 40% used [0x00000000fec00000,0x00000000ff002020,0x00000000ff600000)Metaspace       used 2624K, capacity 4486K, committed 4864K, reserved 1056768Kclass space    used 279K, capacity 386K, committed 512K, reserved 1048576K

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java递归

无论在哪里相信大家都听说过递归,我也是个初学者,一开始我也是看不懂的,后来才慢慢看懂,现在我就来记录一下我所了解的Java递归是什么。 递归:程序调用自身的编程技巧称为递归(recursion)&#…

Maven精选系列--常用命令详情

转载自 Maven精选系列--常用命令详情 常用命令 mvn –version mvn -v 显示maven安装版本信息 mvn clean 清理项目打包文件,即项目下的target目录 mvn compile 编译项目下的src/main/Java目录源代码 mvn package 项目打包,在项目target目录下生成编译后的…

2020-10-24

1024徽章 嘤嘤嘤,我TM直接白嫖!

jvm高级特性第4章-虚拟机性能监控与故障处理工具

【4.2】jdk命令行工具 1、jps:虚拟机进程状况工具; C:\Users\pacoson>jps -l // 输出主类名称 12272 sun.tools.jps.Jps 12736 chapter3.Page93 2808C:\Users\pacoson>jps -v // 查看虚拟机进程启动时的参数 12736 Page93 -verbose:gc -Xms20M -…

JSP引入CSS文件无法生效的问题

JSP引入CSS文件无法生效的问题 开发工具与关键技术:eclipse、Java 作者:幻奏 撰写时间:2020.8.8不知道你们有没有碰到这个问题,就是css文件在jsp中无法生效,看解决办法的可以直接看下下面,前面只是我碰到…

Maven精选系列--classifier元素妙用

转载自 Maven精选系列--classifier元素妙用 先来看这么一个依赖 <dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId><version>2.4</version> </dependency> 看似没问题吧&#xff1f;你觉得能…

IDEA创建Spring配置文件Spring Config的方法

作为刚刚开始学Spring框架的小白&#xff0c;而且我也是刚刚学怎么用idea&#xff0c;不会简单的操作也是很正常的是吧。这个问题其实只是我傻傻的不懂&#xff0c;是个很简单的问题&#xff0c;我现在把它记录下来。 在idea创建maven项目后&#xff0c;我们在左边右键新建xml文…

Maven精选系列--POM文件解析

转载自 Maven精选系列--POM文件解析 之前有介绍到maven的标准目录结构&#xff0c;也看到了maven的核心配置文件pom.xml文件&#xff0c;今天就解析这个配置文件。 maven工程的核心文件就是这个pom文件了&#xff0c;每个工程在创建的时候都会有一个pom.xml配置文件&#xff0c…

JVM参数设置、分析(转)

转自&#xff1a;http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html 不管是YGC还是Full GC,GC过程中都会对导致程序运行中中断,正确的选择不同的GC策略,调整JVM、GC的参数&#xff0c;可以极大的减少由于GC工作&#xff0c;而导致的程序运行中断方面的问题&a…

如何下载、配置IDEA的Maven

我们每个项目都会用到jar包&#xff0c;而maven就是我们经常使用到的一个jar包的管理工具&#xff0c;下面我就来说说maven是如何配置在我们的电脑上的。 第一步当然是在官网下载maven啦&#xff0c;下面是官网的连接 http://maven.apache.org/download.cgi 下载好了就解压在…

Maven精选系列--eclipse各种操作

转载自 Maven精选系列--eclipse各种操作 在eclipse中配置maven的安装目录&#xff0c;使用最新的maven插件&#xff0c;从安装列表中可以看到eclipse自带绑定的是3.3.9&#xff0c;不是最新的&#xff0c;我们勾选自己的最新的。 在eclipse中设置maven的配置文件settings.xml路…

win7-elasticsearch环境搭建

【写在前面】 &#xff08;模拟&#xff09;es客户端共有4种&#xff1a; 1、postman&#xff1b; 2、kibana&#xff1b; 3、curl&#xff1b; 4、api&#xff0c; 如java api&#xff1b; 【1】下载elasticsearch windows version 和 kibana window version https://w…

IDEA中配置mybatis

之前我们用maven创建了项目&#xff0c;接着我来写下怎么在idea中配置mybatis。 第一步我们先把mybatis、sql驱动的依赖先导进去&#xff0c;接着在&#xff0c;main文件夹下面新建一个resources文件夹&#xff0c;再到下面新建一个mybatis.xml文件作为mybatis的主配置文件。 …

Spring的核心模块解析

转载自 Spring的核心模块解析 Spring框架是一个轻量级的集成式开发框架&#xff0c;可以和任何一种框架集成在一起使用&#xff0c;可以说是一个大的全家桶。Spring从1.x发展到现在的5.x可以说是越来越强大&#xff0c;下面来看看Spring都包含哪些核心的模块吧。 Spring图中的这…

no [query] registered for [filtered] in es7 的解决方法

转自 https://blog.csdn.net/wslyk606/article/details/78896023 使用es查询条件为&#xff1a; POST /_search { "query": { "filtered": { "query": { "query_string": { …

控制台查出数据传到layui数据表格却没有数据的问题

最近在试着用ssm整合的框架来做一个新的项目&#xff0c;然后用idea做了一个多表查询&#xff0c;结果发现有某一条数据没有正常显示出来&#xff0c;这让我着急的到网上找了好久都没有答案&#xff08;可能是我不太聪明&#xff09;如下图 明明其他的都有数据了&#xff0c…

一张图搞懂Spring bean的完整生命周期

转载自 一张图搞懂Spring bean的完整生命周期 一张图搞懂Spring bean的生命周期&#xff0c;从Spring容器启动到容器销毁bean的全过程&#xff0c;包括下面一系列的流程&#xff0c;了解这些流程对我们想在其中任何一个环节怎么操作bean的生成及修饰是非常有帮助的。 Bean的完整…

React学习途径和资料分享

转自&#xff1a; https://www.jianshu.com/p/de421e0db710 这段时间因为项目的原因&#xff0c;要做web前端&#xff0c;趁此机会调研了一下当前前端的技术&#xff0c;根据调研的结果&#xff0c;React毫无疑问是现在的NO.1&#xff0c;遂决定入坑学一下React。 工欲善其事…

Mysql外键约束怎么删除

记录一下碰到的问题。由于我是使用PowerDesigner来建mysql物理模型的&#xff0c;为了表与表之间的关系更加清楚&#xff0c;我给他们连线了。之后我就用它生成的SQL语句在navicat把表建出来&#xff0c;我看见没问题就直接用了&#xff0c;毕竟初学者嘛&#xff0c;嘿嘿。 到我…

Spring AOP注解为什么失效?90%Java程序员不知道

转载自 Spring AOP注解为什么失效&#xff1f;90%Java程序员不知道 使用Spring Aop注解的时候&#xff0c;如Transactional, Cacheable等注解一般需要在类方法第一个入口的地方加&#xff0c;不然不会生效。 如下面几种场景 1、Controller直接调用Service A方法&#xff1a;…