字节码

关于Java运行机制

会有一股神秘感。 提交于 2019-12-03 21:12:46
目录 Java运行机制 编译型语言与解释型语言的区别 编译型语言 解释型语言 细数两者之差别 Java的奇怪之处 Java的编译 Java的解释 具体机制 Java运行机制 Java既是编译型语言,也是解释型语言。 首先先查找关于两种语言的特性及运行机制。 编译型语言与解释型语言的区别 编译型语言 什么是编译呢?通过查找资料,大概就是使用专门的编译器,针对特定的平台将高级语言源代码一次性“翻译”成可以被该平台及其执行的机器码,并包装成该平台能够识别的可执行程序的格式。ps:计算机当然只能看不懂我们敲得代码。 解释型语言 解释则是通过专门的解释器对源程序解释成平台需要的机器码并且立即执行,也就是每次执行之前,都需要解释一遍。 细数两者之差别 编译生成的可执行程序可以脱离开发环境,(但是如果要移到另外一个平台上,则需要将源码复制另外平台,并重新编译),而解释型语言程序不能脱离解释器独立运行,但跨平台容易。 编译型语言的执行速度那是相当的快,因为之前高级程序已经被编译成机器语言文件,比如 windows下的exe文件 ,运行可执行程序的时候就不需要再进行编译了,而是直接运行。而解释型语言编写的程序每执行一次,就要翻译一次,效率偏低。 编译型程序可以访问内存的任何区域,相对不安全,而解释型当然在这方面就很安全,很贴心。 编译型程序运行消耗的内存比解释型少一点

php和java的优势

前提是你 提交于 2019-12-03 20:55:57
 现在市场上的电子商务软件基本上可归结为两大阵营,即PHP阵营和Java阵营。但对接触电子商务不久的用户来说,看到的往往只是它们的表相,只是明显的价格差异,却很难看出它们之间的实际差异。下面我们就为大家介绍一下PHP和JAVA各自的优势。 PHP   PHP即“超文本预处理器”,是一种通用开源脚本语言。PHP是在服务器端执行的脚本语言,与C语言类似,是常用的网站编程语言。PHP独特的语法混合了C、Java、Perl以及 PHP 自创的语法。利于学习,使用广泛,主要适用于Web开发领域。 优势 (一)流行,容易上手   PHP是目前最流行的编程语言,这毋庸置疑。它驱动全球超过2亿多个网站,有全球超过81.7%的公共网站在服务器端采用PHP。PHP常用的数据结构都内置了,使用起来方便简单,也一点都不复杂,表达能力相当灵活。 (二)开发职位很多   在服务器端的网站编程中PHP会更容易帮助你找到工作。很多互联网相关企业都在使用PHP开发框架,所以可以说市场对PHP的开发程序员的需求还是比较大的。 (三)仍然在不断发展   PHP在不断兼容着类似closures和命名空间等技术,同时兼顾性能和当下流行的框架。版本是7之后,一直在提供更高性能的应用。 (四)可植入性强   PHP 语言在补丁漏洞升级过程中,核心部分植入简单易行,且速度快。 (五)拓展性强   PHP 语言在数据库应用过程中

[Python]函数基础

一世执手 提交于 2019-12-03 20:29:41
函数基础 函数的作用 所谓 函数 ,就是把 具有独立功能的代码块 组织为一个小模块,在需要的时候进行 调用 => 一些已经实现的功能,比如sum(数组),这种就应该封装为函数,避免 重复造轮子 函数的作用 ,在开发程序时,使用函数可以提高编写的效率以及代码的 重用 . 函数的基本使用 函数的定义 定义函数的格式如下: def 函数名(): # 注意缩进4个空格 # 函数封装的代码 # ... pass def 是英文 define 的缩写 函数名称 应该能够表达 函数封装代码 的功能,方便后续的调用 => 尽量做到见名知意. 函数名称 的命名要符合 标识符的命名规则 可以由 字母,下划线,数字 组成 不能由数字开头 不能与关键字重名 => 这个标识符的规定基本高级语言都是一致的,从C语言开始. 函数调用 调用函数很简单,通过 函数名() 即可完成对函数的调用 => 在Python中 函数定义 在出现在 函数调用 之前,要让Python知道有这个函数. 第一个函数演练 需求 编写一个打招呼 say_hello() 的函数,封装三行打招呼的代码 在函数下方调用打招呼的代码 # 定义了函数只表示封装了一段代码而已 # 如果不主动调用函数,函数是不会主动执行的 # def 关键字告诉了Python解释器这里定义了一个函数 def say_hello(): print("hello 1")

java字节码开源软件

走远了吗. 提交于 2019-12-03 18:34:32
asm :ASM 是一个 Java 字节码操纵框架。它可以直接以二进制形式动态地生成 stub 类或其他代理类,或者在装载时动态地修改类。ASM 提供类似于 BCEL 之类的工具包的功能,但是被设计得更小巧、更快速,这使它适用于实时代码插装。spring实现aop底层依赖cglib,cglib依赖asm。 bcel :Byte Code Engineering Library (BCEL),这是Apache Software Foundation 的Jakarta 项目的一部分。BCEL是 Java classworking 最广泛使用的一种框架,它可以让您深入 JVM 汇编语言进行类操作的细节。BCEL与Javassist 有不同的处理字节码方法,BCEL在实际的JVM 指令层次上进行操作(BCEL拥有丰富的JVM 指令级支持)而Javassist 所强调的源代码级别的工作。 javassit :Javassist是一个开源的分析、编辑和创建Java 字节码 的类库。是由东京工业大学的数学和计算机科学系的 Shigeru Chiba (千叶 滋)所创建的。它已加入了开放源代码JBoss 应用服务器 项目,通过使用Javassist对字节码操作为JBoss实现动态"AOP"框架。 关于java字节码的处理,目前有很多工具,如bcel, asm 。不过这些都需要直接跟 虚拟机

Python历史「解密」Python底层逻辑 及Python 字节码介绍(转帖)

て烟熏妆下的殇ゞ 提交于 2019-12-03 15:24:26
帖子来源:https://www.ituring.com.cn/article/507878 一次纯粹的hacking Python的作者,Guido von Rossum,荷兰人。1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位。尽管,他算得上是一位数学家,但他更加享受计算机带来的乐趣,热衷于做任何和编程相关的活儿。 80年代,掀起了个人电脑浪潮,但受限于个人电脑配置低,所有的编译器的核心是做优化,以便让程序能够运行。在那个时代,程序员恨不得用手榨取计算机每一寸的能力。 有人甚至认为C语言的指针是在浪费内存,至于动态类型,内存自动管理,面向对象…… 别想了,那会让你的电脑陷入瘫痪。 而这种编程方式让Guido感到苦恼。Guido知道如何用C语言写出一个功能,但整个编写过程需要耗费大量的时间。 不过,他还有另一个选择shell。shell可以像胶水一样,将UNIX下的许多功能连接在一起。UNIX的管理员们常常用shell去写一些简单的脚本,以进行一些系统维护的工作,比如定期备份、文件系统管理等等。 然而,shell的本质是调用命令,并不能全面的调动计算机的功能。 Guido希望有一种语言,这种语言能够像C语言那样,能够全面调用计算机的功能接口,又可以像shell那样轻松的编程。 **ABC语言让Guido看到希望。**ABC是由荷兰的数学和计算机研究所开发的

这一次,终于系统的学习了 JVM 内存结构

こ雲淡風輕ζ 提交于 2019-12-03 13:55:19
摘自: https://www.cnblogs.com/jamaler/p/11797273.html 这一次,终于系统的学习了 JVM 内存结构 最近在看《 JAVA并发编程实践 》这本书,里面涉及到了 Java 内存模型,通过 Java 内存模型顺理成章的来到的 JVM 内存结构,关于 JVM 内存结构的认知还停留在上大学那会的课堂上,一直没有系统的学习这一块的知识,所以这一次我把《 深入理解Java虚拟机JVM高级特性与最佳实践 》、《 Java虚拟机规范 Java SE 8版 》这两本书中关于 JVM 内存结构的部分都看了一遍,算是对 JVM 内存结构有了新的认识。JVM 内存结构是指:Java 虚拟机定义了若干种程序运行期间会使用的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁,另一些则与线程一一对应,随着线程的开始而创建,随着线程的结束而销毁。具体的运行时数据区如下图所示: 在 Java 虚拟机规范中,定义了五种运行时数据区,分别是 Java 堆、方法区、虚拟机栈、本地方法区、程序计数器,其中 Java 堆和方法区是线程共享的。接下来就具体看看这 五种运行时数据区。 Java 堆(Heap) Java 堆是所有线程共享的一块内存区域,它在虚拟机启动时 就会被创建,并且单个 JVM 进程有且仅有一个 Java 堆。Java 堆是用来存放对象实例及数组

设计模式之代理模式

妖精的绣舞 提交于 2019-12-03 13:23:38
代理模式 通过代理控制对象的访问,可以详细访问某个对象的方法,在这个方法调用处理,或调用后处理。既(AOP微实现) ,AOP核心技术面向切面编程。 1、代理模式应用场景 SpringAOP、事物原理、日志打印、权限控制、远程调用、安全代理 可以隐蔽真实角色 2、代理的分类 静态代理(静态定义代理类) 动态代理(动态生成代理类) Jdk自带动态代理 Cglib 、javaassist(字节码操作库) 3、静态代理 由程序员创建或工具生成代理类的源码,再编译代理类。所谓静态也就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。 1)、静态代理代码 public interface IUserDao { void save(); } public class UserDao implements IUserDao { public void save() { System.out.println("已经保存数据..."); } } 代理类 public class UserDaoProxy implements IUserDao { private IUserDao target; public UserDaoProxy(IUserDao iuserDao) { this.target = iuserDao; } public void save() {

Java开篇 - 002、Java跨平台机制+环境搭建

核能气质少年 提交于 2019-12-03 11:22:27
本文重点总结内容: 学前: 1、计算机的组成(简单介绍) 跨平台: 1、什么是Java的跨平台特性? 2、Java是如何实现跨平台的?   Java虚拟机   JRE运行环境   JDK开发工具 环境配置 1、jdk安装 2、环境变量配置 一、计算机软硬件组成 1、计算机组成       硬件:主板 CPU 声卡 显卡 网卡 内存 硬盘 电源 计算机组成       软件:操作系统(win mac linux) 应用软件(qq 微信) 2、硬盘上的文件,不同格式文件采用后缀名来区分 .txt .doc .ppt .xls .mp3 .exe .java 所有不同格式的文件都需要有各自的运行环境。我们学习的Java的运行环境就行JRE 二、Java跨平台 1、什么是Java的跨平台特性? Java跨平台职得就是Java语言可以在不同操作系统和终端上进行编译和执行。 2、Java跨平台是如何实现的? 在此首先举个例子:比如我们出国旅游,去不同国家就要会不同国家的语言,这样比较方便出行的沟通。那么如果我们不会各国语言应该如何做呢? 第一种方式:带一个翻译器 第二种方式:带一个翻译 Java跨平台也是如此,Java语言想要在各种平台上编译和执行就得需要一个翻译。而恰恰是这个翻译能翻译各种操作系统上的Java语言,将其编译成可执行文件。 在Java语言种起这个翻译的作用的角色就是:J V M

Laravel中使用QRcode自制二维码

旧街凉风 提交于 2019-12-03 11:02:29
一、配置 1.在项目根目录输入命令 composer require simplesoftwareio/simple-qrcode 1.3.* 2.在config/app.php 的 providers 数组里添加服务提供者. SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class 3.在app/config/app.php 的 aliases 数组里添加别名. 'QrCode' => SimpleSoftwareIO\QrCode\Facades\QrCode::class 4.配置工作完成,下面开始引用 二、应用实例 1.命名空间引入 use SimpleSoftwareIO\QrCode\Facades\QrCode; 2.生成普通二维码(扫描之后内容为填写的字符串) QrCode::generate('This is QRcode create!'); 3.生成中文字符的二维码(扫描之后内容为填写的字符串) QrCode::encoding('UTF-8')->generate('二维码'); 4.将生成的指定的图片格式二维码保存到指定路径 QrCode::encoding('UTF-8')->format('png')->generate('二维码',public_path('image/test.png')); 5

java命令:javac/java/javap

房东的猫 提交于 2019-12-03 10:15:49
一、javac 1. 编译.java文件,生成字节码文件 2. 例子:javac a.java,在当前路径下生成a.class文件 3. 可以用-d参数指定生成文件的路径 二、java 1. 执行.class的字节码文件 2. 命令:java a.class 三、javap 1. jdk自带的反编译工具,把字节码反编译为汇编代码,用于帮助开发中深入理解Java编译器的机制 2. 反编译后的信息:汇编指令、本地变量表、异常表、常量池等 3. 命令:javap -c a.class 参考: https://blog.csdn.net/zhouxukun123/article/details/79121059 https://blog.csdn.net/w372426096/article/details/81664431 来源: https://www.cnblogs.com/june0816/p/5765117.html