虚拟机
layout: post title: “2019-02-20-虚拟机” date: 2019-02-20 12:11:30 +0800
- android 源码
https://www.cnblogs.com/suxiaoqi/p/5109881.html
http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/view/ViewRootImpl.java
- java虚拟机
IBM J9 Java
https://github.com/eclipse/openj9
- java虚拟机是操作系统的一个应用程序,作用 读取class文件并执行
1) 维护一个运行时 2) 将虚拟机指令/线程映射到操作系统 3) 建立底层C++的链接
基本内容:
加载类 存放变量 变量计算和存储
高级内容:
垃圾回收 线程管理 锁管理 网络请求
边边角角的内容 比如字体,电量,系统性能检测(原理)等
4) 内部结构
类加载系统
执行引擎
- java指令集 248个指令
内存结构
- 数据区
- 所有线程共享
-
方法区 类文件信息
这个类型的完整有效名称(全名=包名.类名)
这个类型直接父类的完整有效名称( java.lang.Object除外,其他类型若没有声明父类,默认父类是Object)
这个类型的修饰符(public、abstract、final的某个子集)
这个类型直接接口的一个有序列表
类型的常量池( constant pool)
域(Field)信息
方法(Method)信息
除了常量外的所有静态(static)变量
-
堆 对象存储空间和数组
-
- 单个线程独有
- 程序计数器 保存线程的下一个指令
- 栈
- 由栈帧组成,栈帧内包含当前方法的局部变量,与执行方法一一对应.
随着函数进入而入栈,随着函数的结束而出栈
( Java虚拟机不使用寄存器保存计算的中间结果,而是用Java堆栈在存放中间结果。这使得Java虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java虚拟机。 )
- 局部变量表
- 操作数栈
- 动态连接
- 方法返回地址
- 附加信息
- 由栈帧组成,栈帧内包含当前方法的局部变量,与执行方法一一对应.
随着函数进入而入栈,随着函数的结束而出栈
( Java虚拟机不使用寄存器保存计算的中间结果,而是用Java堆栈在存放中间结果。这使得Java虚拟机的指令更紧凑,也更容易在一个没有寄存器的设备上实现Java虚拟机。 )
- 所有线程共享
- 生命周期
一个运行中的Java虚拟机有着一个清晰的任务:执行Java程序。程序开始执行时他才运行,程序结束时他就停止。你在同一台机器上运行三个程序,就会有三个运行中的Java虚拟机。 Java虚拟机总是开始于一个main()方法。在程序执行时,你必须给Java虚拟机指明这个包换main()方法的类名。 Main()方法是程序的起点,他被执行的线程初始化为程序的初始线程。程序中其他的线程都由他来启动。Java中的线程分为两种:守护线程 (daemon)和普通线程(non-daemon)。守护线程是Java虚拟机自己使用的线程,比如负责垃圾收集的线程就是一个守护线程。当然,你也可 以把自己的程序设置为守护线程。包含Main()方法的初始线程不是守护线程。 只要Java虚拟机中还有普通的线程在执行,Java虚拟机就不会停止。如果有足够的权限,你可以调用exit()方法终止程序。
- 问题
HashMap是不是存在堆里面,如何查看HashMap的类信息.
异常是如何处理的
虚拟机和spring,虚拟机和android
java运行时和Kotlin运行时对比
参考文档: https://www.xuebuyuan.com/3194394.html https://blog.csdn.net/ningjiebing/article/details/79961035