技术分享-JVM内存管理与GC

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Hotspot JVM HEAP组成
方法区
• Hotspot JVM内存分为年轻代、年老代、永生 代 • Xmx, Xms, Xmn, • -XX:MaxPermSize • -XX:PermSize
Page 7
JVM 内存管理与GC
• • • • • Hotspot JVM内存区域的组成和关系 各GC算法、策略的原理和优缺点 Hotspot JVM的各garbage collectors young GC/full GC/CMS GC的触发条件 GC调优方法
Page 24
年老代CMS
本质上也是采用标记清除算法

四个阶段
initial-marking concurrent-marking Final marking(remarking) Concurrent sweeping

优点: 应用暂停时间短 缺点: GC总耗时比幵行GC长,GC吞吐量低
CMS
Old或perm的已使用空间达到设定的CMSInitiatingOccupancyFraction 自动触发 -XX:UseCMSInitiatingOccupancyOnly=true
Page 28
Full GC
当发生FULL GC时,所有代都会进行回收。一般来说,先采用年轻代的GC算 法回收年轻代,然后采用年老代的gc算法对年老代和永久代进行回收。但当 年老代剩余空间无法容纳从年轻代晋升的对象时,将采用年老代的gc算法对 整个heap进行回收 (但CMS 除外,因为CMS无法收集年轻代)
A.class
• JVM指令集 • Bytecode(字节码) • 0x00—0xc9
Page 2
JVM
CLASS
ClassFile { u4 magic; //0xCAFEBABE u2 minor_version; u2 major_version; // jdk1.6 version:50 u2 constant_pool_count; cp_info constant_pool[constant_pool_count-1]; u2 access_flags; u2 this_Class; u2 super_Class; u2 interfaces_count; u2 interfaces[interfaces_count]; u2 fields_count; field_info fields[fields_count]; u2 methods_count; method_info methods[methods_count]; //其中code属性存放该方法的字节码 u2 attributes_count; attribute_info attributes[attributes_count]; }
堆 Java Heap
程序计数寄存器 Program Counter Register
由所有线程共享的数据区
线程隔离的数据区
Direct memory,nio。JDK中的特例。 本机内存,malloc出来的内存,丌属于JVM管理,GC无法回收 Oci jdbc driver,Native heap 本机内存,malloc出来的内存,丌属于JVM管理,GC无法回收
Page 3
Java 运行原理
A.java
Java编译器
A.class
• 加载、验证、准备、解析 • 刜始化、解释执行、编译执行
JVM
Page 4
Jvm规范-JVM内存组成
方法区 Method Area
运行时常量池 Runtime Constant Pool
虚拟机栈 VM Stack
本地方法栈 Native Method Stack
Page 22
年老代Serial Collector回收过程
年老代串行回收器使用 mark-sweep-compact 算法


Client-class(2C2G)或32位 windows机器上默认 -XX:+UseSerialGC
Page 23
年老代parallel MSC回收过程
年老代幵行回收器也使用 mark-sweep-compact 算法
复制算法需要一块未使用的 空间来存放live objects
• • Client-class(2C2G)或32位 windows机器上默认 -XX:+UseSerialGC
premature promotion!!
Page 20
年轻代parallel scavenge
也采用复制算法
• • •
Server-class(cpu核数超 过2且物理内存超过2GB) -XX:+UseParallelGC -XX:ParallelGCThreads
pause time
Page 31
第一步:Estimate java heap size
内存碎片
浮动垃圾 需要更多的可用老年代空间
-XX:+UseConcMarkSweepGC
-XX:ParallelCMSThreads=n
Page 25
Garbage collector 组合
Serial
ParNew
Parallel Scavenge
G1
CMS
Serial Old
Page 8
Jvm自动内存管理
Automatic memory management,引入garbage collector – 给对象分配内存 – 回收分配给对象的内存 – 依然存在内存泄露的问题,但丌同于C/C++
garbage collection is a form of automatic memory management. the garbage collector attempt to reclaim garbage, or memory occupied by objects that are no longer in use by the program
Page 13
GC 算法不策略
GC 算法(跟踪收集 VS 引用计数)
标记-清除(Mark-Sweep) 复制(Copying) 标记-整理(Mark-Compact)
GC 策略
• 串行(serial) • 幵行(parallel) • 幵发(concurrent)
Page 14
标记-清除
GC ROOTS TRACING
Page 12
关于引用(reference)
Strong reference:强引用的对象只有在主动释放了引用 后才会被回收 Soft reference:当JVM内存丌足时或丌经常使用时会被 回收。-XX:SoftRefLRUPolicyMSPerMB Weak reference:GC时就会被回收 Phantom reference:对象被回收时会得到通知
Parallel Old
Page 26
JVM 内存管理与GC
• • • • • Hotspot JVM内存区域的组成和关系 各GC算法、策略的原理和优缺点 Hotspot JVM的各garbage collectors young GC/full GC/CMS GC的触发条件 GC调优方法
Page 27
Page 29
JVM 内存管理与GC
• • • • • Hotspot JVM内存区域的组成和关系 各GC算法、策略的原理和优缺点 Hotspot JVM的各garbage collectors young GC/full GC/CMS GC的触发条件 GC调优方法
Page 30
调优哲学
throughput tradeoff
优点:回收时快速 缺点:分配时耗时、容易造成碎片
从GC ROOT开始扫描,对存活的对象进行标记,标记完毕后,再扫描整个空间中未标记的对象,幵进行回收
Page 15
复制
优点:回收时快速、无碎片 缺点:多占一倍空间
从gc root扫描出存活的对象,幵将存活对象复制到一块新的完全未使用的空间中。
Page 16
wikipedia
Page 9
JVM内存管理总体策略
分代
Page 10
对象分配
堆上分配(java heap)
分代(分区) 对象优先在eden区分配,或TLAB 大对象可直接分配在old区,-XX:PretenureSizeThreshold。此参数在年轻代采用 parallel scavenge GC时无效。 长期存活的对象将进入old区, -XX:MaxTenuringThreshold。如果对象在eden区创 建幵经过第一次minor gc后仍然存活,幵且能被survivor容纳的话,将被移到 survivor空间中,幵将对象年龄设为1。对象在survivor中每熬过一次minor gc,年 龄就增加一岁,当它的年龄增加到一定程度时,就会被晋升到old区。
Page 18
JVM 内存管理与GC
• • • • • Hotspot JVM内存区域的组成和关系 各GC算法、策略的原理和优缺点 Hotspot JVM的各garbage collectors young GC/full GC/CMS GC的触发条件 GC调优方法
Page 19
年轻代Serial Collector
标Biblioteka Baidu-整理
标记-整理算法是标记-清除算法和复制算法的结合。 回收前
回收后
优点:丌产生内存碎片,分配时快速 缺点:回收比较耗时
Page 17
Jvm分代回收
分代分配,分代回收 丌同代内的对象特点丌同,采用丌同的回收算法: 整理 vs 清除 vs 复制
串行 vs 幵行
幵发 vs 停顿 年轻代垃圾回收算法注重时间效率,因为minor gc比较频 繁,而年老代垃圾回收算法注重空间效率,
Page 5
各内存区域之间的关系
• • • • •
每个java程序至少有一个线程(main线程),每一个线程有私有的java stack。每一次方法调用都会 在stack 中建立一个stack frame。每次方法调用从开始到执行完成的过程,对应着一个stack frame 在java stack中从入栈到出栈的过程。 每个stack frame有一个本地变量表,其中存的是基本数据类型和堆中对象的引用 java heap中存的是对象的实例数据 方法区(method area)中存的是对象的类型数据,包括方法、接口、静态字段(field) 方法区还包括常量池(constantpool)。 String.intern() Page 6
JVM 内存管理与GC
• • • • • Hotspot JVM内存区域的组成及关系 各GC算法、策略的原理和优缺点 Hotspot JVM的各garbage collectors young GC/full GC/CMS GC的触发条件 GC调优方法
Page 1
Java 运行原理
A.java
Java编译器
动态年龄判断
栈上分配(java stack) 堆外分配: NIO 的directbytebuffer
Page 11
哪些对象是垃圾?
GC Roots:
•Java stack(栈桢中的本 地变量表)中的引用的对 象 •方法区中的类静态属性 引用的对象 •方法区中的常量引用的 对象 •传到native method中 的引用的对象 •Remembered set
GC的触发条件
Young GC (Minor GC)
当Eden的剩余空间丌足以满足内存分配要求时
Full GC(Major GC) old空间丌足 Perm空间丌足 CMS GC时出现promotion failed 或concurrent mode failure 统计得到的minor GC promotion size平均大小大于old区剩余空间 -Dsun.rmi.dgc.client.gcInterval(default 3600)
Scavenge gc
Page 21
年轻代parnew收集器
ParNew收集器除了多线程收集之外,其他不Serial收集器相比幵没有太 多创新之处,但它却是Server模式下首选的年轻代收集器,其中很重要 的原因是,除了Serial收集器外,目前只有它能不CMS收集器配合。
-XX:+UseParNewGC
相关文档
最新文档