代码优化

JIT晚期(运行期)

不羁的心 提交于 2019-11-27 07:35:43
1. Java的编译和执行 编译 包括两种情况: 1,源码编译成字节码 2,字节码编译成本地机器码(符合本地系统专属的指令) 解释执行 也包括两种情况: 1,源码解释执行 2,字节码解释执行 解释和编译执行的区别是: 是否产生中间本地机器码。 即时编译生成机器相关的中间码,可重复执行缓存效率高。解释执行直接执行字节码,重复执行需要重复解释。 2. 编译原理 在执行前先对程序源码进行词法解析和语法解析处理,把源码转化为抽象语法树。 其中绿色的模块可以选择性实现。 上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScript), 而下面的那条分支就是传统编译原理中从源代码到目标机器代码的生成过程。 对于一门具体语言的实现来说: 词法和语法分析乃至后面的优化器和目标代码生成器都可以选择独立于执行引擎,形成一个完整意义的编译器去实现,这类代表是C/C++语言。 也可以把抽象语法树或指令流之前的步骤实现一个半独立的编译器,这类代表是Java语言。 又或者可以把这些步骤和执行引擎全部集中在一起实现,如大多数的JavaScript执行器。 3. 三个编译器 JVM的编译器可以分为三个编译器: ( 1) 前端编译器 : 把.java转变为.class的过程 。如Sun的 Javac 、Eclipse JDT中的增量式编译器( ECJ )。 ( 2) 后端编译器

c语言编译

妖精的绣舞 提交于 2019-11-27 07:29:07
gcc参数 -On 优化选项,告诉编译器使用第n级优化 通常,优化等级越高,运行速度越快,编译时间越长,调试越困难。因此,通常使用O2 -o file 自定义编译后的文件名 -S 生产汇编代码 -c 编译并汇编该代码 默认编译汇编链接一步到位 反汇编器 objdump -d code.c 用来查看二进制代码 来源: https://www.cnblogs.com/fullmetalcoder/p/11349936.html

php面试题之五——PHP综合应用(高级部分)

▼魔方 西西 提交于 2019-11-27 05:37:53
文章转载自: http://www.pythonheidong.com/blog/article/2117/ 五、PHP综合应用 1.写出下列服务的用途和默认端口(新浪网技术部) ftp、ssh、http、telnet、https ftp:File Transfer Protocol,文件传输协议,是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输,其默认端口是21。 ssh:Secure Shell,安全外壳协议,建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议,其默端口是22。 http:hypertext transport protocol,超文本传送协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议,其默认端口是80。 telnet:Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力,其默认端口是23。 https:Hypertext Transfer Protocol over Secure Socket Layer,是以安全为目标的HTTP通道,用于安全的HTTP数据传输,它的主要作用可以分为两种: 一种是建立一个信息安全通道,来保证数据传输的安全;

RecyclerView瀑布流优化方案探讨

旧街凉风 提交于 2019-11-27 03:29:28
目录介绍 01.规则瀑布流实现 02.不规则瀑布流实现 2.1 实现方式 2.2 遇到问题 03.瀑布流上拉加载 04.给瀑布流设置分割线 05.自定义Manager崩溃 06.如何避免刷新抖动 07.为何有时出现跳动 08.瀑布流图片优化 09.onBindViewHolder优化 10.瀑布流item点击事件优化 11.Glide加载优化 12.建议指定图片的宽高 欢迎同行探讨瀑布流极致优化方案 如果同行看到这篇文章,有好的瀑布流优化方案,欢迎给出建议,或者给链接也可以。 需求: 瀑布流大概有10来中不同type的item视图,然后视图是根据动态设置宽高,服务器会返回比例 瀑布流中item需要切割圆角 目前使用glide加载图片 产品说让参考抖音快手类的app,让瀑布流滑动效果特别流畅……但目前遇到问题是滑动十几页没什么问题,但是滑动三四十页的时候会出现卡顿。欢迎同行给出建议! 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也在工作之余收集了大量的面试题,长期更新维护并且修正,持续完善……开源的文件是markdown格式的!同时也开源了生活博客,从12年起,积累共计N篇[近100万字,陆续搬到网上],转载请注明出处,谢谢! 链接地址: https://github

图灵学院Java架构师-VIP-逃逸分析

▼魔方 西西 提交于 2019-11-27 00:18:45
引言 面试问题:实例对象存储在内存中的哪里? 完整正确的回答:实例对象内存存储在堆中,实例对象的引用存储在线程栈中,实例对象的类元信息和静态变量存储在方法区(也叫元空间) 那实例对象内存都是存放在堆中的吗? 答案是不一定,因为JIT会对代码进行逃逸分析,对代码进行优化,有逃逸行为的对象会存放在堆中,没有逃逸行为的对象可能存在堆中也可能存在线程栈中 在《深入理解Java虚拟机中》关于Java堆内存有这样一段描述: 但是,随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。 具体对JIT相关的讲解,可以参见另一个篇笔记《JIT即时编译器》,这里简单讲述一下: Java程序通过解释器进行解释执行时,JVM会对方法和代码块的调用次数进行统计,对调用次数较高的方法或者代码块(专业名词叫做“热点代码”)会交由JIT进行即时编译成对应的机器指令,在这个过程中还会对代码进行优化,逃逸分析就是其中的优化之一,最后将编译之后的机器指令缓存起来,以备后面使用。 逃逸分析 逃逸分析是目前Java虚拟机中比较前沿的优化技术,这是一种可以有效减少Java程序中同步负载和堆内存分配压力的跨函数全局数据流分析算法。通过逃逸分析,Java虚拟机能够分析出一个新对象的引用使用范围,从而决定是否一定要将此对象分配在堆内存中。

PHP 性能分析第三篇: 性能调优实战

时光怂恿深爱的人放手 提交于 2019-11-26 23:51:16
注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或 PHP 性能分析第二篇: 深入研究 XHGui 。 在本系列的 第一篇 中,我们介绍了 XHProf 。而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! ##性能调优 不用运行的代码才是绝好的代码。其他只是好的代码。所以,性能调优时,最好的选择是首先确保运行尽可能少的代码。 OpCode 缓存 首先,最快且最简单的选择是启用 OpCode 缓存。OpCode 缓存的更多信息可以在 这里 找到。 在上图,我们看到启用 Zend OpCache 后发生的情况。最后一行是我们的基准,也即没有启用缓存的情况。 在中间行,我们看到较小的性能提升,以及内存使用量的大幅减少。小的性能提升(很可能)来自 Zend OpCache 优化,而非 OpCode 缓存。 第一行是优化和 OpCode 缓存后结果,我们看到很大的性能提升。 现在,我们看看 APC 之前和之后的变化。如上图所示,跟 Zend OpCache 相比,随着缓存的建立,我们看到初始(中间行)请求的性能下降,在消耗时长与内存使用量方面的表现都明显下降。 接着,随之 opcode 缓存的建立,我们看到类似的性能提升。 内容缓存

优化PHP程序的方法

两盒软妹~` 提交于 2019-11-26 22:16:26
1. If a method c++an be static, declare it static. Speed improvement is by a factor of 4. 如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。   2. echo is faster than print. echo 比 print 快。   3. Use echo's multiple parameters instead of string concatenation. 使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。   4. Set the maxvalue for your for-loops before and not in the loop. 在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。   5. Unset your variables to free memory, especially large arrays. 注销那些不用的变量尤其是大数组,以便释放内存。   6. Avoid magic like __get, __set, __autoload 尽量避免使用__get,__set,__autoload.   7. require_once() is expensive require_once()代价昂贵。   8.

Android 如何优化APP内存

眉间皱痕 提交于 2019-11-26 16:46:48
极力推荐Android 开发大总结文章:欢迎收藏 程序员Android 力荐 ,Android 开发者需要的必备技能 随机存取存储器 (RAM) 在任何软件开发环境中都是非常有价值的资源,但对于物理内存经常受到限制的移动操作系统来说,它更有价值。 尽管 Android运行时(ART )和 Dalvik虚拟机 都执行常规垃圾收集,但这并不意味着您可以忽略应用程序分配和释放内存的时间和位置。 您仍然需要避免引入 内存泄漏 ,通常由静态成员变量中的对象引用引起,并在生命周期回调定义的适当时间释放任何引用对象。 本页面介绍了如何主动减少应用程序中的内存使用量。 有关Android操作系统如何管理内存的信息,请参阅 Android内存管理概述 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 监视可用内存和内存使用情况 为响应事件释放内存 分析检查你的app需要用多少内存 使用内存优化框架 移除内存密集型资源,以及lib库 1. 监视可用内存和内存使用情况 在修复解决 APP 中的内存使用问题之前,首先需要找到它们。 Android Studio 中的内存分析器 Memory Profiler 可以帮助您通过以下方式查找和诊断内存问题: 1 . 看看你的应用程序随着时间的推移如何分配内存。 Memory Profiler 显示了一个实时图

一条 SQL 在 Apache Spark 之旅

青春壹個敷衍的年華 提交于 2019-11-26 11:28:30
转载自过往记忆大数据 https://www.iteblog.com/archives/2561.html Spark SQL 是 Spark 众多组件中技术最复杂的组件之一,它同时支持 SQL 查询和 DataFrame DSL。通过引入了 SQL 的支持,大大降低了开发人员的学习和使用成本。目前,整个 SQL 、 Spark ML、Spark Graph 以及 Structured Streaming 都是运行在 Catalyst Optimization & Tungsten Execution 之上的,如下图所示: 所以,正常的 SQL 执行先会经过 SQL Parser 解析 SQL,然后经过 Catalyst 优化器处理,最后到 Spark 执行。而 Catalyst 的过程又分为很多个过程,其中包括: Analysis:主要利用 Catalog 信息将 Unresolved Logical Plan 解析成 Analyzed logical plan; Logical Optimizations:利用一些 Rule (规则)将 Analyzed logical plan 解析成 Optimized Logical Plan; Physical Planning:前面的 logical plan 不能被 Spark 执行,而这个过程是把 logical plan

C++程序的耦合性设计

梦想与她 提交于 2019-11-26 10:19:28
声明:本文部分采用和参考《代码里的世界观-通往架构师之路》中内容,可以说是该书中耦合性一章的读后感,感谢该书的作者余叶老师的无私分享。 1.什么是耦合? 耦合其实就是程序之间的相关性。 程序之间绝对没有相关性是不可能的,否则也不可能在一个程序中启动,如下图: 这是一个Linux中socket TCP编程的程序流程图,在图中的TCP服务器端,socket()、bind()接口、listen()接口、accept()接口之间肯定存在着相关(就是要调用下一个接口程序必需先调用前一个接口),也就是耦合,否则整个TCP服务器端就建立不起来,以及改变了bind()中的传入的数据,比如端口号,那么接下来的listen()监听的端口,accept()接收连接的端口也会改变,所以它们之间有很强的相关性,属于紧耦合。所以耦合就是代码的相关性,如果还不明白,也没关系,继续看下去,相信你会懂的,哈哈。 2.耦合的形式 (1)数据之间耦合 在同一个结构体或者类中,如: typedef struct Person { int age; char* name; }Person; class Person { private: int age_m; bool namePresent_m; std::string name_m; }; 在上面的结构体和类中,年龄和名字两个基本数据单元组合成了一个人数据单元