一、JVM语言无关性

1.以字节码为基础(Class文件为一组以8位字节为基础单位的二进制流),JVM与Class文件关联,而非与Java语言关联

  

2.代码编译从本地码(Native Code)转为字节码:本地机器码,依赖于OS,不具备跨平台特性

二、Class文件

  Class文件中只有两种数据类型:无符号数和表

  • 无符号数:u1、u2、u4、u8,可以用来描述数字、索引引用、数量值或者字符串值
  • 表:多个无符号数或者其他表构成的复合数据类型,表一般以_info结尾

  

  1.魔数字与版本号

  • 唯一目的:确定这个文件是否是能被虚拟机接受的Class文件
  • 魔数:0xCAFEBABE
  • 次版本号
  • 主版本号

  2.常量池:Class文件中的资源仓库

  constant_pool_count:从1开始计数,0表示不引用常量池项目

  存放两类变量:

  • 字面值:类似Java语言常量,如文本字符串、声明为final的常量值
  • 符号引用:

    a.类和接口的全限定名

    b.字段的名称和描述符

    c.方法的名称和描述符

  常量池中的每一项常量都是一个表,第一位为u1类型的标志位,取值如下:

  

  • 每一项常量中可能有name_index指向常量值得其他项
  • 有些常量如“<init>”、()V等会被Class文件中的field_info、method_info、attribute_info引用

  3.访问标志:用于标志类或者接口的访问信息

  

  4.类索引、父类索引与接口索引集合:确定类的继承层次关系

  • 类引用、父类引用指向一个类型为CONSTANT_Class_info,通过它可以在常量池找到全限定名字符串

  5.字段表集合:用于描述接口或者类中声明的变量,包括类变量(静态变量)与实例变量

  字段表结构如下:

  

  6.方法表集合

  attribute_info:存放编译好的方法代码Code

  

  7.属性表集合

  共21中属性如Code等,属性表结构:

  

  Code:

  

  • max_locals:包含隐藏的this指针,当方法显示没有参数时,此值为1,因为要带入this指针这个参数
  • code_length:编译好的字节码长度
  • code:字节码指令,1个字节长度,所以最多有256种指令

三、字节码指令

  1.字节码与数据类型

  • JVM虚拟机指令:字节长度固定(1字节)的操作码+随后的0-多个所需参数
  • 优点:

  可以获得短小精干的编译代码

  • 缺点:

  8位,最多256种指令

  Class文件格式放弃了编译后代码的操作数长度对其,意味着处理超过一个字节数据时,需要从字节中重建出具体结构的数据,影响性能

  • 执行模型伪代码:

  do {

    自动计算PC寄存器的值加1;

    根据PC寄存器的指示位置,从字节码中取出操作码;

    if (字节码存在操作数) 从字节码流中取出操作数;

    执行操作码所定义的操作;

  }while(字节码流长度 > 0)

  2.指令

  • 加载与储存
  • 运算
  • 类型转换
  • 对象创建与访问
  • 操作数栈管理
  • 控制转移
  • 方法调用与返回
  • 异常处理
  • 同步

深入理解Java虚拟机4-chap6-斗者1星的更多相关文章

  1. 《深入理解Java虚拟机》虚拟机性能监控与故障处理工具

    上节学习回顾 从课本章节划分,<垃圾收集器>和<内存分配策略>这两篇随笔同属一章节,主要是从理论+实验的手段来讲解JVM的内存处理机制.好让我们对JVM运行机制有一个良好的概念 ...

  2. 《深入理解 java虚拟机》学习笔记

    java内存区域详解 以下内容参考自<深入理解 java虚拟机 JVM高级特性与最佳实践>,其中图片大多取自网络与本书,以供学习和参考.

  3. (1) 深入理解Java虚拟机到底是什么?

    好文转载:http://blog.csdn.net/zhangjg_blog/article/details/20380971 什么是Java虚拟机   作为一个Java程序员,我们每天都在写Java ...

  4. 深入理解java虚拟机(7)---线程安全 & 锁优化

    关于线程安全的话题,足可以使用一本书来讲解这些东西.<Java Concurrency in Practice> 就是讲解这些的,在这里 主要还是分析JVM中关于线程安全这块的内容. 1. ...

  5. 深入理解java虚拟机(6)---内存模型与线程 & Volatile

    其实关于线程的使用,之前已经写过博客讲解过这部分的内容: http://www.cnblogs.com/deman/category/621531.html JVM里面关于多线程的部分,主要是多线程是 ...

  6. 深入理解java虚拟机(5)---字节码执行引擎

    字节码是什么东西? 以下是百度的解释: 字节码(Byte-code)是一种包含执行程序.由一序列 op 代码/数据对组成的二进制文件.字节码是一种中间码,它比机器码更抽象. 它经常被看作是包含一个执行 ...

  7. 深入理解java虚拟机(4)---类加载机制

    类加载的过程包括: 加载class到内存,数据校验,转换和解析,初始化,使用using和卸载unloading过程. 除了解析阶段,其他过程的顺序是固定的.解析可以放在初始化之后,目的就是为了支持动态 ...

  8. 深入理解java虚拟机(1)------内存区域与内存溢出

    在C++领域,关于C++的内存存储,结构等等,有一本书:深度探索C++对象模型,讲解的非常透彻. 而Java确把这一工作交给了虚拟机来处理. 我们首先来看看关于内存的问题. 1.问题: 1)java ...

  9. 什么是HotSpot VM & 深入理解Java虚拟机

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

  10. 【Todo】深入理解Java虚拟机 读书笔记

    有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M ...

随机推荐

  1. CTF线下防御战 — 让你的靶机变成“铜墙铁壁”

    本文首发安全客,未经允许禁止转载.原文链接 一. 前言 随着CTF的普及,比赛的形式也有了越来越多的花样,对于线下赛来说,开始出现了安全加固或者防御战之类的环节,亦或者因为拿下靶机后不希望其他攻击者进 ...

  2. session_id()和session_regenerate_id()对原来session文件和其中数据是怎么处理的

    一.session_id()对原来session文件和里面的数据,是怎么处理的? 测验办法:<?php $sid = md5("aaad");session_id($sid) ...

  3. C语言 · 猜算式 · 乘法竖式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x   15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x   *** ------- ...

  4. C语言 结构体(联合体)对齐规则

    /* 结构体(联合体)对齐规则 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* * ...

  5. 【转】WPF自定义控件与样式(10)-进度控件ProcessBar自定义样

    一.前言 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等. 本文主要内容: ProcessBar自定义标准样式: ProcessBar自定义环形进 ...

  6. Ubuntu 16.04设置开机启动脚本的方法

    需求:公司卡片机容量太小,只有100G,由于使用的人比较的多,开机使用后有时候就会出现磁盘空间占满数据写不进去的情况,影响工作进度,而且每次使用完都得关掉卡片机,所以就有必要写个清理磁盘的脚本,当卡片 ...

  7. SpringCloud(一)浅谈SpringCloud

    前言 现在微服务实在是太火了,所以我们必不可少的是要学习一下SpringCloud了,服务化的核心就是将传统的一站式应用 根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享D ...

  8. MapReduce原理

    MapReduce原理 WordCount例子 用mapreduce计算wordcount的例子: package org.apache.hadoop.examples; import java.io ...

  9. Dart

    Dart异步与阻塞 import 'dart:async'; import 'dart:io'; void main() async { for(int i = 0;i<10;i++) { as ...

  10. 算法提高 金属采集_树形dp

    算法提高 金属采集   时间限制:1.0s   内存限制:256.0MB        问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了.一些节点之间有道路相连 ...