• jvm


    jvm 结构:

      类加载子系统:从文件或者网络中加载class信息(classLoad)

      方法区:将加载的信息存放在方法区中,常量池,类变量

      java堆:虚拟机启动时创建,由jvm控制大小         【Eden,From , To】(young)【old】  【permanent】

      直接内存:运行NIO库下的东西

      垃圾回收系统:对象空间释放是隐式的。

      java栈:每一个java虚拟机线程都有一个私有的java栈

      本地方法栈:java栈用于java方法的调用,而本地方法栈用于本地方法调用

      pc寄存器:私有的,区分线程中执行方法是本地方法还是java方法

      执行引擎:负责执行虚拟机的字节码

    jvm分代:为了提高垃圾回收的效率和内存的分配(如果不分代的话在垃圾回收时,会遍历所有的对象,效率不高)

      新生代:对象存活时间短。 只需要在新生代进行频繁的GC

      老年代:多次回收任然存活。 不需要频繁进行回收

      永久代:静态属性,类信息放在永久代中。 一般不进行回收,HotSpot特有的

    垃圾回收算法:

      引用计数法:对象有一个引用,增加一个计数器,对象引用减少一个,计数器减一,缺点:无法处理循环引用的问题

      复制法:【主要用在survivor区即form和to之间的转换】,缺点:需要2倍的内存空间

      标记-清除法:分两个阶段,第一个阶段从引用根节点开始标记所有被引用的对象,第二阶段,遍历整个堆,把未被标记的对象清除,缺点,需要暂停整个应用,同时会产生内存碎片。

      标记-整理法:分两个阶段,第一个阶段从引用根节点开始标记所有被引用的对象,第二阶段,遍历整个堆,把清除未标记对象并且吧存活对象“压缩”到堆中的其中一块,按顺序排放

              此算法避免了“标记-清除”的碎片问题,同时避免了“复制”算法的空间问题。

    垃圾收集器:是对垃圾回收算法的具体应用。

      次收集器(minor GC 又叫 Scavenge GC),在年轻代空间紧张时触发,总是优先于  --全收集器 (Full GC) System.gc() 触发的就是全收集器

    分代回收器:7种

      young gereration : serial (串行收集器:只用一个cpu收集线程去完成GC工作) , parNew (并行收集器) , parallel  scavenge(并行)

      old  gereation又叫 tenured gereation: CMS(coucurrent Mark Sweep 并发 标记 清除 )  , serial old    ,  parallel old 

      第七个是处于年轻代和老年代之间的  G1(Gabage Frist)

      

      串行收集器 Serial :是HotSpot运行在client模式下默认的新生代收集器,且在进行垃圾回收时需要暂停所有的工作线程 stop the word,可以使用-xx+useSerialGC打开(这是一些指定虚拟机用什么GC),对串行收集器的优化就是减少暂停时间(这是一个矛盾的事情)。如果是新生代用的是复制算法,如果回收的是老年代用的是标记-整理算法

      jvm优化:1.合理的选择收集器

          2.选择jvm的版本(client和server)

          3.堆区大小的分配

      并行收集器 parNew:其实是serial的多线程版本.

      吞吐量=cpu运行用户的应用程序的时间/(cpu处理用户的程序的时间+GC所耗时的时间)

      

     

      获得到的垃圾收集器一定两个,一个是新生代的,一个是老年代的,可以通过eclipse中的运行修改参数。

      

  • 相关阅读:
    php 三元运算符简洁用法
    Linux 获取网卡信息
    《构建之法》读后感
    毫秒数据字符串转换为DateTime
    POST请求——HttpWebRequest
    多个不同类对象传输思路
    WCF 大文件传输配置
    WCF配置文件详解
    C# 元组、匿名对象、ref&out
    C#控制台关闭之前做一些操作
  • 原文地址:https://www.cnblogs.com/xp0813/p/11206157.html
Copyright © 2020-2023  润新知