zoukankan      html  css  js  c++  java
  • JVM的内存和GC

    内存

    栈内存(虚拟机栈和本地方法栈)

    每个线程存有一个虚拟机栈,方法调用会生成一个栈帧,压入虚拟机栈。

    StackOverFlowError异常

    若单个线程请求的栈深度大于虚拟机允许的深度,则会抛出StackOverflowError(栈溢出错误)。可以通过无限递归来模拟,优化方式可以增大栈内存大小,以此来增加每个栈可以容纳的栈帧数量。

    栈区内存溢出

    不同于StackOverflowError,OutOfMemoryError指的是当整个虚拟机栈内存耗尽,并且无法再申请到新的内存时抛出的异常。可以通过不断新建线程模拟,优化方式,可以通过减小每个栈的大小,来增加线程数量。

    方法区

    存放静态变量,常量池和类的信息。使用cglib、bytecode等手段动态生成的类要更多关注方法区部分的内存。

    堆内存

    存放对象(类实例)信息

    GC

    GC算法

    标记清除

    标记-清除

    • 优点:算法简单,效率较好
    • 缺点:清除后,内存比较分散,不利于使用

    复制

    将堆内存分为两块,在GC时将一块存活的对象复制到另一块,清除第一块

    • 优点:清除后,内存更规则
    • 缺点:只能使用1/2的内存空间,代价较高

    复制演进(根据IBM的调查,表示98%的对象都是朝生夕死的)

    将内存分为一块Eden(较大80%)和两块Survivor(较小10%,from和to)。在清理时,将from和eden中存活的对象,复制到to,清除from和eden,新建的对象在eden上。

  • 相关阅读:
    SSL配置
    PHPStorm 打开时闪退的问题
    【网址链接】
    js中将string转换为number
    HTML特效代码大全
    前端面试题-重要
    元素框默认的计算方式
    html中有趣的显示出柠檬的方法
    html中圆角方法border-top-left-radius
    html+css显示出三角形方法transparent
  • 原文地址:https://www.cnblogs.com/enhe/p/12141687.html
Copyright © 2011-2022 走看看