JVM的总结

2019-04-25 06:54:18来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1.JVM的内存模型

     JVM主要由程序计数器,虚拟机栈,堆,方法区,本地方法区

               1.程序计数器的功能是记录当前线程执行到了字节码文件的哪一行, JVM执行的是.java编译后的.class文件

     2.虚拟机栈主要保存的是数据基本类型,对象的引用,将方法打包的栈帧

     3.堆存放的是所有的实例

        1.堆分位新生代和老年代,新生代又分位 edent和survivor ,新生代里主要使用复制算法来进行垃圾回收,一般的对象创建了会存在新生代里,但如果你的对象太大了那么JVM会直接创建在老年代里。老年代使用的是标记清除和标记整理算法来进行GC回收的。 

               4.方法区(永久代)保存的是常量,静态变量

               5.本地方法区:主要保存的是java用native修饰的方法,这样的方法不会生成栈帧,将直接的动态执行来使用效率很高

 

2 GC垃圾算法

  1.标记清理

       通过可达性分析来标记需要清理的对象,然后直接清空内存,好处是效率高,不需要移动内存。坏处是清空之后内存不规整产生内存碎片。导致大对象放不进去,可能会加快下一轮GC,导致更频繁的GC 

  2.标记整理

       通过可达性分析来标记需要清理的对象,将存活的对象移动到一块,然后将存活对象的边界外的内存清空。这样就规避了内存碎片的问题,但因为要移动对象内存所以效率会比标记清理算法低一些,一般是在老年代使用这个算法 

  3.复制算法

               把内存分为2份,把存活的对象复制到另一块内存上,然后清空之前的内存区域。坏处很占有内存空间,规避了内存碎片,新生代使用复制算法

  

 


原文链接:https://www.cnblogs.com/javacoders/p/10755257.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:[数据库] 理解数据库范式-通俗易懂

下一篇:linux下nginx【反向代理】配置【负载均衡】配置