网站建设与会展,华艺网站开发,机加工自动报价系统软件,erp管理系统多少钱详细画的图片
https://www.processon.com/diagraming/64c8aa11c07d99075d934311
官方网址
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时#xff0c;这会导致minor …详细画的图片
https://www.processon.com/diagraming/64c8aa11c07d99075d934311
官方网址
https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
相关概念 年轻代是所有新对象被分配和老化的地方。当年轻代填满时这会导致minor garbage collection,minor gc会回收掉很多的游离对象。游离的年轻代很快就被收集起来。一些幸存的最终转移到老年代。 Stop the World EventSTW所有minor gc都是STW。这意味着所有应用程序线程都将停止直到操作完成。 老年代用于存储长期存活的对象。通常为年轻代对象设置阈值当达到该年龄时对象将移动到老年代。最终需要回收老年代。此事件称为major garbage collection。 major gc也会触发STW。通常major gc会更慢因为它涉及所有活动对象。因此对于响应式应用程序应尽量减少major gc。
分代垃圾回收过程
1.首先任何新对象都被分配到eden区。两个幸存区一开始都是空的。 2.当eden区填满时将触发minor gc 3.引用的对象将移动到S0。清除eden将删除未引用的对象。 4.在下一个minorGC中eden也会发生同样的事情。未引用的对象将被删除引用的对象将移动到幸存者区。但是在这种情况下它们被移动到第二个幸存者区 S1。此外来自第一个幸存者区 S0 上最后一次minor GC 的对象会增加其年龄并移动到 S1。一旦所有幸存的物体都被移动到S1S0和Eden都会被清除。请注意我们现在在幸存者区s1中有不同年龄age的对象 5.在下一次minor GC 中重复相同的过程。然而这一次幸存者空间切换了。引用的对象将移动到 S0。幸存的对象会老化age1。eden和S1被清除。 6.这里为了演示当年龄对象达到一定的年龄阈值在本例中为 8时它们将从新生代晋升为老年代 7.随着minor GC 的继续出现对象将继续提升到老年代 8.这几乎涵盖了年轻代的整个过程。最终将对老年代进行major GC以清理和压缩该空间 常用的设置项
设置项描述-XmsSets the initial heap size for when the JVM starts. 设置 JVM 启动时的初始堆大小-XmxSets the maximum heap size.设置堆最大值-XmnSets the size of the Young Generation.设置年轻代最大值-XX:PermSizeSets the starting size of the Permanent Generation.设置永久代的起始值-XX:MaxPermSizeSets the maximum size of the Permanent Generation设置永久代的最大值
案例下面是一个简单的开始Java2Demo的例子
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize20m -XX:MaxPermSize20m -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar垃圾回收器的分类
分类方式按线程数分、按照工作模式分、按碎片处理方式分、按工作的内存区间分
按线程数分
可以分为串行垃圾回收器Serial Collector和并行垃圾回收器Parallel Collector。 串行回收指的是在同一时间段内只允许有一个 CPU 用于执行垃圾回收操作此时工作线程被暂停直至垃圾收集工作结束。和串行回收相反并行收集可以运用多个 CPU 同时执行垃圾回收因此提升了应用的吞吐量不过并行回收仍然与串行回收一样采用独占式使用了 STW 机制。
按照工作模式分
可以分为并发式垃圾回收器和独占式垃圾回收器。 并发式垃圾回收器与应用程序线程交替工作以尽可能减少应用程序的停顿时间。独占式垃圾回收器一旦运行就停止应用程序中的所有用于线程直到垃圾回收过程完全结束。
按碎片处理方式分
可以分为压缩式垃圾回收器和非压缩式垃圾回收器。 压缩式垃圾回收器会在回收完成后对存活对象进行压缩整理消除回收后的碎片。再分配对象空间使用指针碰撞非压缩式的垃圾回收器不进行这步操作。再分配对象空间使用空闲列表
按工作的内存区间分
又可分为年轻代垃圾回收器和老年代垃圾回收器
设置案例
串行回收器
要启用串行回收器Serial Collector使用请执行以下操作 -XX:UseSerialGC 下面是用于启动Java2Demo的示例命令行
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize20m -XX:MaxPermSize20m -XX:UseSerialGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar并行回收器
也称为吞吐量回收器。因为它可以使用多个 CPU 来加快应用程序吞吐量。当需要完成大量工作并且可以接受长时间暂停时应使用此回收器。例如批处理如打印报表或帐单或执行大量数据库查询。 -XX:UseParallelGC 使用此命令行选项您将获得具有单线程老年代回收器的多线程年轻代回收器。该选项还执行老年代代的单线程压缩。 下面是用于启动Java2Demo的示例命令行
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize20m -XX:MaxPermSize20m -XX:UseParallelGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar-XX:UseParallelOldGC 通过该选项GC 既是多线程年轻代回收器又是多线程老年代收集器。它也是一个多线程压缩收集器。HotSpot仅在老一代中进行压缩。热点中的年轻一代被认为是复制家;因此不需要压缩。
压缩描述了以对象之间没有孔的方式移动对象的行为。垃圾回收扫描后活动对象之间可能会留下孔洞。压实会移动对象以便没有剩余的孔。垃圾回收器可能是非压缩收集器。因此并行收集器和并行压缩收集器之间的区别可能是后者在垃圾回收扫描后压缩空间。前者不会。
下面是用于启动 的示例命令行Java2Demo
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize20m -XX:MaxPermSize20m -XX:UseParallelOldGC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar并发标记扫描 CMS 回收器
并发标记扫描 CMS 回收器也称为并发低暂停回收器。它尝试通过与应用程序线程同时执行大部分垃圾回收工作来最大程度地减少由于垃圾回收而导致的暂停。通常并发低暂停回收器不会复制或压缩活动对象。垃圾回收是在不移动活动对象的情况下完成的。如果碎片成为问题请分配更大的堆。 注意年轻代的CMS回收器使用与并行回收器相同的算法。
要启用 CMS 回收器请使用 -XX:UseConcMarkSweepGC 并设置线程数请使用 -XX:ParallelCMSThreadsn
下面是用于启动Java2Demo的示例命令行
java -Xmx12m -Xms3m -Xmn1m -XX:PermSize20m -XX:MaxPermSize20m -XX:UseConcMarkSweepGC -XX:ParallelCMSThreads2 -jar c:\javademos\demo\jfc\Java2D\Java2demo.jarG1 垃圾收集器
Garbage First 或 G1 垃圾回收器在 Java 7 中可用旨在作为 CMS 回收器的长期替代品。G1 收集器是一个并行、并发且增量压缩的低暂停垃圾回收器其布局与前面描述的其他垃圾回收器完全不同。 要启用 G1 收集器请使用 -XX:UseG1GC 下面是用于启动Java2Demo的示例命令行
java -Xmx12m -Xms3m -XX:UseG1GC -jar c:\javademos\demo\jfc\Java2D\Java2demo.jar