JVM总结

1.类加载的过程

1.类的加载是指把类的.class 文件中的数据读入到内存中,通常是创建一个字节数组读入.class 文件,然后产生与所加载类对应的 Class 对象
2.当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤
3.最后 JVM 对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。

2.简述JVM

(1)JVM粗略分为三个部分:类加载器(ClassLoader),运行时数据区和执行引擎。
(2)类加载器:加载程序中的类和接口,为他们赋予唯一的名字。
(3)执行引擎:执行字节码,执行本地方法。
(4)运行时数据区:

  • 方法区(线程共享)
  • 堆(线程共享)
  • 虚拟机栈(线程私有)
  • 本地方法栈(线程私有)
  • 程序计数寄存器(线程私有)

3.内存中栈、堆和方法区的用法

栈:基本数据类型变量、对象的引用、函数调用的现场保存;
堆:new关键字和构造器创建的对象,堆是垃圾回收器管理的主要区域;
方法区:jvm加载的类信息、常量、静态变量、JIT编译器编译后的代码、常量池(常量池是方法区的一部分);
程序计数寄存器:每一个线程都会有一个程序计数寄存器,它也是在线程创建是建立的,寄存器的内容指向下一个将被执行的地址。

4.垃圾回收算法

(1)引用计数法
原理是,一个对象增加一个引用就会计数加一,减少一个引用就会减一,最后只会回收计数为0的对象。
(2)标记清除
分为两个阶段,第一阶段从根节点开始标记每一个被引用的对象,第二阶段,清除所有未被标记的对象。
(3)复制
把堆空间平均分为两部分,把引用的对象复制到同一个空间里,然后清除另一个空间里所有的对象。
(4)标记整理
先从根节点开始标记被引用的对象,删除所有未被标记的对象,然后再把剩余对象整理到一个空间里依次排放,避免了空间碎片。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2、JVM的基本介绍JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算...
    我还不够强阅读 1,449评论 0 0
  • Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实...
    Rick617阅读 4,344评论 0 0
  • 内存区域 JVM的主要组成部分和作用JVM整体来看分为:运行时数据区,类加载子系统、执行引擎以及本地方法接口(与n...
    czczccz阅读 1,677评论 0 1
  • 1. 大概内容 内存区域 内存泄漏和内存溢出 类型擦除 对象创建,分配和访问 GC的判定 GC实现方法 类加载过程...
    yufeiyang1995阅读 2,463评论 0 0
  • 内存区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的...
    wustor阅读 2,939评论 0 2