【GC概述以及查看堆内存使用】Java内存管理和GC学习
内存划分
1。JAVA内存主要划分为方法栈、方法区、堆。
2。方法栈上内存会自动释放;
3。方法区上主要加载了类的元信息、静态变量、常量。改区域又称为持久代(Perm Gen),默认是最小16M,最大64M。配置参数 -XX:PermSize=16m -XX:MaxPermSize=64m;
4。堆是按分代进行管理,主要分为新生代(New Gen)和旧生代(Old Gen或Tenuring Gen)。
1)新生代又分为Eden Space,S0,S1三块区域。
2)Eden是new出来对象的出生地(原来对象是亚当和夏娃生的啊?)。
3)S0和S1是2块大小相同的区域,合起来又称为Survivor Space,这2块区域是进行垃圾回收时生存对象的集散地,每次回收是总是从一个区域移动到另一个区域,下次又从另一个区域移动到这个区域。
4)堆大小默认值:最小1/64物理内存,最大1/4物理内存,32位机器最大为2G
5)配置参数:-Xms64M(最小) -Xmx64M(最大) -Xmn16M(新生代大小)
GC
参考:http://www.cnblogs.com/qlqwjy/p/7953458.html
1。GC分为新生代GC和旧生代GC,新生代GC又称Minor GC。当旧生代GC触发时,也会触发新生代GC,此过程称为Full GC;
1。GC算法主要有复制(Copying)、标记-清除(Mark-Sweep)、标记-压缩(Mark-Compact);
2。Minor GC采用的算法是复制(Copying),其主要的三种方式为:
1)串行GC(Serial GC) 暂停应用,单线程方式进行,配置参数-XX:+UserSerialGC
2)并行回收GC(Parallel Scavenge) 暂停应用,多线程方式进行,配置方式-XX:UseParallelGC
3)并行GC(ParNew) 配合旧生代CMS GC使用,CMS GC是与应用并发,多线程进行的,配置方式-XX:UseParNewGC
3。旧生代GC的算法主要采用标志-清除(Mark-Sweep)、标志-压缩(Mark-Compact),其主要的三种方式为:
1)串行GC 暂停应用,单线程方式进行,算法为Mark-Sweep-Compact,配置参数-XX:+UserSerialGC;
2)并行GC 暂停应用,多线程方式进行,算法为Mark-Compact,配置方式-XX:UseParallelGC;
3)并发CMS(Concurrent Mark-Sweep GC) 与应用并发多线程进行,算法为Mark-Sweep,配置参数-XX:+UseConcMarkSweepGC;
查看工具
0. jps 查看Java进程信息
1.JMap 命令jmap -heap [PID] ,统计java内存使用情况,Jdk自带;
2.JStat 命令jstat -gcutil [PID] 5s,没5秒钟输出java内存使用率以及GC的次数和时间,Jdk自带
3.jstack 命令jstack -l pid ,输出进程的堆栈信息,jdk自带
参考:https://my.oschina.net/feichexia/blog/196575
http://blog.csdn.net/imxiangzi/article/details/47123849
【GC概述以及查看堆内存使用】Java内存管理和GC学习的更多相关文章
- JVM自动内存管理-Java内存区域与内存溢出异常
摘要: JVM内存的划分,导致内存溢出异常的可能区域. 1. JVM运行时内存区域 JVM在执行Java程序的过程中会把它所管理的内存划分为以下几个区域: 1.1 程序计数器 程序计数器是一块较小的内 ...
- JRockit检测Tomcat内存溢出JAVA内存泄漏问题
http://blog.csdn.net/liyanhui1001/article/details/8240473 公司的一个Java应用系统上线以来,基本每1天OutOfMemoryError: P ...
- 【转】Java 内存模型及GC原理
一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...
- Java 内存模型及GC原理 (转载)
一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...
- java中栈内存与堆内存(JVM内存模型)
java中栈内存与堆内存(JVM内存模型) Java中堆内存和栈内存详解1 和 Java中堆内存和栈内存详解2 都粗略讲解了栈内存和堆内存的区别,以及代码中哪些变量存储在堆中.哪些存储在栈中.内存中的 ...
- Java内存溢出优化性能优化
高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经常用到的一个功能是了解动态信息——不断更 ...
- 全面理解Java内存模型(JMM)及volatile关键字(转载)
关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoad ...
- 全面理解Java内存模型(JMM)及volatile关键字
[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/72772461 出自[zejian ...
- Java内存管理-JVM内存模型以及JDK7和JDK8内存模型对比总结(三)
勿在流沙住高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分享了JVM及其启动流程,今天介绍一下JVM内部的一些区域,以及具体的区域在运行 ...
随机推荐
- javascript实现继承的4种方法,以及它们的优缺点
1. 原型链继承(有缺陷): 缺陷1:切断了Zi.prototype.constructor与Zi的关系 缺陷2:原型链上的引用类型的数据会被所有实例共享 2. 构造函数继承(有缺陷): 缺陷1:Fu ...
- 汇编程序52:实验15 安装新的int9中断例程
assume cs:code ;重写int9中断例程,当按住a后松开,便会产生满屏A stack segment dw dup() stack ends code segment start: mov ...
- hdu2032
http://acm.hdu.edu.cn/showproblem.php?pid=2032 #include<stdio.h> #include<math.h> #inclu ...
- 如何在Eclipse或者Myeclipse中使用tomcat(配置tomcat,发布web项目)?(图文详解)(很实用)
前期博客 Eclipse里的Java EE视图在哪里?MyEclipse里的Java EE视图在哪里?MyEclipse里的MyEclipse Java Enterprise视图在哪里?(图文详解) ...
- [转]微信开发.Net 接入示例
本文转自:http://my.oschina.net/lcak/blog/219618 微信公众平台接口开发官方仅提供了 PHP 接入示例代码, 网上找到的.Net代码多半需要积分下载, 所以自己写了 ...
- 全志A33平台编译linux(分色排版)V1.1
全志A33平台编译linux 大文实验室/大文哥 壹捌陆捌零陆捌捌陆捌贰 21504965 AT qq.com 完成时间:2017/12/13 10:41 版本:V1.1 (一)解压缩lichee备用 ...
- Java学习1_一些基础1——16.5.4
每个java程序中都必须有一个main方法,格式为: public class ClassName { public static void main(String[] args) { program ...
- 外观模式(Facade)-子系统的协作与整合-接口模式
对子系统进行整合,对外提供更强大或更便捷的接口. 在一个模块和几个子系统进行通信时考虑. 什么是外观模式? 外观模式(Facade),为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口 ...
- 使用CocoaPods,文档中出现引用头文件找不到的问题。
现在很多人都会使用CocoaPods来管理自己使用的第三方开源代码,这两天我的工程中碰到了这样一个问题,当我使用CocoaPods来进行三方源码的引入,但是在实际的工程当中引入出现了这样一个问题,就是 ...
- Django之auth登录认证
前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的 ...