- adb调试常用
vimer-hz
3.2.1Android系统经验adb
1adbshelldumpsys[1]adbshelldumpsysmeminfoadbshelldumpsysmeminfo其中,package_name也可以换成程序的pid,pid可以通过adbshellps来查找下图是某个程序的内存使用情况:重点关注如下几个字段:(1)Native/Dalvik的Heap信息具体在上面的第一行和第二行,它分别给出的是JNI层和Java层的内存分配情况,如果
- Android APK编译流程
yanlong107
apk是AndroidPackage的简写,在平时的开发过程中,通过点击Runapp按钮或者在命令行中输入./gradlew***(taskName)这样AndroidStudio就会启动构建流程,最终输出一个我们想要的APK。构建流程直达官网介绍image.png如上图所示,典型Android应用模块的构建流程通常按照以下步骤执行:1.编译器将您的源代码转换成DEX文件(Dalvik可执行文件,
- 学习C++
holmes_MX
转自:https://blog.csdn.net/Innost/article/details/52583732C++11学习本章目的:当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,Google连ART虚拟机的实现代码都切换到了C++11。C+11的标准规范于2011年2月正式落稿,而此前10余年间,C++正式标准一直是C++98/03[①]。相比
- C++学习
饭饭之正版麻子
c/c++
C++11学习本章目的:当Android用ART虚拟机替代Dalvik的时候,为了表示和Dalvik彻底划清界限的决心,Google连ART虚拟机的实现代码都切换到了C++11。C+11的标准规范于2011年2月正式落稿,而此前10余年间,C++正式标准一直是C++98/03[①]。相比C++98/03,C++11有了非常多的变化,甚至一度让笔者大呼不认识C++了[②]。不过,作为科技行业的从业者
- 谈谈你对Android Framework中Zygote的理解?
艾瑞败类
Zygote是什么?在Android中,负责孵化新进程的这个进程叫做Zygote,安卓上其他的应用进程都是由它孵化的。众所周知,安卓是Linux内核,安卓系统上运行的一切程序都是放在Dalvik虚拟机上的,Zygote也不例外,事实上,它是安卓运行的第一个Dalvik虚拟机进程。既然Zygote负责孵化其他的安卓进程,那么它自己是由谁孵化的呢?既然Android是基于Linux内核,那么Zygot
- JVM、DVM和ART的区别
碎念枫子
JVM(JavaVirtualMachine)、DVM(DalvikVirtualMachine)和ART(AndroidRuntime)是三种不同的虚拟机技术,它们分别用于执行Java应用程序和Android应用程序。以下是它们之间的主要区别:1.JVM(JavaVirtualMachine):JVM是Java虚拟机的缩写,用于执行Java字节码文件(.class文件)。JVM主要用于运行Jav
- Android之5.0至10.0之间的差异
杰奎琳子
Android5.0新特性:MaterialDesign设计风格支持64位ART虚拟机(5.0推出的ART虚拟机,在5.0之前都是Dalvik。他们的区别是:Dalvik,每次运行,字节码都需要通过即时编译器转换成机器码(JIT)。ART,第一次安装应用的时候,字节码就会预先编译成机器码(AOT))通知详情可以用户自己设计Android6.0新特性动态权限管理支持快速充电的切换支持文件夹拖拽应用相
- .gitignore文件的使用干掉.idea
tk2525
1常用模板#Builtapplicationfiles*.apk*.ap_#FilesfortheART/DalvikVM*.dex#Javaclassfiles*.class#Generatedfilesbin/gen/out/#Gradlefiles.gradle/build/#Localconfigurationfile(sdkpath,etc)local.properties#Progua
- Android类装载机制
Jensen95
前言上两篇文章分析了资源的加载和进程,Activity启动相关的内容,这篇是Dex加载相关的内容了,本篇结束,我们也就可以开始对于一些热修复,插件化框架的实现剖析了。Android中ClassLoaderClassLoader上图为Android中ClassLoader的类图,与JVM不同,Dalvik的虚拟机不能用ClassCload直接加载.dex,Android从ClassLoader派生出
- Android入门与布局
帅死不回头
Java源文件经过JDK编译器编译成class文件之后,Dalvik虚拟机中的Dx工具会将部分class文件转换为dex文件,dex文件相比jar更加紧凑,但是为了在运行过程中进一步提高性能,dex文件还会进一步优化成odex文件。在activity中,找到onCreate()方法,在该方法中调用setContentView()方法来加载activity对应的布局资源文件Android所有的UI元
- Android12源码目录结构
人民的石头
Android系统与嵌入式移动端Androidandroid
代码:|--art//AndroidRunTime,一种App运行模式,区别与传统的Dalvik虚拟机,旨在提高Android系统的流畅性|--adbconnection//adb连接相关|--benchmark//测试程序基准|--build//编译文件,art编译格式为apex|--cmdline//命令行工具的编译与解析|--compiler//编译套件|--dalvikvm//Dalvik
- 【Android Gradle 插件】Gradle 构建工具简介 ② ( Android 项目构建打包流程 | 构建工具发展 -> 手动配置 -> Ant -> Maven -> Gradle )
修行者对666
安卓gradleandroidmavenjava
一、Android项目构建打包流程博客;Android应用Apk文件打包流程如下图所示:①使用AAPT工具打包资源文件,生成R.java,resources.ap文件;②使用AIDLtool工具,处理AIDL文件,生成对应的Java文件;③使用javac工具编译Java源码为class字节码文件;④使用dx工具将class字节码文件打包成dex字节码文件,这是Dalvik虚拟机字节码文件;⑤使用a
- Android系统的JNI原理分析(5)- JNI函数解析
小馬佩德罗
#androidJNI
声明前阶段在项目中使用了Android的JNI技术,在此文中做些技术知识总结。此篇参考一些博客和书籍,不方便逐一列出,仅供学习、知识分享,代码基于Android7.1.1。AndroidJNI函数参考:‘Raw’JNIinterfacetoAndroidDalvik(Java)VMfromMono(CS/JS)本章Demo下载:Demo链接0写在前面的 既然JNI是Java虚拟机提供的Jav
- [Android] Android文件系统中存储的内容有哪些?
Shujie_L
Androidandroid文件系统存储
文章目录前言root文件系统/system分区稳定性:安全性:/system/bin用来提供服务的二进制可执行文件:调试工具:UNIX命令:调用Dalvik的脚本(upallscript):/system/bin中封装的app_process脚本厂商定制的二进制可执行文件:/system/xbin/system/lib[64]/system/etc/data分区/data与Android操作系统版
- Android逆向基础1(Smali语法入门)
enj0y1
简单的说,Smali就是DalvikVM内部执行的核心代码。1.Smali的基本类型B---byteC---charD---doubleF---floatI---intJ---longS---shortV---voidZ---boolean[XXX---array(数组)Lxxx/yyy---object(对象)2.函数的定义函数的定义一般为:Func-Name(Para-Type1Para-Ty
- Unity打包导出apk报错Failed to load libmain.so‘
若风华浊世间
Unity练手及学习unityandroid游戏引擎
今天打包APK手机装上发现进不去主页面,一直提示如下图包名的部分码掉了Failuretoinitialize!Yourhardwaredoesnotsupportthisapplication.Failedtoloadlibmain.so’java.lang.UnsatisfiedLinkError:dalvik.system.PathClassLoaderlDexPathList|(zipfil
- 第1篇:人类的卷曲乳杆菌分离物的比较基因组学揭示了糖基化和糖原降解的基因:阴道微生物群的体内优势
不愧是你_a
VM:阴道微生物群LVM:乳酸菌为主的阴道微生物群DVM:阴道微生物菌群失调的阴道微生物群Comparativegenomics:比较基因组学EPS:胞外多糖contig:拼接软件基于reads之间的overlap区,拼接获得的序列称为contig(重叠群)pan-genome:泛基因组,泛基因组即某一物种全部基因的总称,包括核心基因组(coregenome),在所有菌株中都存在的基因;以及非必须
- 深入探索 Android 中的 Runtime
Just_Paranoid
Androidandroidruntimejvm
深入探索Android中的Runtime一、什么是Runtime二、Android中的Runtime类型2.1.DalvikRuntime2.2.ART(AndroidRuntime)三、Runtime的作用和特点3.1.应用程序执行环境3.2.跨平台支持3.3.性能优化3.4.应用程序优化四、与应用开发相关的重要概念4.1.JIT(Just-In-Time)编译4.2.AOT(Ahead-Of-
- AMBA ACE
biaobiao_hust
数据库
1.简介ACE是AXICoherencyExtensions的缩写。顾名思义,ACE就是AXI加上支持一致性的扩展。ACE协议提供了系统级一致性框架,系统级设计包括:1、一致性存储范围2、具有一致性扩展的存储系统器件3、系统器件之间交互的软件模型ACE协议实现通过以下扩展支持Barrier传输和DVM(DistributedVirtualMemory)1、五个状态缓存模型,指明了Cacheline
- [Android] Android架构体系(1)
Shujie_L
Androidandroid架构
文章目录Android的框架Dalvik虚拟机JNI原生二进制可执行文件AndroidNDK中的binutilsBionic谷歌考虑到的版权问题Bionic与传统的C标准库(如glibc)的一些不同参考Android的框架Android取得成功的关键因素之一就是它丰富的框架集。没有这些框架,Android可能会和其他一些嵌入式Linux发布版本一样混得很差。通过提供各种框架,Android让应用可
- 【Android】Android与Linux的异同概况
Shujie_L
Androidandroidlinux运维
文章目录Android基于Linux相似性区别两个全新的组件:Dalvik虚拟机运行时和硬件抽象层(HardwareAbstractionLayer)Linux已有但是没有发布的特性一些开源项目图:Android和主流Linux架构比较图:谷歌官方架构图参考Android基于LinuxAndroid是架构在Linux之上的,但也对它做了大量的修改。其中包括部分地打破了Linux主流版本间的兼容性。
- 安卓之内存管理,强制回收机制以及应对措施分析
洪信智能
安卓开发androidglide
文章摘要安卓操作系统作为全球最流行的移动操作系统之一,其强大的功能和灵活性深受开发者与用户的喜爱。然而,随着应用的复杂性和用户需求的增长,应用的内存管理变得尤为重要。在这其中,安卓的强制回收机制起着至关重要的作用。本文将深入探讨安卓系统中的内存管理机制,并聚焦于其核心组成部分——强制回收(GarbageCollection)机制。一、内存管理概述Android系统采用Java虚拟机Dalvik/A
- soft212期末
虎啊兄弟
c#
文章目录安卓填空题选择题C#安卓Dalvik中得到Dx工具会把部分class文件转换成dex文件。如果希望在XML布局文件中调用颜色资源,可以使用@color调用Android程序入口的Activity是在AndroidManifest.xml文件中注册的Android中查看应用程序日志的工具是LogCatDalvik是Google公司设计的用于Android平台的虚拟机√Android应用程序的
- art 笔记
lei7143
android稳定性p2pwebviewc#
《深入理解art》--邓凡平参考书籍:https://blog.csdn.net/xiaolli/article/details/108095086art/libartbase/base/logging.hart/dalvikvm/dalvikvm.ccdalvikvm(intargc,char**argv)->JniInvocation()->JniInvocationCreate()app_m
- Perfetto 使用 笔记
彼天
性能工具Perfettoandroid
抓取命令抓取adbshellperfetto-o/data/misc/perfetto-traces/trace_file.perfetto-trace-t10sschedfreqidleamwmgfxviewbinder_driverhaldalvikcamerainputresmemory导出命令adbpull/data/misc/perfetto-traces/trace_file.perf
- python requests session设置代理
看见我书了吗
爬虫python
https://2.python-requests.org/en/master/user/advanced/#id1importrequestsurl="http://www.cip.cc"headers={'user-agent':'curlDalvik/2.1.0(Linux;U;Android8.1.0;PixelBuild/NMF26F)'}#proxies={'http':'http:/
- Xposed 实现原理分析
l0neman
Android逆向工程androidframeworkndk
Xposed实现原理分析文章目录Xposed实现原理分析前言Xposed使用方法Xposed原理概述Androidzygote进程基于Dalvik的方法Hook基于ART的方法HookXposed工作流程Xposed项目结构XposedXposedBridgeXposedInstallerandroid_artXposedToolsXposed源码分析Xposed安装下载直接刷入使用recover
- 【Android开发】移动程序设计期末复习练习题(二)
Monkey_Jun
期末复习android
Android基础入门一、填空题Dalvik中的Dx工具会把部分class文件转换成____dex___文件。如果希望在XML布局文件中调用颜色资源,可以使用___@color__调用。Android程序入口的Activity是在___AndroidManifest.xml__文件中注册的。Android中查看应用程序日志的工具是__LogCat___。二、判断题Dalvik是Google公司设计
- Dalvik VM进程系统(二):分析Zygote的启动过程
bug樱樱
Android系统进程启动流程android系统的Zygote进程是所有android进程的父进程,包括SystemServer和各种应用进程都是通过Zygote进程fork出来的。Zygote(孵化)进程相当于是android系统的根进程,后面所有的进程都是通过这个进程fork出来的,而Zygote进程则是通过linux系统的init进程启动的,也就是说,android系统中各种进程的启动方式:
- Android程序员需掌握的JVM知识
小久久601
JVMandroid安卓移动开发
什么是JVMJVM全称JavaVirtualMachine,它是一种规范。JVM是一个虚拟化的操作系统,类似于Linux或者Windows的操作系统,只是它架在操作系统上,接收字节码,把字节码翻译成操作系统上的机器码且进行执行。为什么需要学习JVMAndroid的运行环境都是在ART虚拟机或者是Dalvik虚拟机上,为什么Android程序员需要学习JVM,理解JVM可以帮助我们更好的了解Java
- 关于旗正规则引擎下载页面需要弹窗保存到本地目录的问题
何必如此
jsp超链接文件下载窗口
生成下载页面是需要选择“录入提交页面”,生成之后默认的下载页面<a>标签超链接为:<a href="<%=root_stimage%>stimage/image.jsp?filename=<%=strfile234%>&attachname=<%=java.net.URLEncoder.encode(file234filesourc
- 【Spark九十八】Standalone Cluster Mode下的资源调度源代码分析
bit1129
cluster
在分析源代码之前,首先对Standalone Cluster Mode的资源调度有一个基本的认识:
首先,运行一个Application需要Driver进程和一组Executor进程。在Standalone Cluster Mode下,Driver和Executor都是在Master的监护下给Worker发消息创建(Driver进程和Executor进程都需要分配内存和CPU,这就需要Maste
- linux上独立安装部署spark
daizj
linux安装spark1.4部署
下面讲一下linux上安装spark,以 Standalone Mode 安装
1)首先安装JDK
下载JDK:jdk-7u79-linux-x64.tar.gz ,版本是1.7以上都行,解压 tar -zxvf jdk-7u79-linux-x64.tar.gz
然后配置 ~/.bashrc&nb
- Java 字节码之解析一
周凡杨
java字节码javap
一: Java 字节代码的组织形式
类文件 {
OxCAFEBABE ,小版本号,大版本号,常量池大小,常量池数组,访问控制标记,当前类信息,父类信息,实现的接口个数,实现的接口信息数组,域个数,域信息数组,方法个数,方法信息数组,属性个数,属性信息数组
}
&nbs
- java各种小工具代码
g21121
java
1.数组转换成List
import java.util.Arrays;
Arrays.asList(Object[] obj); 2.判断一个String型是否有值
import org.springframework.util.StringUtils;
if (StringUtils.hasText(str)) 3.判断一个List是否有值
import org.spring
- 加快FineReport报表设计的几个心得体会
老A不折腾
finereport
一、从远程服务器大批量取数进行表样设计时,最好按“列顺序”取一个“空的SQL语句”,这样可提高设计速度。否则每次设计时模板均要从远程读取数据,速度相当慢!!
二、找一个富文本编辑软件(如NOTEPAD+)编辑SQL语句,这样会很好地检查语法。有时候带参数较多检查语法复杂时,结合FineReport中生成的日志,再找一个第三方数据库访问软件(如PL/SQL)进行数据检索,可以很快定位语法错误。
- mysql linux启动与停止
墙头上一根草
如何启动/停止/重启MySQL一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用 service 启动:service mysqld stop2、使用 mysqld 脚本启动:/etc/inin
- Spring中事务管理浅谈
aijuans
spring事务管理
Spring中事务管理浅谈
By Tony Jiang@2012-1-20 Spring中对事务的声明式管理
拿一个XML举例
[html]
view plain
copy
print
?
<?xml version="1.0" encoding="UTF-8"?>&nb
- php中隐形字符65279(utf-8的BOM头)问题
alxw4616
php中隐形字符65279(utf-8的BOM头)问题
今天遇到一个问题. php输出JSON 前端在解析时发生问题:parsererror.
调试:
1.仔细对比字符串发现字符串拼写正确.怀疑是 非打印字符的问题.
2.逐一将字符串还原为unicode编码. 发现在字符串头的位置出现了一个 65279的非打印字符.
 
- 调用对象是否需要传递对象(初学者一定要注意这个问题)
百合不是茶
对象的传递与调用技巧
类和对象的简单的复习,在做项目的过程中有时候不知道怎样来调用类创建的对象,简单的几个类可以看清楚,一般在项目中创建十几个类往往就不知道怎么来看
为了以后能够看清楚,现在来回顾一下类和对象的创建,对象的调用和传递(前面写过一篇)
类和对象的基础概念:
JAVA中万事万物都是类 类有字段(属性),方法,嵌套类和嵌套接
- JDK1.5 AtomicLong实例
bijian1013
javathreadjava多线程AtomicLong
JDK1.5 AtomicLong实例
类 AtomicLong
可以用原子方式更新的 long 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicLong 可用在应用程序中(如以原子方式增加的序列号),并且不能用于替换 Long。但是,此类确实扩展了 Number,允许那些处理基于数字类的工具和实用工具进行统一访问。
 
- 自定义的RPC的Java实现
bijian1013
javarpc
网上看到纯java实现的RPC,很不错。
RPC的全名Remote Process Call,即远程过程调用。使用RPC,可以像使用本地的程序一样使用远程服务器上的程序。下面是一个简单的RPC 调用实例,从中可以看到RPC如何
- 【RPC框架Hessian一】Hessian RPC Hello World
bit1129
Hello world
什么是Hessian
The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary p
- 【Spark九十五】Spark Shell操作Spark SQL
bit1129
shell
在Spark Shell上,通过创建HiveContext可以直接进行Hive操作
1. 操作Hive中已存在的表
[hadoop@hadoop bin]$ ./spark-shell
Spark assembly has been built with Hive, including Datanucleus jars on classpath
Welcom
- F5 往header加入客户端的ip
ronin47
when HTTP_RESPONSE {if {[HTTP::is_redirect]}{ HTTP::header replace Location [string map {:port/ /} [HTTP::header value Location]]HTTP::header replace Lo
- java-61-在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差. 求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5,
bylijinnan
java
思路来自:
http://zhedahht.blog.163.com/blog/static/2541117420116135376632/
写了个java版的
public class GreatestLeftRightDiff {
/**
* Q61.在数组中,数字减去它右边(注意是右边)的数字得到一个数对之差。
* 求所有数对之差的最大值。例如在数组
- mongoDB 索引
开窍的石头
mongoDB索引
在这一节中我们讲讲在mongo中如何创建索引
得到当前查询的索引信息
db.user.find(_id:12).explain();
cursor: basicCoursor 指的是没有索引
&
- [硬件和系统]迎峰度夏
comsci
系统
从这几天的气温来看,今年夏天的高温天气可能会维持在一个比较长的时间内
所以,从现在开始准备渡过炎热的夏天。。。。
每间房屋要有一个落地电风扇,一个空调(空调的功率和房间的面积有密切的关系)
坐的,躺的地方要有凉垫,床上要有凉席
电脑的机箱
- 基于ThinkPHP开发的公司官网
cuiyadll
行业系统
后端基于ThinkPHP,前端基于jQuery和BootstrapCo.MZ 企业系统
轻量级企业网站管理系统
运行环境:PHP5.3+, MySQL5.0
系统预览
系统下载:http://www.tecmz.com
预览地址:http://co.tecmz.com
各种设备自适应
响应式的网站设计能够对用户产生友好度,并且对于
- Transaction and redelivery in JMS (JMS的事务和失败消息重发机制)
darrenzhu
jms事务承认MQacknowledge
JMS Message Delivery Reliability and Acknowledgement Patterns
http://wso2.com/library/articles/2013/01/jms-message-delivery-reliability-acknowledgement-patterns/
Transaction and redelivery in
- Centos添加硬盘完全教程
dcj3sjt126com
linuxcentoshardware
Linux的硬盘识别:
sda 表示第1块SCSI硬盘
hda 表示第1块IDE硬盘
scd0 表示第1个USB光驱
一般使用“fdisk -l”命
- yii2 restful web服务路由
dcj3sjt126com
PHPyii2
路由
随着资源和控制器类准备,您可以使用URL如 http://localhost/index.php?r=user/create访问资源,类似于你可以用正常的Web应用程序做法。
在实践中,你通常要用美观的URL并采取有优势的HTTP动词。 例如,请求POST /users意味着访问user/create动作。 这可以很容易地通过配置urlManager应用程序组件来完成 如下所示
- MongoDB查询(4)——游标和分页[八]
eksliang
mongodbMongoDB游标MongoDB深分页
转载请出自出处:http://eksliang.iteye.com/blog/2177567 一、游标
数据库使用游标返回find的执行结果。客户端对游标的实现通常能够对最终结果进行有效控制,从shell中定义一个游标非常简单,就是将查询结果分配给一个变量(用var声明的变量就是局部变量),便创建了一个游标,如下所示:
> var
- Activity的四种启动模式和onNewIntent()
gundumw100
android
Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。
Android总Activity的启动模式分为四种:
Activity启动模式设置:
<acti
- 攻城狮送女友的CSS3生日蛋糕
ini
htmlWebhtml5csscss3
在线预览:http://keleyi.com/keleyi/phtml/html5/29.htm
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>攻城狮送女友的CSS3生日蛋糕-柯乐义<
- 读源码学Servlet(1)GenericServlet 源码分析
jzinfo
tomcatWebservlet网络应用网络协议
Servlet API的核心就是javax.servlet.Servlet接口,所有的Servlet 类(抽象的或者自己写的)都必须实现这个接口。在Servlet接口中定义了5个方法,其中有3个方法是由Servlet 容器在Servlet的生命周期的不同阶段来调用的特定方法。
先看javax.servlet.servlet接口源码:
package
- JAVA进阶:VO(DTO)与PO(DAO)之间的转换
snoopy7713
javaVOHibernatepo
PO即 Persistence Object VO即 Value Object
VO和PO的主要区别在于: VO是独立的Java Object。 PO是由Hibernate纳入其实体容器(Entity Map)的对象,它代表了与数据库中某条记录对应的Hibernate实体,PO的变化在事务提交时将反应到实际数据库中。
实际上,这个VO被用作Data Transfer
- mongodb group by date 聚合查询日期 统计每天数据(信息量)
qiaolevip
每天进步一点点学习永无止境mongodb纵观千象
/* 1 */
{
"_id" : ObjectId("557ac1e2153c43c320393d9d"),
"msgType" : "text",
"sendTime" : ISODate("2015-06-12T11:26:26.000Z")
- java之18天 常用的类(一)
Luob.
MathDateSystemRuntimeRundom
System类
import java.util.Properties;
/**
* System:
* out:标准输出,默认是控制台
* in:标准输入,默认是键盘
*
* 描述系统的一些信息
* 获取系统的属性信息:Properties getProperties();
*
*
*
*/
public class Sy
- maven
wuai
maven
1、安装maven:解压缩、添加M2_HOME、添加环境变量path
2、创建maven_home文件夹,创建项目mvn_ch01,在其下面建立src、pom.xml,在src下面简历main、test、main下面建立java文件夹
3、编写类,在java文件夹下面依照类的包逐层创建文件夹,将此类放入最后一级文件夹
4、进入mvn_ch01
4.1、mvn compile ,执行后会在