Wesley13 Wesley13
2年前
java 源码编译
Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器(叫“编译器的前段”更准确)——把\.java文件转变成\.class文件的过程;也可能是虚拟机的后端运行期编译器(JIT)把字节码转变成机器码的过程;还可能是指静态提前编译器(AOT编译器)直接把\.java文件编译成本地机器码的过程。Javac编译器
Wesley13 Wesley13
2年前
Volatile概述
Volatile概念volatile是一个特征修饰符(typespecifier)。volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。——百度百科所以呢它主要是两个作用:一个是
Wesley13 Wesley13
2年前
java编译器对string常量表达式的处理和优化
首先把问题摆出来,先看这个代码 String a  "ab"; String b  "a"  "b"; System.out.println((a  b));打印结果会是什么?类似这样的问题,有人考过我,我也拿来考过别人(蛮好玩的,大家也可以拿来问人玩),一般答案会是以下几种: 1.true 
作为移动开发你不能不了解的编译流程
阅读本文,或许能够了解关于以下的几个问题:1、编译器是什么?为什么会有编译器这样一个东西?2、编译器做了哪些工作?整个编译过程又是什么?3、Apple的编译器发展历程以及为什么会抛弃GCC换成自研的LLVM?4、从编译器角度看Swift与OC能够实现混编的底层逻辑。
Wesley13 Wesley13
2年前
Java并发(三):重排序
在执行程序时为了提高性能,提高并行度,编译器和处理器常常会对指令做重排序。重排序分三种类型:1.编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。2.指令级并行的重排序。现代处理器采用了指令级并行技术(InstructionLevelParallelism,ILP)来将多条指令重叠执行。如果不存在数据依
Wesley13 Wesley13
2年前
MDK编译优化笔记
在一次使用MDk的编译优化等级比较高的时候发现编译不优化时功能正常,开了优化等级02就出现异常,调试中看了很多博客总结一下。一个变量,如果你的主程序要用到,同时中断还要用到,要加volatile修饰。告诉编译器这个变量是可能随时发生变化的,使得编译器编译程序的时候,每次都从RAM里面读取数据,而不是使用之前缓存到寄存器里面的值。对于多任
Wesley13 Wesley13
2年前
Java 14 虚拟机垃圾回收调优指南
!(https://oscimg.oschina.net/oscnet/5645c383190d3d6f24ada7046e6fd885a3b.jpg)优化目标与策略(Ergonomics)垃圾收集器、堆和运行时编译器默认选择G1(GarbageFirst)收集器
Stella981 Stella981
2年前
JVM即时编译器
1.为何HotSpot虚拟机要使用解释器与编译器并存的架构?2.为何HotSpot虚拟机要实现两个不同的即时编译器?3.程序何时使用解释器执行?何时使用编译器执行?4.哪些程序代码会被编译为本地代码?如何编译为本地代码?5.如何从外部观察即时编译器的编译过程和编译结果?解释器与编译器两者各有优势:当_程序需要迅速启动和执行
Wesley13 Wesley13
2年前
C语言内存优化——继续含泪总结
之前分析了基本数据类型的优化,现在开始涉及全局和局部变量的优化,话说这个东西我从没想过还能这样优化的喂!全局变量/Globalvariables全局变量不会被分配在寄存器上,修改全局变量需要通过指针或者调用函数的方式间接进行。所以编译器不会将全局变量存储在寄存器中,那样会带来额外的、不必要的负担和存储空间。所以在比较关键的循环中,我们要
小万哥 小万哥
11个月前
C++编译器和链接器的完全指南
C是一种强类型语言,它的编译和链接是程序开发过程中不可或缺的两个环节。编译器和链接器是两个非常重要的概念。本文将详细介绍C中的编译器和链接器以及它们的工作原理和使用方法。编译器编译器是将源代码转换为可执行文件的程序。在C中,常用的编译器有GCC