JVM笔记1

JVM内存与垃圾回收

jvm特点:内存动态分配和垃圾自动收集技术

jvmDOC网址:https://docs.oracle.com/javase/specs/index.html

 jvm书籍:

 

跨语言平台JVM:

Kotlin、Clojure、Groovy、Scala、Jython、JRuby、JavaScript可以编译为JVM可识别的字节码文件,运行在JVM平台上

JVM属于程序虚拟机,常见的虚拟机是系统虚拟机

 JVM整体结构

JVM的指令集架构:是基于栈的指令集架构(指令集架构还包括基于寄存器的),是零地址指令,因为基于栈可以跨平台,但是性能差。

JVM生命周期: 启动、执行、退出

常见java虚拟机:Classic VM(只有解释器)、Exact VM、Hotspot虚拟机(有方法区(永久代/元空间))、JRockit(服务端,只有JIT)、J9虚拟机   (后为三大商用虚拟机) apache harmony(android SDK)、Microsoft JVM、Taobao JVM、Dalvik VM(Android)、ART VM、Graal VM(可能替代Hotspot)

类加载子系统:

Loading: 获取二进制字节流-->方法区运行时数据结构-->内存中生成大的Class对象(作为类的数据的访问入口)

Linking:

Verify: 保证class文件符合JVM要求,主要做文件格式验证、元数据验证、字节码验证、符号引用验证

Prepare: 为类变量分配内存、赋初始值

Resolve: 将常量池的符号引用转换为直接引用

Initialization: 执行类构造器方法clinit,完成类变量和静态代码块中变量的赋值,该方法在多线程下是同步加锁的

类加载器:

分为引导类加载器(BootStrap ClassLoader)和自定义加载器(User-Defined ClassLoader)

ClassLoader派生的加载器都是自定义加载器

Extention ClassLoader(扩展类加载器)和Application ClassLoader(应用/系统类加载器)就是自定义加载器

AppClassLoader(系统类加载器)的上层是ExtClassLoader,ExtClassLoader的上层是BootStrap ClassLoader(用C/C++编写,获取不到,为null)

用户自定义类的加载器是AppClassLoader

Java的核心类库(包名为java、javax、sun)由BootStrap ClassLoader加载

双亲委派机制:收到类加载请求,优先由父类加载器加载,双亲委派机制可以做到沙箱安全机制

运行时数据区

PC寄存器(Program Counter Register)

用来存储指向下一条指令的地址,线程私有,既没有GC,也没有OOM。作用:线程切换后,记录下一指令开始位置

虚拟机栈(JVM Stacks):

线程私有,由一个一个栈帧组成,一个栈帧就是一个方法

设置栈的大小:  -Xxs1m

栈帧结构:局部变量表(Local Variables)、操作数栈(Operand Stack)、帧数据区:【动态链接(Dynamic Linking)、方法返回地址(Return Address)、附加信息】

局部变量表:基本单位是槽,32位(by

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值