首先我们先导入一些基本的包: asm-3.3.jar :操作java字节码的类库;(反射的替代方案,ASM是小巧轻便的 Java 字节码操控框架 ,它能方便地动态生成和改造 Java 代码。) asm-commons-3.3.jar :提供了基于事件的表现形式; asm-tree-3.3.jar ....
分类:
其他好文 时间:
2014-06-23 07:21:01
阅读次数:
209
前几天和一个朋友聊天时说:我有强迫症,每次看到不符合自己审美的代码时,总想重构一下。朋友的观点与大多数人相仿,程序只要满足要求,运行正确就可以。
在现实的工作中一样,每当看到一段优美且高效的代码,我总是喜欢多看几遍,满心的享受。但是我们产品中的太多代码让我这个代码洁癖“患者”看了非常的烦躁:
1. 随便一个源文件都是上百行的函数,有些甚至超过500行(含空行和注释)。
2. 大量没有必要的临时变量定义。
3. 习惯性的把所有变量声明定义放到函数前面,一些大函数甚至超过20行都是函数局部变量的声明和定义。想想...
分类:
其他好文 时间:
2014-06-22 21:22:31
阅读次数:
184
一、代码混淆的定义
Java 是一种跨平台的、解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中。由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名、方法名,并且通过这些名称来访问变量和方法,这些符号带有许多语义信息,很容易被反编译成 Java 源代码。为了防止这种现象,我们可以使用 Java 混淆器对 Java
字节码进行混淆。
混淆就是对...
分类:
移动开发 时间:
2014-06-22 19:47:12
阅读次数:
257
想玩Java这些事必须懂(二)JDK目录的组成 bin下有常用的javac和java命令 lib下有JDK工具命令的字节码tool.jar和dt.jar tool.jar中包含了javac和java可执行命令的字节码PATH和CLASSPATH的作用 PATH是系统变量的环境变量,当没...
分类:
编程语言 时间:
2014-06-22 12:31:07
阅读次数:
261
类装载器ClassLoader类装载器就是寻找类的字节码文件,并构造出类在JVM内部表示的对象组件。类装载器把一个类装入JVM中,要经过三步:1.装载:查找和导入Class文件;2.链接:执行校验、准备和解析(解析是可以选择的);3.初始化:对类的静态变量、静态代码块执行初始化工作;..
分类:
编程语言 时间:
2014-06-22 08:11:36
阅读次数:
276
(一)为什么不采用public成员变量
(1)首先,从语法一致性考虑,客户唯一能访问对象的方法就是通过成员函数,客户不必考虑是否该记住使用小括号()。
(2)其次,使用函数可以让我们对成员变量的处理有更精确的控制。如果我们令成员变量为public,那么每个人都可以读写它!
但如果我们以函数取得或设定其值,我们就可以实现出“不准访问”、“只读访问”以及“读写访问”,我们甚至可以实现“惟写访...
分类:
编程语言 时间:
2014-06-21 22:13:56
阅读次数:
232
导言把一件简单的事情做复杂很容易,把一件复杂的事情做简单却不易。在计算机的世界里,冯.诺依曼把复杂的电脑简化为:存储器,控制器,运算器和I/O设备;丹尼斯·里奇把晦涩的汇编语言简化为258页的《C程序设计语言》;詹姆斯高斯林把繁琐的跨平台编码简化为256条字节码指令;对我们大部分人而言,把简单的事情...
分类:
Web程序 时间:
2014-06-18 08:22:25
阅读次数:
269
概述
诸如tomcat这样的服务器,在启动的时候会加载应用程序中lib目录下的jar文件以及classes目录下的class文件,另外像spring这类框架,也可以根据指定的路径扫描并加载指定的类文件,这个技术可以实现一个容器,容纳各类不同的子应用。
Java类由于需要加载和编译字节码,动态加载class文件较为麻烦,不像C加载动态链接库只要一个文件名就可以搞定,但JDK仍提供了一整套...
分类:
编程语言 时间:
2014-06-18 07:06:58
阅读次数:
259
1.
Python虚拟机会从编译得到的PyCodeObject对象中依次读入每一条字节码指令,
并在当前的上下文环境中执行这条字节码指令。
Python虚拟机实际上是在模拟操作中执行文件的过程
PyCodeObject对象中包含了字节码指令以及程序的所有静态信息,但没有包含
程序运行时的动态信息——执行环境(PyFrameObject)
2.Python源码中的PyFrameObject
typedef struct _frame{
PyObject_VAR_HEAD //"运行时栈"的大小是不确定的...
分类:
编程语言 时间:
2014-06-18 06:33:24
阅读次数:
323
1.字节码指令
LOAD_CONST:从consts表中读取序号为i的元素并压入到运行时栈中
STORE_NAME:改变local名字空间。从符号表names取序号为i的元素作为变量名,
取运行时栈的栈顶元素作为变量值,完成从变量名到变量值的映射关系的创建。
BUILD_MAP:创建一个空的PyDictObject对象,并压入运行时栈
DUP_TOP:将栈顶元素的引用计数增加1,并将它再次压入栈中
ROT_TWO:将栈顶的两个元素进行对调
LOAD_NAME:符号搜索,并将该元素压入运行时栈
Py...
分类:
编程语言 时间:
2014-06-18 00:32:18
阅读次数:
295