俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下:

  •  一些JVM的跟踪参数的设置
  • Java堆的分配参数
  • -Xmx 和 –Xms 应该保持一个什么关系,可以让系统的性能尽可能的好呢?是不是虚拟机内存越大越好?

  • Java 7之前和Java 8的堆内存结构
  • Java栈的分配参数
  • GC算法思想介绍
    –GC ROOT可达性算法
    –标记清除
    –标记压缩
    –复制算法
  • 可触及性含义和在Java中的体现
  • finalize方法理解
  • Java的强引用,软引用,弱引用,虚引用
  • GC引起的Stop-The-World现象
  • 串行收集器
  • 并行收集器
  • CMS

  记得JVM学习1里总结了一个例子,就是使用 -XX:+printGC参数来使能JVM的GC日志打印,让程序员可以追踪GC的踪迹。如例子:

JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html
 1 public class OnStackTest {
 2     /**
 3      * alloc方法内分配了两个字节的内存空间
 4      */
 5     public static void alloc(){
 6         byte[] b = new byte[2];
 7         b[0] = 1;
 8     }
 9 
10     public static void main(String[] args) {
11         long b = System.currentTimeMillis();
12 
13         // 分配 100000000 个 alloc 分配的内存空间
14         for(int i = 0; i < 100000000; i++){
15             alloc();
16         }
17 
18         long e = System.currentTimeMillis();
19         System.out.println(e - b);
20     }
21 }
JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html

  配置参数-XX:+printGC,再次运行会打印GC日志,截取一句:

[GC (Allocation Failure)  4416K->716K(15872K), 0.0018384 secs]

  代表发生了GC,花费了多长时间,效果是GC之前为4M多,GC之后为716K,回收了将近4M内存空间,而堆的大小大约是16M(默认的)。

  如果还嫌这些信息不够,JVM还提供了打印详细GC日志的参数:-XX:+PrintGCDetails

[GC (Allocation Failure) [DefNew: 4480K->0K(4992K), 0.0001689 secs] 5209K->729K(15936K), 0.0001916 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 

会详细显示堆的各个代的GC信息,还详细的给出了耗时信息:user代表用户态cpu耗时,sys代表系统的cpu耗时,real代表实际经历时间。除此之外,-XX:+PrintGCDetails,还会在JVM退出前打印堆的详细信息:

JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html
Heap
 def new generation   total 4992K, used 4301K [0x03800000, 0x03d60000, 0x08d50000)
  eden space 4480K,  96% used [0x03800000, 0x03c33568, 0x03c60000)
  from space 512K,   0% used [0x03ce0000, 0x03ce0000, 0x03d60000)
  to   space 512K,   0% used [0x03c60000, 0x03c60000, 0x03ce0000)
 tenured generation   total 10944K, used 729K [0x08d50000, 0x09800000, 0x13800000)
   the space 10944K,   6% used [0x08d50000, 0x08e06700, 0x08e06800, 0x09800000)
 Metaspace       used 103K, capacity 2248K, committed 2368K, reserved 4480K
JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html

相关文章:

  • 2022-12-23
  • 2021-12-24
  • 2021-07-29
  • 2021-12-06
  • 2022-03-03
  • 2021-06-26
  • 2021-11-20
  • 2021-11-25
猜你喜欢
  • 2021-11-20
  • 2022-02-17
  • 2021-08-07
  • 2021-10-27
  • 2021-08-28
相关资源
相似解决方案