JVM垃圾处理方法(标记清除、复制、标记整理)

  1、标记清除

    标记阶段:先通过根节点,标记所有从根节点开始的对象,未被标记的为垃圾对象。

    清除阶段:清除所有未被标记的对象。

  2、复制算法

    将原有的空间分为两块,每次只使用其中的一块,将正在使用的内存中的存活的对象复制到未使用的内存块中,

    然后清除正在使用的内存块中的所有对象。

  3、标记----整理

    1.标记阶段:先通过根节点,标记所有从根节点开始的可达对象,为被标记的为垃圾对象

    2、整理阶段:将所有的存活对象压缩到内存的一段,之后清理边界所有空间

  三种算法的比较

    1、效率:复制算法 > 标记/整理算法 > 标记/清除算法(此处的效率只是简单的对比时间复杂度,实际情况不一定如 此)。

    2、内存整齐度:复制算法=标记/整理算法>标记/清除算法。

    3、内存利用率:标记/整理算法=标记/清除算法>复制算法

JVM如何GC,新生代,老年代,持久代都储存那些东西,以及各个区的作用?

  1、新生代

      在方法中去new一个对象,那这个方法调用完毕后,对象就会被回收,这个就是一个典型的新生代对象。

  2、老年代

      在经历了N次垃圾回收后仍旧存活的对象就会被放到老年代中。而且大对象直接直接进入老年代

      当Survivor空间不够用时,需要依赖于老年代进行分配担保,所以大对象直接进入老年代

  3、永久代

      即方法区

GC用的引用可达性分析算法中,那些对象可作为GC Roots 对象?

  1、java虚拟机栈中的对象

  2、方法区中的静态成员

  3、方法区中的常量引用对象

  4、本地方法区中的JNI(Native方法)引用对象。

什么时候进行MinGC 、FullGC

  1、MinGC

      1》新生代中的垃圾收集动作,采用的是复制算法

      2》对于较大的对象,在Minor GC的时候可以直接进入老年代

  2、FullGC

      1》Full GC 是发生在老年代的垃圾收集动作,采用的是标记--清除/整理算法

      2》由于老年代的对象几乎都是在Survivor去熬过来的,不会那么容易死掉,因此Full GC发生的次数不会有Minor GC

        那么频繁,并且Time(Full Gc)>Time(Minor Gc)

Java虚拟机内存的划分,每个区域的功能

  • 程序计数器(线程私有)

     ○ 线程创建时创建,执行本地方法时其值为undefined。

  • 虚拟机栈(线程私有)

     ○ (栈内存)为虚拟机执行java方法服务:方法被调用时创建栈帧-->局部变量表->局部变量、对象引用 ○ 如果线程请求的栈深度超出了虚拟机允  许     的深度,就会出现StackOverFlowError。-Xss规定了栈的大空间

    ○ 虚拟机栈可以动态扩展,如果扩展到无法申请到足够的内存,会出现OOM

  • 本地方法栈(线程私有)

    ○ java虚拟机栈是为虚拟机执行java方法服务的,而本地方法栈则为虚拟机执使用到的Native方法服务。

     ○ Java虚拟机没有对本地方法栈的使用和数据结构做强制规定。Sun HotSpot把Java虚拟机栈和本地方法栈合二为一

    ○ 会抛出StackOverFlowError和OutOfMemoryError

  • Java堆

    ○ 被所有线程共享,在Java虚拟机启动时创建,几乎所有的对象实例都存放到堆中

    ○ GC的管理的主要区域

    ○ 物理不连续,逻辑上连续,并可以动态扩展,无法扩展时抛出OutOfMemoryError

  • 方法区

    ○ 用于存储已被虚拟机加载的类信息、常量、静态变量、即使编译器编译后的代码的数据

    ○ Sun HotSpot 虚拟机把方法区叫做永久待(Permanent Generation)

  • 运行时常量池

    ○ 受到方法区的限制,抛出OutOfMemoryError

JVM线程死锁,你该如何判断是因为什么?如果用VisualVM,dump线程信息出来,会有哪些信息

  • 常常需要在隔两分钟后再次收集一次thread dump,如果得到的输出相同,仍然是大量thread都在等待给同一个 地址上锁,那么肯定是死锁了。

    

java JVM虚拟机的更多相关文章

  1. JAVA JVM虚拟机选项:Xms Xmx PermSize MaxPermSize 区别

    Xms : 是指设定程序启动时占用内存大小.一般该值设置大的会使程序启动快,但是可能会使本机暂时变慢. Xmx : 是指设定程序运行期间最大可占用的内存大小,如果程序运行需要占用更多的内存,超出这个 ...

  2. 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别

    点击window---->preferences---->配置的tomcat---->JDK,在Optional Java VM arguments:中输入 -Xmx512M -Xm ...

  3. Java JVM虚拟机选项Xms/Xmx/PermSize/MaxPermSize(转)

    通过JVM的这些选项:Xms/Xmx/PermSize/MaxPermSize可以牵扯出很多问题,比如性能调优等. 说明:以下转载没经过实践. 经验实例(参考): 设置每个线程的堆栈大小.JDK5.0 ...

  4. java jvm虚拟机类加载器

    在Java中任意一个类都是由这个类本身和加载这个类的类加载器来确定这个类在JVM中的唯一性. 类加载器 虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到J ...

  5. java jvm虚拟机类加载过程

    加载 在加载阶段, 虚拟机需要完成以下3件事情:1) 通过一个类的全限定名来获取定义此类的二进制字节流.2) 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构.3) 在内存中生成一个代表这 ...

  6. 【转载】Java JVM : Xms Xmx PermSize MaxPermSize 区别

     转载自:http://cxh61207.iteye.com/blog/1160663 java JVM虚拟机选项: Xms Xmx PermSize MaxPermSize 区别 Xms 是指设定程 ...

  7. java语言与jvm虚拟机简介

    一.java语言 1.1 支持面向对象编程oop 强调支持,因为java同样可以面向过程编程. oop的三大特性是:封装.继承.多态. 封装主要针对成员变量而言,oop的思想要求成员变量均为私有,不应 ...

  8. Powershell远程在Azure A7虚拟机执行Java JVM失败

    近期.使用Powershell脚本在A7 (8核,56G内存)配置的 Azure VM(Virtual Machine.虚拟机)上远程运行Java JVM时 (java.exe -version).总 ...

  9. Java中JVM虚拟机详解

    1. 什么是JVM? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...

随机推荐

  1. 自动化web前端测试,自动登录网站.目前发现最靠谱的方法是imacros

    imacros免费版 登录宏代码的示例: //首先登出URL GOTO=http://yoursite/logout.html//打开登录页面URL GOTO=http://yoursite/logi ...

  2. 【算法随记】Canny边缘检测算法实现和优化分析。

    以前的博文大部分都写的非常详细,有很多分析过程,不过写起来确实很累人,一般一篇好的文章要整理个三四天,但是,时间越来越紧张,后续的一些算法可能就以随记的方式,把实现过程的一些比较容易出错和有价值的细节 ...

  3. CAS 单点登录【2】自定义用户验证

       基础不太熟的同学可以先去看:CAS 单点登录[1]入门 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验证用户的处理器. 1.QueryDatabaseAuthe ...

  4. MinFilter(MaxFilter)快速算法C++实现

    目录 1.算法简述 1.1.MinFilter(MaxFilter) 算法简述 1.2.MinFilter(MaxFilter) 快速算法简述 2.实现代码 2.1.MinFilterOneRow 单 ...

  5. html : 九宫格(响应式)

    talk is cheap, show you the code : <!DOCTYPE html> <html> <head> <title>html ...

  6. [转] 分组排序取前N条记录以及生成自动数字序列,类似group by后 limit

    前言:        同事的业务场景是,按照cid.author分组,再按照id倒叙,取出前2条记录出来.        oracle里面可以通过row_number() OVER (PARTITIO ...

  7. 单片机成长之路(51基础篇) - 007 CH340CH341最全说明

    比较全的CH340,CH341应用说明 CH340 以前用USB转串口时图方便一般也都是直接买现成的USB转串口模块,但是后面设计需要,不等不将CH340这个模块集成到电路板中,经过多次失败,终于得到 ...

  8. C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】

    C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...

  9. NBU将RAC数据库恢复到单机

    恢复的过程和(https://www.cnblogs.com/abclife/p/5687993.html)差不多.但是,具体过程有些不同.如果按照之前的恢复方式,在run语句中同时运行restore ...

  10. Unity应用架构设计(6)——设计动态数据集合ObservableList

    什么是 『动态数据集合』 ?简而言之,就是当集合添加.删除项目或者重置时,能提供一种通知机制,告诉UI动态更新界面.有经验的程序员脑海里迸出的第一个词就是 ObservableCollection.没 ...