JVM浅谈

  1. 首先说说JVM的内存模型JVM浅谈
    其中程序计数器就是记录程序运行到哪儿的秘书一样,记录着程序运行在哪儿了,这里就不多赘述了。
    方法区:存放的主要是类、与类相关的信息如静态的类字段以及常量 堆:存放的主要是对象的实例,new的各种对象就是放在这里
    栈:存放的主要是方法运行时产生的栈帧
    2. 垃圾回收机制(GC) 如何搜索垃圾:主要是有两种算法来分辨搜索垃圾,引用计数法和根搜索法,而因为引用计数法缺点太明显了,如果两个垃圾互相引用那么,他们就不会被检索成垃圾,也就清理不了。所以JVM中采用的是根搜索法,确保能够准确的找到垃圾。
    垃圾找到后肯定也会有合理的清理方案有以下几种:
    2.1标记清除法 优点是速度快,缺点非常致命,会产生大量内存碎片,会出现内存显示充足,可是大文件却存放不下,这就是它,直接标记,并直接清理时留下的隐患
    JVM浅谈
    2.2分段复制法 在标记清除法的基础上进行二分整理,这样就可以解决内存碎片的问题

    JVM浅谈
    2.3标记整理法 在分段复制法的基础上进一步整理 JVM浅谈
    2.4分代收集法 JVM回收的垃圾主要就是堆中的垃圾,因为栈中的内存,在方法执行完之后自动会回收掉,而GC使用的是分代收集法回收把内存空间分为以下区域
    JVM浅谈新生代部分检查回收频率最高,逐级递减,且对不同区域进行不同的策略,已达到最优效果。
    对于回收区域也有划分:
    第一级 Minor GC 小规模(通常是内存充足时)
    第二级 Major GC 中等规模(通常是内存被占用了一定量时)
    第三级 Full GC 最大规模(通常是内存非常紧张时)

现在来讲内存泄露与内存溢出就很清楚了,内存泄露就是垃圾没有被回收掉,形成的内存泄露,内存溢出就是内存泄露多了,引起的内存资源不足,这就是内存溢出。
这里就不演示内存泄露与内存溢出了(设置一下虚拟机内存参数然后随便打点垃圾代码,就ok了,推荐不要轻易尝试,电脑这时会非常卡顿)。
欢迎大家留言评论。