JVM入门级知识


Java虚拟机简称JVM

简历:了解JVM基本的结构,了解class文件基本的结构
jvm与Java无关
总结

  1. Java技术体系-再看java
  2. 虚拟机规范再看jvm
  3. 运行时数据区

栈上分配

对没有逃逸出方法体的对象栈上分配
public void alloc{
User u=new User();栈

普通对象在堆中分配,各线程共享。但有GC消耗。
当确定对象不会发生方法逃逸时,可在线程栈上分配对象。此时对象生命周期和方法相同,随栈帧出栈时即可销毁,不需要GC了。

Java技术体系

JDK包含Java程序设计语言、各种硬件平台的Java虚拟机实现、Java类库

  • Java程序设计语言
  • 各种硬件平台上的Java虚拟机实现
  • Java类库
  • Class文件格式
  • 来自商业机构和开源社区的第三方Java类库

JVM虚拟机

JVM是一种规范,虚拟的计算机。
所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中。

  • Java虚拟机是一台执行Java字节码的虚拟计算机,它拥有独立的运行机制,其运行的Java字节码也未必由Java语言编译而成。

  • JVM平台的各种语言可以共享Java虚拟机带来的跨平台性、优秀的垃圾回器, 以及可靠的即时编译器。

  • Java技术的核心就是Java虚拟机(JVM,Java Virtual
    Machine),因为所有的Java程序都运行在Java虚拟机内部。

JVM虚拟机作用

Java虚拟机就是二进制字节码的运行环境,负责装载字节码到其内部,解释/ 编译为对应平台上的机器指令执行。每一条Java指令,Java虚拟机规范中都有详细定义,如怎么取操作数,怎么处理操作数,处理结果放在哪里。

特点

  • 一次编译,到处运行
  • 自动内存管理
  • 自动垃圾回收功能

JVM的位置

JVM是运行在操作系统之上的,它与硬件没有直接的交互。
硬件–操作系统–jvm(JVM在软件层面上)

Java虚拟机家族

目前三大商用虚拟机:HotSpot、JRockit、IBM J9
我们目前使用的是HotSpot ,JDK8自带的

虚拟机规范

  • 定义了虚拟机的基本结构。
  • 定义了类文件的结构。
  • 定义了类的加载机制。
  • 定义了虚拟机执行的字节码类型和功能。

虚拟机整体架构

虚拟机栈
执行一个方法压栈,执行完成出栈

垃圾回收机制:回收 方法区和堆
native:
一个Native Method就是一个java调用非java代码的接口,一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。
前三个线程私有,线程处理完就完了

PC寄存器/程序计数器不需要GC没有OOM线程私有
虚拟机栈不需要GC,出栈结束有可能OOM线程私有
本地栈不需要GC有可能OOM线程私有
需要GC有可能线程公享
方法区需要GC有可能线程公享

类文件结构

平台无关性,语言无关性。
Class文件格式采用一种类似于C语言结构体的伪结构来存储数据。
代码编译的结果从本地机器码转变为字节码, 是存储格式发展的一小步, 却是编程语言发展的一大步

类加载子系统

Java虚拟机把描述类的数据从Class文件加载到内存, 并对数据进行校验、 转换解析和初始化, 最终形成可以被虚拟机直接使用的Java类型, 这个过程被称作虚拟机的类加载。

运行时数据区

  • Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。
  • 这些区域有各自的用途,各自的创建和销毁的时间。有的区域随着虚拟机进程的启动而一直存在, 有的区域则是依赖用户线程的启动和结束而建立和销毁。
	private static int i=0;//方法区
	private int age = 20;//方法区
	private String name = "sunzhang";//方法区,运行时常量池
	User user1 = new  User();//堆  //user1放在栈
	public void test1() {
		int num = 18;//局部变量栈的栈帧

执行引擎

执行引擎是Java虚拟机核心的组成部分之一。
虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
所有的Java虚拟机的执行引擎输入、输出都是一致的:输入的是字节码二进制流,处理过程是字节码解析执行的等效过程,输出的是执行结果。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值