字节码

Python 字节码bytecode

穿精又带淫゛_ 提交于 2019-12-07 19:32:33
字节码bytecode dis模块是Python字节码反汇编器。通过反汇编支持Cpython的字节码分析。 前置知识 在看字节码之前,先要了解一下code object和frame object,它们在 datamodel.html 中有介绍 例子: >>> import dis >>> def hello(): ... print('Hello World!') ... >>> hello.__code__ <code object hello at 0x1066683a0, file "<stdin>", line 1> __code__ 属性显示了编译后的函数体the compiled function body, 它是一个 code object 。 code object 代码对象 code模块中的code类产生code对象。 >>> type(hello.__code__) <class 'code'> code object一个python的内部类型。即解释器内部使用的类型 。也称为 bytecode。 code类有多个个data attributes(实例变量),其中: co_consts 为一个包含字节码所使用的字面值的元组。如果code object代表一个函数,这个属性的第一项是函数的文档字符串。 co_varnames 为一个包含局部变量名称的元组。 'co

1. Java 环境

笑着哭i 提交于 2019-12-07 15:11:06
1. Java 环境 1999年发布第二代java平台 简称 Java2 标准版 Standard Edition J2SE 企业版 Enterprise Edition J2EE 微型版 Micro Edition J2ME 特点 跨平台性 面向对象 简单性 优化 C++多继承 指针等 健壮性 垃圾回收,异常处理 多线程 大数据相关开发 JVM Java Virtual Machine 虚拟机 不跨平台 内存中开辟空间, 源文件 编译 字节码 计算机只认识两个 0 1 硬件组成,通电,不通电 源文件.java 字节码.class JRE java Runtime Environment 运行环境 运行 字节码class 包含 JVM 运行别人写好的java程序 JDK Java Development Kit 开发工具包 开发时需要的工具 包含 JRE 包含 JVM 安装开发环境 安装 JDK 官网 www.oracle.com 安装JDK 不需要重复安装JRE 可以直接跳过 环境变量配置 JAVA_HOME jdk 安装目录 Path %JAVA_HOME%\bin %JAVA_HOME%\jre javac.exe 编译工具 java.exe 执行工具 在底层的doc命令中运行 bin 文件夹 工具 include 文件夹 包含了其他语言的程序 native 修饰符 jre

JVM

大兔子大兔子 提交于 2019-12-07 12:52:28
一、JVM一些基本概念 1、JVM和普通虚拟机 JVM:Java Virtual Machine,程序自己独立的运行环境;堆栈、寄存器、字节码指令;可以运行多种语言:Java、Scala、Grovvy; 普通虚拟机:能完整提供虚拟主机的PC,必须安装操作系统,以CPU指令运行。例如VMWare、Visual Box 2、JVM/JDK/JRE关系 JVM :(Java Virtual Machine),只认识 class文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。 JRE :(Java Runtime Environment),Java 运行时环境。它主要包含 jvm 的标准实现和 Java 的一些基本类库。JRE = JVM + Java 类库。 JDK :(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。 显然,这三者的关系是:一层层的嵌套关系 JDK>JRE>JVM 3、JVM产品有哪些 HotSpot、Jrockit、J9 4、为什么会出现JVM Java程序编译后的文件是*.class文件,*

Java SE(一)——java基础

左心房为你撑大大i 提交于 2019-12-07 08:40:29
目录 一、Java是什么 1.2、Java相关网站 1.3、发展历史 1.4、Java组成 二、Java能做什么 三、Java语言的特点 四、第一个Java程序 4.1、安装JDK并安装 4.2、配置环境变量 4.2.1、手动添加 4.2.2、批处理添加一 4.2.3、批处理添加二 4.3、编辑源代码 4.4、编译运行 4.5、运行机制解析 五、使用IDE开发Java程序 六、下载 一、Java是什么 Java 是由 Sun Microsystems 在 1995 年首先发布的编程语言和计算平台。Java 是一项用于开发应用程序的技术,可以让 Web 变得更有意思和更实用。有许多应用程序和 Web 站点只有在安装 Java 后才能正常工作,而且这样的应用程序和 Web 站点日益增多。Java 快速、安全、可靠。从笔记本电脑到数据中心,从游戏控制台到科学超级计算机,从手机到互联网,Java 无处不在! java是当前最流行,应用最广泛的编程语言。 点击查看tiobe排行 1.2、Java相关网站 Oracle英文:https://www.oracle.com/index.html Oracle中文:http://www.oracle.com/cn/index.html Java中文:https://www.java.com/zh_CN/ 1.3、发展历史 20世纪90年代

JavaSE_Java跨平台原理

孤人 提交于 2019-12-06 22:35:37
Java语言的核心优势就是跨平台。 C/C++语言都是直接编译成针对特定平台的机器码,如果要跨平台,需要借用相应的编译器重新编译。Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。 字节码文件不面向任何具体平台,只面向虚拟机。 Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。因此,Java语言具有了一次编译,到处运行的特点,也就是说编译后的.class文件可以跨平台运行,前提是该平台具有相应的Java虚拟机。但是性能比C/C++要低。其原理决定了其性能没有C/C++高。 附个图说明一下: 来源: https://www.cnblogs.com/sinoaccer/p/11999930.html

使用Jacoco获取 Java 程序的代码执行覆盖率

[亡魂溺海] 提交于 2019-12-06 21:15:31
Jacoco是Java Code Coverage的缩写,顾名思义,它是获取Java代码执行覆盖率的一个工具,通常用它来获取单元测试覆盖率。它通过分析Java字节码来得到代码执行覆盖率,因此它还可以分析任何基于JVM的语言(如Croovy、Kotlin)的覆盖率。本文不讨论如何用Jacoco获取单元测试的代码覆盖率,而是从Jacoco的原理出发,介绍如何通过Jacoco获取SIT或者UAT的测试覆盖率。更准确来讲,是获取一个应用执行过的代码占总代码的比率。包括字节码指令覆盖率,分支覆盖率,圈复杂度覆盖率,行覆盖率,方法覆盖率和类覆盖率。 Jacoco原理简介 Jacoco通过修改喂给JVM的字节码来达到获取那些代码执行了的目的。修改方式有两种,一种在线(on-the-fly),是通过Java agent,在JVM执行字节码之前动态对其进行修改,这种方式更灵活,也是Jcoco的一大特性。另一种是离线(offline)模式,在Java程序字节码文件(.class文件)生成之前进行修改,这样的字节码就不纯了。一般在无法使用on-the-fly方式的时候才使用offline方式。 上面这些概括起来讲,Jacoco最牛X的地方就在于它能够知道一个基于JVM的应用程序中哪些代码(指令、分支、行、方法、类)被执行了。用它除以总代码量,就得到了代码执行覆盖率。 由此

java概述和java环境按照,java开发体验

点点圈 提交于 2019-12-06 16:27:01
java概述: Java 的发展可以归纳如下的几个阶段。 ( 1 )第一阶段 ( 完善期 ) : JDK 1.0 ( 1995 年推出 ) 一 JDK 1.2 (1998 年推出, Java 更名为 Java 2) ; ( 2 )第二阶段 ( 平稳期 ) : JDK 1.3 一 JDK 1.4 ; ( 3 )第三阶段 ( 发展期 ) : JDK 1.5(2005 年推出 ) 一 JDK 1.7( 被 Oracle 收购后推出 ) 。 一般企业都不会用最新版本 因为稳定性能差。 而且 jdk1.7=java7 在开发上更是分为了 Java SE, Java EE, Java ME ,下面分别解释这 3 个方向的区别。 ( 1 ) J2SE : Java 2 Platform Standard Edition( 2005 年之后更名为 Java SE ) 。包含构成 Java 语言核心的类。比如数据库连接、接口定义、数据结构、输入 / 输出、网络编程。 (是java的基础,整个二阶段都在学javaSE) ( 2 ) J2EE : Java 2 Platform Enterprise Edition ( 2005 年之后更名为 Java EE ) 。 Enterprise Edition( 企业版 ) 包含 J2SE 中的所有类,并且还包含用于开发企业级应用的类。比如 EJB 、

细说JVM内存模型

与世无争的帅哥 提交于 2019-12-06 16:13:35
细说JVM内存模型 前言 在正式学习 JVM 内存模型之前,先注意以下几个是问题: JVM 内存模型与 JAVA 内存模型不是同一个概念。JVM 内存模型是从运行时数据区的结构的角度描述的概念;而 JAVA 内存模型是从主内存和线程私有内存角度的描述。从以下两张图可以看出: ​ JAVA内存模型 ​ JVM内存模型 Java虚拟机总共由三大模块组成: 类加载器子系统 运行时数据区执行引擎 本篇我们介绍第二大模块——运行时数据区(JVM内存模型)。 其实虚拟机的这些模块并不是独立的,都是相互联系的。java 文件编译为 class 文件,通过类加载子系统加载,信息再到 JVM 托管的内存中(部分操作会与本地内存交互)的流转,再到垃圾回收等等,都是一系列的操作。 本系列的博客为了更加清晰的描述清楚功能和原理,将其分为几个章节写作。 概览 运行时数据区分为几大模块(如上图所示): 线程共享区: JAVA堆 方法区 线程私有区: JAVA栈 本地方法栈 程序计数器 本文中,我们将从以下几个方法面来分析各个区域: 功能 存储的内容 是否有内存溢出和内存泄露 是否进行垃圾回收 对应的垃圾回收算法 垃圾回收流程 性能调优 线程私有区 程序计数器 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器

java中编译的过程

允我心安 提交于 2019-12-06 15:17:00
首先创建一个.java的文件,里面必须要有main()方法,再通过javac编译成一个.class的字节码文件。然后jvm调用即时编译器转换成二进制让CPU执行 Javac是一种编译器,能将一种语言规范转化成另外一种语言规范,通常编译器都是将便于人理解的语言规范转化成机器容易理解的语言规范,如C/C++或者汇编语言都是将源代码直接编译成目标机器码,这个目标机器代码是CPU直接执行的指令集合。这些指令集合也就是底层的一种语言规范。 Javac的编译器也是将Java这种对人非常友好的编程语言编译成对对所有机器都非常友好的一种语言。这种语言不是针对某种机器或某个平台。怎么消除不同种类,不同平台之间的差异这个任务就有JVM来完成,而Javac的任务就是将Java源代码语言转化为JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言。 Javac的任务就是将Java源代码编译成Java字节码,也就是JVM能够识别的二进制代码,从表面看是将.java文件转化为.class文件。而实际上是将Java源代码转化成一连串二进制数字,这些二进制数字是有格式的,只有JVM能够真确的识别他们到底代表什么意思。 编译器把一种语言规范转化为另一种语言规范的这个过程需要哪些步骤?回答这个问题需要参照《编译原理》,总结过程如下: 1)词法分析:读取源代码,一个字节一个字节的读进来

Java字节码扩展

拈花ヽ惹草 提交于 2019-12-06 14:52:31
异常表 代码一: public class Test03 { public void test() { try { InputStream is = new FileInputStream("123.txt"); ServerSocket serverSocket = new ServerSocket(1234); serverSocket.accept(); } catch (FileNotFoundException f) { } catch (IOException i) { } catch (Exception e) { } finally { System.out.println("finally"); } } } 编译代码一,然后利用javap进行反编译查看结果: ... Code: stack=3, locals=4, args_size=1 0: new #2 // class java/io/FileInputStream 3: dup 4: ldc #3 // String 123.txt 6: invokespecial #4 // Method java/io/FileInputStream."<init>":(Ljava/lang/String;)V 9: astore_1 10: new #5 // class java/net/ServerSocket