zoukankan      html  css  js  c++  java
  • JVM垃圾回收问答

    为什么要有垃圾回收 

    内存资源是有限的,当所需内存不能满足时,需要把不再使用的对象清除掉,否则JVM将无法运行下去

    怎么判断对象是否是垃圾

    判断对象是否是垃圾,有两种方式:1是标记引用计数,2是根部可达,第一种存在环形引用问题,第二种是JVM目前采用的方式

    在根部可达中,哪些对象可以作为根

    1栈中引用的对象,2方法区变量,3方法区常量,4JNDI中引用的对象

    垃圾回收的方式有哪些,以及各自的优缺点

    1复制:适用于大部分对象都不再引用

    2 标记清除:效率相对低,容易产生碎片

    3标记清除整理:效率相对低,不会产生碎片

    4并发标记清除:产生碎片,效率相对高些,减少业务暂停时间

    是不是内存分配的越大,效果就越好

    对于需要减少暂停业务,内存分配的越大,垃圾回收的时间就越长,业务暂停时间就越长

    对于需要充分发挥吞吐量的业务,内存分配的大,垃圾回收时间随长,但整体效率要高

    内存分配是一个不断调整、观察的过程,不是一蹴而就、一成不变的

    为什么要分代

    由于存在大部分对象存活时间都很短,根据不同对象存活时间分割在不通区域,提高回收效率,降低回收时间

    新生代为什么要有Eden、S0、S1,而不采用两个大小一样的内存分配区域

     增加内存空间率用率,减少垃圾回收次数

    有什么途径来优化垃圾回收

    对应用造成卡顿的主要来自于老年代的回收,对程序开发者来说,减少不必要的对象的创建,对于JVM可以使用并行垃圾回收和CMS(并发标记清除)收回器;

    对于非逃逸对象,可以采用栈来进行存储,减少垃圾回收次数;

    对于垃圾回收,还需要进行内存分配参数的调整,这是一个长时间观察和不断改变的过程。

    栈和堆有什么区别

    栈:先进后出,堆:先进先出

    栈:存储在一级缓存或者二级缓存上,堆:存储在内存上

    栈:存储的是cpu要执行的指令和数据,堆:只存储数据

    栈:存储空间较小,价格相对贵一些,堆:存储空间大,价格相对便宜

    为什么不把所有的非逃逸对象分配到栈上

     栈:存储空间较小,价格相对贵一些

  • 相关阅读:
    【卷影副本】文件属性“以前的版本”中无法看到历史文件的解决方案
    合理的网间结算和互联网转接服务,电信敢正视吗?
    FTP无法连接可能是安全狗设置的原因
    播放器播放视频画面均变暗(但网页视频正常)的解决方案
    安装国际版firefox(火狐浏览器)并设置语言为中文
    navicat for mysql注册码:NAVN-LNXG-XHHX-5NOO
    "COM Surrogate 已停止工作"解决方案(windows7 64位及32位)
    IIS7 http自动跳转到https(通过编辑Web.config实现)
    sql 时间处理
    制作时间戳和时间戳转标准日期时间等
  • 原文地址:https://www.cnblogs.com/lilei2blog/p/9585627.html
Copyright © 2011-2022 走看看