字节码

查看python字节码

你离开我真会死。 提交于 2019-12-16 08:12:03
1.查看python所有的字节码列表的方法 : 执行这段代码就能看到字节码的列表: import opcode for op in range ( len ( opcode . opname ) ) : print ( '0x%.2X(%.3d): %s' % ( op , op , opcode . opname [ op ] ) ) 既然叫“字节码”,这些操作码自然是以字节为单位的咯,于是最多只能表示256个不同的操作码。Python实际上只用了百来个操作码。 操作码小于90的为无参数的,指令仅包含操作码自身,共1字节;大于等于90的,则每条指令在操作码之后还带有1个参数,参数长度为2字节,共3字节。 Python程序的字节码在运行时以PyStringObject的形式保存在PyCodeObject的co_code域里。co_code域只含有指令而不包含别的程序数据;变量名、常量等数据均放在别的域里。 Python的字节码指令集是基于栈的指令集。这里说的“栈”不是指函数调用栈,而是指专门用于求值的栈,可以称为“求值栈”(evaluation stack)或者“操作数栈”(operand stack)。求值过程的临时变量都放在求值栈上,指令集中的大部分都是与栈打交道。 例如3 + 4会变成: LOAD_CONST 0 (3) LOAT_CONST 1 (4) BINARY_ADD

Python 入门之Python简介

元气小坏坏 提交于 2019-12-16 07:21:40
1、Python简介: (1) Python的出生: ​ python的创始人为吉多·范罗苏姆(Guido van Rossum)(中文名字:龟叔)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 ​ 2019年6月的TIOBE排行榜,Python占据第三的位置, Python崇尚优美、清晰、简单,是一个优秀并广泛使用的语言。 (2)Python的主要应用领域: <1>、 云计算: ​ 云计算最火的语言, 典型应用OpenStack <2>、 Web开发: ​ 众多优秀的WEB框架,众多大型网站均为Python开发,Youtube, Dropbox, 豆瓣。。。典型WEB框架有Django <3>、 科学运算、人工智能: ​ 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas <4>、 系统运维: ​ 运维人员必备语言 <5>、 爬虫: ​ 通过代码来模拟人进行页面访问,对信息进行批量的获取 <6>、 金融: ​ 量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很厉害,生产效率远远高于c,c++,java,尤其擅长策略回测

JVM内存结构概述

大兔子大兔子 提交于 2019-12-16 07:04:19
写在前面 基本问题: 介绍下 Java 内存区域(运行时数据区)。 JDK7 和 JDK8 在内存结构上有什么变化 拓展问题: String 类和常量池 8种基本类型的包装类和常量池 概述 由于 java 语言天生自带内存自动管理机制,所以 java 程序开发时几乎不用考虑内存的回收,不再需要像 C/C 程序开发那样为一个 new 出来的对象去写对应的 delete/free 操作,也不容易出现内存泄露和内存溢出问题。也正是因为 java 程序将内存管理都交给 JVM 来处理,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。 运行时数据区域 根据 Java 虚拟机规范 的规定, Java 虚拟机(Java Virtual Machine, JVM)在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域:程序计数器(Program Counter Register)、Java虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)、方法区(Method Area)、堆(Heap)。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s5k0RGeU-1576162066977)(https://xiaolong.li/images/jvm/2019-10-07-jvm-jdk-6.jpg

【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

北城余情 提交于 2019-12-15 13:48:16
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb (【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! Java 内存区域详解 如果没有特殊说明,都是针对的是 HotSpot 虚拟机。 写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄和直接指针两种方式) 拓展问题 String 类和常量池 8 种基本类型的包装类和常量池 一 概述 对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C++程序开发程序员这样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。 二 运行时数据区域 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域。JDK. 1.8 和之前的版本略有不同

Java学习笔记01-java简介-从入门到全栈

∥☆過路亽.° 提交于 2019-12-15 10:27:04
Java简介 java简介 1. 优势 2. 运行机制 3. JVM、JRE、JDK 4. Java文件夹目录 java简介 1. 优势 跨平台/可移植 比如:Java的int永远都是32位。不像C++可能是16,32,可能是根据编译器厂商规定的变化。 安全性 Java适合于网络/分布式环境,可以很容易构建防病毒,防篡改的系统。 面向对象 高性能 通过虚拟机的优化提升运行效率。 比如,通过JIT(JUST IN TIME)即时编译技术提高运行效率。 将一些“热点”字节码编译成本地机器码,并将结果缓存起来,在需要的时候重新调用。 分布式 Java是为Internet的分布式环境设计的,因为它能够处理TCP/IP协议。事实上,通过URL访问一个网络资源和访问本地文件是一样简单的。Java还支持远程方法调用(RMI,Remote Method Invocation),使程序能够通过网络调用方法。 多线程 Java多线程的简单性是Java成为主流服务器端开发语言的主要原因之一。 健壮性 Java是一种健壮的语言,吸收了C/C++ 语言的优点,但去掉了其影响程序健壮性的部分(如:指针、内存的申请与释放等)。 Java程序不会造成计算机崩溃。即使Java程序也可能有错误。如果出现某种出乎意料之事,程序也不会崩溃,而是把该异常抛出,再通过异常处理机制加以处理。 2. 运行机制 3. JVM

基础篇:浅谈jre、jvm、jdk

六月ゝ 毕业季﹏ 提交于 2019-12-15 06:40:26
一、 详细介绍 1、JVM – java virtual machine JVM就是我们常说的java虚拟机,它是整个java实现跨平台的 最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可 以在虚拟机上执行,也就是说class并不直接与机器的操作系统相对应,而是经过虚拟机间接与操作系统交互,由虚拟机将程序解 释给本地系统执行。 JVM 是 Java 平台的基础,和实际的机器一样,它也有自己的指令集,并且在运行 时操作不同的内存区域。 JVM 通过抽象操作系统和 CPU 结构,提供了一种与平台无关的代码执行方法,即与特殊的实现方 法、主机硬件、主机操作系统无关。但是在一些小的方面, JVM 的实现也是互不相同的,比如垃圾回收 算法,线程调度算法(可能不同 OS 有不同的实现)。 JVM 的主要工作是解释自己的指令集(即字节码)到 CPU 的指令集或 OS 的系统调用,保护用户免被恶意程序骚扰。 JVM 对上层的 Java 源文件是不关心的,它关注的只是由源文件生成的类文件( class file )。类文件的 组成包括 JVM 指令集,符号表以及一些补助信息。 2、JRE – java runtime environment JRE是指java运行环境。光有JVM还不能成class的 执行,因为在解释class的时候JVM需要调用解释所需要的类库lib

JVM之运行时数据区域

帅比萌擦擦* 提交于 2019-12-15 04:45:07
1. JVM运行数据区域如下图所示: 1.1程序计数器 程序计数器占用很小的内存空间,用来看做当前线程执行的字节码的行号指示器,通过计数器的值来选取下一个需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器来完成。每个线程都有自己的程序计数器,也就是说它是线程私有的内存。 1.2虚拟机栈 虚拟机栈与程序计数器一样,也是线程私有的,占用内存也是很小一块,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。 局部变量表存放着编译器可知的8中基本数据类型(int、short、long、boolean、byte、double、float、char)、对象引用。 栈的生命周期很短随着线程或方法的开始而开始,随着线程或方法的结束而结束。 1.3本地方法栈 本地方法栈与虚拟机栈所发挥的作用非常相似,区别在于虚拟机栈是为虚拟机执行Java方法(字节码)服务,本地方法栈是为虚拟机使用Native方法服务(Native方法是用来调用非Java接口)。 1.4堆 堆是Java虚拟机中所管理的内存中最大的一块。Java堆是被线程共享的一块内存区域,在虚拟机启动的时创建

Java反编译工具

拈花ヽ惹草 提交于 2019-12-15 04:25:19
本文主要介绍三款Java反编译工具,分别为javap、jad、CFR,三款工具各有优缺点,可以根据需求合理选择。 文章目录 一、理解Java编译与反编译 1.1 宏观上的概念 1.2 Java编译与反编译 二、灵活选取Java反编译工具 2.1 JDK自带的工具--javap 2.2 好用的工具--jad 2.3 功能强大的工具--CFR 一、理解Java编译与反编译 1.1 宏观上的概念 编程语言分为低级语言和高级语言。其中机器语言和汇编语言属于低级语言,直接用计算机指令编写程序,而C、C++、Java、Python等属于高级语言,用语句编写程序,语句是计算机指令的抽象表示。低级语言是计算机认识的语言、高级语言是程序员认识的语言。 所谓的编译,就是将高级语言翻译成计算机能识别的低级语言的过程,而反编译则是将已经编译好的语言还原成未编译高级语言的过程。 1.2 Java编译与反编译 针对于Java语言的编译,是将.java源文件通过javac编译器编译成.class字节码文件。字节码文件并不能由计算机直接识别,需要借助JVM内嵌的解释器解释成机器语言后执行。而Java语言的反编译,指的是将.class字节码文件还原成近似java源代码文件。此处近似是指反编译得到的是常量优化之后的代码。 二、灵活选取Java反编译工具 2.1 JDK自带的工具–javap javap 是 JDK

Java开发常用类库和API(一)

做~自己de王妃 提交于 2019-12-15 04:18:12
一个有经验的Java开发人员特征之一就是善于使用已有的轮子来造车。《Effective Java》的作者Joshua Bloch曾经说过:“建议使用现有的API来开发,而不是重复造轮子”。在本文中,我将分享一些Java开发人员应该熟悉的最有用的和必要的库和API。顺便说一句,这里不包括框架,如Spring和Hibernate因为他们非常有名,都有特定的功能。 本文总结了日志、JSON解析、单测、XML解析、字节码处理、数据库连接池、集合类、邮件、加密、嵌入式SQL数据库、JDBC故障诊断以及序列化等20个方面的常用类库。都是你日常开发经常可能要用到的,现在不用不要紧,但是你要知道有这么一篇文章可以供你参考。 不知道不可怕,可怕的是你不知道你不知道。 一、日志相关类库 日志库是很常见的,因为你在每一个项目中都需要他们。打印日志是服务器端应用中最重要的事情,因为日志是你了解你的程序发生了什么的唯一途径。尽管JDK附带自己的日志库,但是还是有很多更好的选择可用,例如 Log4j 、 SLF4j 和 LogBack。 Java开发人员应该熟悉日志记录的利弊,并且了解为什么SLF4J要比Log4J要好。 二、JSON解析库 在当今世界的web服务和物联网中(IoT),JSON已经取代了XML,成为从客户端到服务器传送信息的首选协议。有一个好消息和一个坏消息。坏消息是JDK没有提供JSON库

Java深入|JVM之类文件结构

社会主义新天地 提交于 2019-12-15 03:32:04
类文件结构 文章目录 1)平台无关性、语言无关性 2)Class类文件结构 3)字节码指令 概述 平台无关性、语言无关性 ; 实现一次编写,到处运行 各种不同平台的虚拟机与所有平台都使用统一的程序存储格式—— 字节码 ,这是构成平台无关性的基石,而实现语言无关性的基础仍然是虚拟机和字节码存储格式 Java 源代码首先需要使用 Javac 编译器编译成 .class 文件,然后由 JVM 执行 .class 文件,从而程序开始运行。 Java虚拟机只和存储字节码的Class文件这种特定的二进制文件格式关联,且并不关心Class的来源是何种语言 Class类文件结构 Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件之中,中间没有添加任何分隔符。 Class文件格式采用一种类似C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型: 无符号数和表 magic number:每个Class文件的头4个字节 判断该文件是否为一个能被虚拟机接受的Class文件 版本号 包含主版本号(Major Version)和一系列次版本号(Minor Version) 次版本号 第5和第6个字节 主版本号 第7和第8个字节 判断该文件是否在虚拟机处理的有效范围内 常量池 使用一个前置的容量计数器加上若干个连续的常量项 存放着两大类常量: