
java
文章平均质量分 53
OSTCB
这个作者很懒,什么都没留下…
展开
-
==和equals怎么用?java如何判断相等
相信很多人都已经习惯了用==符号判断值是否相等。大部分人也都知道对于对象来说==号其实也就是比较两个对象的内存地址。但是为什么有的时候使用==就可以判断相等,而有的时候,必须要使用equals呢?1.基本数据类型,如int,long,float,char,byte等:使用==判断是否相等是没有问题的。对于值类型,jvm将其存储在栈中,==即直接比较栈中两者内容。2.一般引用类型,对于引用类原创 2016-06-21 15:45:38 · 4311 阅读 · 0 评论 -
Android ART Hook 实现 - SandHook
简介Github: https://github.com/ganyao114/SandHook关于 Hook,一直是比较小众的需求。本人公司有在做 Android Sandbox(类似 VA),算是比较依赖 Hook 的产品,好在 Android Framework 大量使用了代理模式。所以也不用费劲在VM层作文章了,直接用动态代理即可。然而,VM 层的 Java Hook 还是有些需求的,...原创 2019-01-27 16:11:20 · 24242 阅读 · 4 评论 -
JAMVM + openjdk8 编译和调试
编译JAMVM 默认使用 GNUClasspath,但是这样的话仅支持 java1.5。这里主要介绍 JAMVM 搭配 openjdk classpath 使用,可以支持到 openjdk9,这里采用 openjdk8:源码下载这里千万千万不要直接下载官网的源码,就是下面这个链接,因为 release 好久没更新,有些 fix 没进去。https://sourceforge.net/pr...原创 2018-11-27 21:17:28 · 1879 阅读 · 0 评论 -
JVM JIT(JAMVM)
简介为了提高虚拟机的执行效率,对于解释执行的虚拟机来说,解析字节码指令和指令分发的开销时非常巨大的。可以想象 Native Code 执行 1 + 2 仅仅需要一行机器指令,而栈则需要 取指令->匹配指令 handler -> 跳转到 handler -> 执行 handler 至少 4 条机器指令。简单来说,执行一条 jvm 指令需要耗费数倍于同等机器指令的周期。对于偶尔...原创 2018-11-30 10:44:28 · 1066 阅读 · 0 评论 -
JVM 解释器优化(JAMVM)
简介在前面的文章中有介绍过 miniJVM 的具体实现,但是 miniJVM 的解释器部分仍然是比较简单的 Switch 指令分发,从执行效率上来说是比较落后的。同样是轻量级的 JVM,jamvm 在性能方面就要优秀很多,最新版本 2.0.0 支持了 openjdk8,并且支持 java 8 的所有特性,包括 miniJVM 不支持的 Reference。jamvm 已经非常古老了,Andr...原创 2018-11-21 17:48:36 · 1169 阅读 · 0 评论 -
记一次 JVM 源码分析(5.异常处理)
异常异常打印Java 如果发生异常,通常会调用 Throwable.printStackTrace 去打印堆栈信息。堆栈信息包括完整类名,方法名,java 文件名,行号而这样的信息根据发生 Crash 线程所经历的n个方法会打印出n行。整个过程被称为栈回朔栈回朔栈回朔的过程发生于异常被 New 出来的时候Throwable.backtrace 这个 Throwbale 的成员变量就...原创 2018-11-14 12:21:51 · 439 阅读 · 0 评论 -
记一次 JVM 源码分析(3.内存管理与GC)
简介miniJVM 的内存管理的实现较为简单原创 2018-11-08 12:41:25 · 1473 阅读 · 1 评论 -
记一次 JVM 源码分析(4.解释器与方法执行)
简介miniJVM 作为一个 mini 的 Java VM,实现了 Switch 解释器,并不支持主流 JVM 的 JIT 或者更为复杂的 AOT。但这样对于我们了解字节码的执行已经足够了。字节码指令基于堆栈字节码指令类似于汇编指令,但是不同的是:一行汇编代码的格式一般都是 - opcode 操作数1 操作数2然而字节码指令格式是 opcode + 栈字节码的所有操作数都存在运行...原创 2018-11-13 15:33:07 · 1378 阅读 · 4 评论 -
记一次 JVM 源码分析(2.初始化与类加载)
前言首先概括一下 JVM 运行流程:JVM 初始化 加载主类 运行 Main 方法 加载其他类 运行其他方法 GC 开始JVM 初始化JVM 的入口位于 /mini_jvm/main.c ----- main() 方法main 方法的主要任务是:解析参数并保存留到后面初始化的时候读取最后带着参数 List 进入到真正的入口:ret =...原创 2018-11-05 22:06:11 · 902 阅读 · 4 评论 -
记一次 JVM 源码分析(1.简介)
简介 本来打算直接看 ART 的源码,一看 Android P 的已经十分庞大了,所以打算找一个小型的 JVM 热热身,想起了以前功能机上的 Java KVM,但是又太过古老。翻 github 偶然翻到一个开源的 Mini Jvm,竟然还支持 Java8 标准,所以准备以此入手了解 JVM。Mini JVMMiniJVM 原始 repo:https://github.com/digital...原创 2018-11-05 20:59:22 · 783 阅读 · 0 评论 -
Android 被动依赖注入框架
1.lazyInject被动依赖注入框架 for Android Github2.配置关闭 Instant RunSetting->Build->Instant Run 此项功能与 AspectJ(本项目依赖 AsoectJ) 冲突 Gradle根目录/build.gradle buildscript { ... ...原创 2018-04-17 17:13:58 · 2182 阅读 · 0 评论 -
Retrofit 原理简析
简介 Retrofit 所做的事情简单来说就是将你的 Http 业务 API --> Http 请求实现,类似于 Spring MVC 中的 Controller,它的主要任务是解析你的业务接口,从接口上获取你的 Http 接口协议,然后组装 Http 请求,进行异步 Request。 Retrofit 整合了多个组件,包括 JSON/XML 的 ORM 映射,用于解析返回值;Http原创 2017-07-20 15:20:37 · 1081 阅读 · 0 评论 -
Android 架构设计 本科《毕业论文》
不知不觉学生时代已经结束,由于在 Android 上面花了不少功夫,所以这次毕业论文也是对我 Android 学习的一次总结,基本上都是自己写的。有关 Android 架构设计的一些想法,当然也有一些主流 Android 框架的源码解析(biru可以下来看一看。文档下载地址:https://github.com/ganyao114/Android_Architecture目录:原创 2017-07-20 14:56:54 · 5313 阅读 · 2 评论 -
java 反编译器源码分析
简介由于工作需要反编译分析 java 源码,于是需要反编译器做些改动,所以就有了这篇文章。这次要分析的反编译器是 Femflower,是著名 IDE Idea 的反编译器。源码也是从 Idea 开源部分抠出来的。[Github](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/原创 2017-04-30 23:27:57 · 5416 阅读 · 0 评论 -
打造JSON的ORM解析框架
JSON解析原创 2016-09-08 16:47:54 · 2100 阅读 · 0 评论 -
关于synchronized与lock的性能比较
记得当初看教程的时候大家都说lock性能比好不少,最近需要自己设计一个缓存终于要自己尝试一番了。1.关于两者的实现的比较A).一般认为synchronized关键字的实现是源自于像信号量之类的线程同步机制,涉及到线程运行状态的切换,在高并发状态下,CPU消耗过多的时间在线程的调度上,从而造成了性能的极大浪费。然而真的如此么? B).lock实现原理则是依赖于硬件,现代处理器都支持CAS指令,所谓C原创 2016-09-09 13:41:35 · 13573 阅读 · 4 评论 -
SandHook 第四弹,Android Q 支持 & Hidden API & Inline 的特别处理
SandHook目前支持 4.4 - 10.032/64 bit支持 Xposed APIGithub:https://github.com/ganyao114/SandHookAndroid Q 支持Hidden Api这个是从 Android P 就开始引入的反射限制机制。目前来说有几种方案:Hook 法,Hook 某些判断函数,修改 ART 对限制 API 的判断流程...原创 2019-03-15 21:08:08 · 3322 阅读 · 4 评论