码迷,mamicode.com
首页 > 其他好文 > 详细

了解JVM

时间:2015-09-29 13:03:18      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

---恢复内容开始---

Java对象在运行环境中,对于内存而言,存在三种状态:年轻代、年老代、永生代;

下图是JVM内存模型

技术分享

1. 年轻代被分为3个部分:Enden区和两个Survivor区,垃圾回收--Minor GC

2. 新建对象-->首先在E区申请内存,不足执行Minor GC 通过一定的算法 E->S->年老代

3. 所有的垃圾收集都是“Stop the World”事件,Full GC耗时比Minor GC要高的多

4. 永生代包含了JVM需要的应用元数据,这些元数据描述了在应用里使用的类和方法,永生代不是Java堆内存的一部分。

 

配置参数

-Xms:初始堆大小

-Xmx:最大堆大小

-Xmn:年轻代堆内存大小,剩下的为老年代的空间大小

-XX:PermGen:永生代内存初始大小

-XX:MaxPermGen:永生代最大内存

-Xss:设置每个线程的堆栈大小

 

垃圾回收类型

这里有五种可以在应用里使用的垃圾回收类型。仅需要使用JVM开关就可以在我们的应用里启用垃圾回收策略。让我们一起来逐一了解:

  1. Serial GC(-XX:+UseSerialGC):Serial GC使用简单的标记、清除、压缩方法对年轻代和年老代进行垃圾回收,即Minor GC和Major GC。Serial GC在client模式(客户端模式)很有用,比如在简单的独立应用和CPU配置较低的机器。这个模式对占有内存较少的应用很管用。
  2. Parallel GC(-XX:+UseParallelGC):除了 会产生N个线程来进行年轻代的垃圾收集外,Parallel GC和Serial GC几乎一样。这里的N是系统CPU的核数。我们可以使用 -XX:ParallelGCThreads=n 这个JVM选项来控制线程数量。并行垃圾收集器也叫throughput收集器。因为它使用了多CPU加快垃圾回收性能。Parallel GC在进行年老代垃圾收集时使用单线程。
  3. Parallel Old GC(-XX:+UseParallelOldGC):和Parallel GC一样。不同之处,Parallel Old GC在年轻代垃圾收集和年老代垃圾回收时都使用多线程收集。
  4. 并发标记清除(CMS)收集器(-XX:+UseConcMarkSweepGC):CMS收集器也被称为短 暂停顿并发收集器。它是对年老代进行垃圾收集的。CMS收集器通过多线程并发进行垃圾回收,尽量减少垃圾收集造成的停顿。CMS收集器对年轻代进行垃圾回 收使用的算法和Parallel收集器一样。这个垃圾收集器适用于不能忍受长时间停顿要求快速响应的应用。可使用 -XX:ParallelCMSThreads=n JVM选项来限制CMS收集器的线程数量。
  5. G1垃圾收集器(-XX:+UseG1GC) G1(Garbage First):垃圾收集器是在Java 7后才可以使用的特性,它的长远目标时代替CMS收集器。G1收集器是一个并行的、并发的和增量式压缩短暂停顿的垃圾收集器。G1收集器和其他的收集器运 行方式不一样,不区分年轻代和年老代空间。它把堆空间划分为多个大小相等的区域。当进行垃圾收集时,它会优先收集存活对象较少的区域,因此叫 “Garbage First”。

 

了解JVM

标签:

原文地址:http://www.cnblogs.com/wolflowhereu/p/4845918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!