使用-XX+PrintCompilation参数可以看到JVM做了哪些编译优化(包括逆优化和重新优化),输出的格式如下: <id> <type><method name> [bci] <(# of bytes)> 1、id可以为以下值: 2、type可以为空或者以下的一个或者多个值: 3、metho ...
                            
                            
                                分类:
其他好文   时间:
2019-09-12 21:07:53   
                                阅读次数:
102
                             
                         
                    
                        
                            
                            
                                    作用: volatile关键词影响编译器编译的结果,用volatile声明的变量表示该变量随时可能发生变化,与该变量有关的运算,不要进行编译优化,以免出错。(使用volatile关键字修饰的变量,告诉编译器每次读取数据从内存中读取,而不是从编译器优化后的缓存中读取变量) 编译器优化原理: ...
                            
                            
                                分类:
编程语言   时间:
2019-07-21 01:20:27   
                                阅读次数:
97
                             
                         
                    
                        
                            
                            
                                一.安全性问题线程安全的本质是正确性,而正确性的含义是程序按照预期执行理论上线程安全的程序,应该要避免出现可见性问题(CPU缓存)、原子性问题(线程切换)和有序性问题(编译优化)需要分析是否存在线程安全问题的场景:存在共享数据且数据会发生变化,即有多个线程会同时读写同一个数据针对该理论的解决方案:不共享数据,采用线程本地存储(ThreadLocalStorage,TLS);不变模式Ⅰ.数据竞争数据
                            
                            
                                分类:
编程语言   时间:
2019-07-06 00:00:36   
                                阅读次数:
107
                             
                         
                    
                        
                            
                            
                                    一. 安全性问题 线程安全的本质是正确性,而正确性的含义是程序按照预期执行 理论上线程安全的程序,应该要避免出现可见性问题(CPU缓存)、原子性问题(线程切换)和有序性问题(编译优化) 需要分析是否存在线程安全问题的场景:存在共享数据且数据会发生变化,即有多个线程会同时读写同一个数据 针对该理论的解 ...
                            
                            
                                分类:
编程语言   时间:
2019-07-05 22:47:19   
                                阅读次数:
239
                             
                         
                    
                        
                            
                            
                                    一、什么是JVM JVM是跨平台,JVM类似于适配器。 适配Windows和Linux平台。从软件层面屏蔽硬件底层。 C和C++也是跨平台。 鸿蒙——编译优化,60% 二、JVM体系构成: .class文件,看不懂。 漱壕作为开头,Java魔数。 cafe babe——LOGO Java魔数,在文件 ...
                            
                            
                                分类:
其他好文   时间:
2019-06-24 20:51:28   
                                阅读次数:
121
                             
                         
                    
                        
                            
                            
                                    1、 编译器 写代码只是生产软件过程中的一环。无论是数据结构、编译原理、操作系统还是组成原理都是编码的重要基础,试问没有学过编译原理的人能够针对性地进行编译优化吗?不懂操作系统的人能玩得转linux吗?当然 nonono咯 对于编译器来说这就好像一个木匠,只会使用斧子、锯子这些工具,是做不出好的家具 ...
                            
                            
                                分类:
其他好文   时间:
2019-06-08 00:30:52   
                                阅读次数:
116
                             
                         
                    
                        
                            
                            
                                Java内存模型规范了JVM如何提供按需禁用缓存和编译优化的方法。具体来说,这些方法包括volatile、synchronized和final三个关键字,以及六项Happens-Before规则。Happens-Before的7个规则:(1).程序次序规则:在一个线程内,按照程序代码顺序,书写在前面的操作先行发生于书写在后面的操作。准确地说,应该是控制流顺序而不是程序代码顺序,因为要考虑分支、循环
                            
                            
                                分类:
编程语言   时间:
2019-04-30 10:55:45   
                                阅读次数:
150
                             
                         
                    
                        
                            
                            
                                13.1总结前面12节的课程,主要针对Linux内核中GNUC扩展的一些常用C语言语法进行了分析。GNUC的这些扩展语法,主要用来完善C语言标准和编译优化。而通过C标准的发展过程我们又发现,对于一些编译器扩展的一些特性,或者其它编程语言(如:C++)中的好的特性和语法,C标准也会适时地吸收进来,作为新的C语言标准。在GNUC的这些扩展语法中,attribute和宏定义是两大特色。在嵌入式底层系统中
                            
                            
                                分类:
编程语言   时间:
2019-02-03 09:18:12   
                                阅读次数:
201
                             
                         
                    
                        
                            
                            
                                11.1什么是内建函数内建函数,顾名思义,就是编译器内部实现的函数。这些函数跟关键字一样,可以直接使用,无须像标准库函数那样,要#include对应的头文件才能使用。内建函数的函数命名,通常以__builtin开头。这些函数主要在编译器内部使用,主要是为编译器服务的。内建函数的主要用途如下。用来处理变长参数列表;用来处理程序运行异常;程序的编译优化、性能优化;查看函数运行中的底层信息、堆栈信息等;
                            
                            
                                分类:
编程语言   时间:
2019-02-03 09:15:02   
                                阅读次数:
268
                             
                         
                    
                        
                            
                            
                                    “-fstrict-aliasing”表示启用严格别名规则,“-fno-strict-aliasing”表示禁用严格别名规则,当gcc的编译优化参数为“-O2”、“-O3”和“-Os”时,默认会打开“-fstrict-aliasing”。 什么是严格别名规则?gcc对严格别名的定义: In part ...
                            
                            
                                分类:
其他好文   时间:
2019-01-21 17:06:01   
                                阅读次数:
198