`
lg70124752
  • 浏览: 61735 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

深入理解java虚拟机学习笔记(七)--早期(编译期)优化

    博客分类:
  • jvm
阅读更多
第十章 早期(编译期)优化
1、概述
java语言的“编译期”是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实叫“编译器的前端”更准确一些)把*.java转变成*.class文件的过程;也可能是批虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程;还可能是指使用静态提前编译器(AOT编译器,Ahead Of Time Compiler)直接把*.java文件编译成本地机器代码的过程。
2、由于编译器进行了常量折叠,“a=1+2”比起直接定义“a=3”,并一会增加程序的运算量。
3、方法重载要求方法具备不再的特征签名,返回值并不包含在方法的特征签名之中,所以返回值不参与重载选择,但是在Class文件格式之中,只要描述符不是完全一致的两个方法就可以共存。但是在JDK7中如下是不允许的,在1.6中是允许的。
public class GenericTypes {
    public static String method(List<String> list){
        System.out.println("invoke method(List<String> list)");
        return "";
    }

    public static int method(List<Integer> list){
        System.out.println("invoke method(List<Integer> list)");
        return 1;
    }

    public static void main(String[] args) {
        method(new ArrayList<String>());
        method(new ArrayList<Integer>());
    }
}
4、“==”运算在没有遇到算要运算的情况下不会以自动拆箱,而它们的equals()方法不会以处理数据转型的关系,在实际编码中就尽量避免这样使用自动装箱与拆箱。
  Integer a = 1;
        Integer b =2;
        Integer c =3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        System.out.println(c == d); //true 小于127会直接比较int的值,有缓存常量
        System.out.println(e == f); //false 大于127不会,直接按对象处理
        System.out.println(c == (a+b)); //true 小于127
        System.out.println(c.equals(a + b)); //true 比较值
        System.out.println(g == (a+b)); //true int转long ,小于127
        System.out.println(g.equals(a+b)); //false equals不会装箱,不会int转long 类型不匹配
5、Java程序命名规范
类(或接口):符合驼式命名法,首字母大写。
方法:符合驼式命名法,首字母小写。
字段:类或实例变量:符合驼式命名法,首字母小写。
     常量:要求全部由大写字母或下划线构成,并且第一个字符不能是下划线。
6、可以通过Javac命令的“-processor“参数来执行编译时需要附带的注解处理器,如果有多个注解处理器的话,用逗号分隔。还可以使用-XprintRounds和-XprintProcessorInfo参数来查看注解处理器动作的详细信息。
分享到:
评论

相关推荐

    Java笔记---李兴华

    Java源代码先被编译成字节码,然后由Java虚拟机(JVM)解释执行。这种模式既保留了编译型语言的性能优势,又具有解释型语言的灵活性。 通过上述分析,我们可以看出Java不仅仅是一门语言,更是一个庞大的生态系统。...

    java学习笔记

    Java最显著的特点之一就是其跨平台性,这主要得益于它的字节码文件和Java虚拟机(JVM)。 - **字节码文件**: Java编译后的代码是字节码形式(.class文件),它不包含任何关于内存布局的信息,并且与操作系统和硬件...

    Java学习笔记精彩版.doc

    Java 学习笔记精彩版 本文档是 Java 学习笔记的精彩版,涵盖了 Java 的基础知识,包括 Java 的跨平台性、安全性、面向对象编程、动态更新、简朴性等特点,以及 Java 开发平台的搭建、环境变量的设定、Java 运行过程...

    魔乐JAVA培训课堂笔记

    ### 魔乐JAVA培训课堂笔记精要 #### 一、Java语言概述 - **Java简介**:Java是由Sun Microsystems公司于1995年推出的一种...无论是对于初学者还是专业开发者来说,深入理解Java的核心概念和技术框架都是非常必要的。

    1 JAVA学习笔记.zip

    它以其“一次编写,到处运行”的特性而闻名,因为Java代码可以跨多个平台运行,只需一个Java虚拟机(JVM)。这份"1 JAVA学习笔记.zip"包含了深入学习Java编程的重要资料,对于初学者和有经验的开发者来说都是宝贵的...

    Java学习笔记

    ### Java学习笔记 #### Java的优势 1. **跨平台(平台=OS)可移植性** - **字节码文件**:Java程序被编译成字节码文件(`.class`),这些文件不包含任何特定于操作系统的内存布局信息。这意味着它们与操作系统和...

    _JavaSE内部学习笔记

    ### JavaSE内部学习笔记知识点概览 #### 一、Java语言概述 ...接下来的学习笔记将深入探讨面向对象编程、类的高级特性、异常处理等更高级的主题。这些知识点是Java开发的核心,对于理解和掌握Java语言至关重要。

    狂神说JVM探究.rar

    【狂神说JVM探究】是一份集合了多种格式的学习资料,主要涵盖了Java虚拟机(JVM)的基础知识。这份资料出自B站上的【狂神说Java】系列教程,为快速入门JVM提供了详实的笔记。以下是根据这些资源可能包含的一些关键...

    1 第一天 魔乐java基础视频学习笔记.docx

    Java的核心理念是“一次编写,到处运行”,这意味着Java程序可以在任何支持Java虚拟机(JVM)的操作系统上运行。自1995年发布JDK1.0以来,Java经历了三个发展阶段,包括完善期、平稳期和发展期。Oracle在2010年收购...

    学习笔记.pdf

    Scala 语言的静态类型可以在编译期检查类型错误,避免了运行时的类型错误。Scala 语言的面向对象特性使得它可以与 Java 语言无缝集成。Scala 语言的函数式编程特性使得它可以编写更加简洁、灵活的代码。 3. Scala ...

    JSD1906达内Java .rar

    【JSD1906达内Java .rar】是一个压缩包文件,主要包含了"all代码和笔记",意味着它提供了全面的学习资源,很可能是达内教育机构针对JSD1906期Java课程的学生所准备的资料。达内是知名的IT培训机构,其课程通常涵盖了...

    黑马程序员_Java基础辅导班教程课件[第01期]第4天

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和丰富的类库而闻名。在"黑马程序员_Java基础辅导班教程课件[第01期]第4...此外,理解JVM(Java虚拟机)的工作原理和内存管理也对优化代码性能至关重要。

    类的加载机制笔记

    其中,加载、验证、准备、初始化这四个阶段发生的顺序是由《Java虚拟机规范》明确定义的,并且这些步骤是按顺序进行的。类的加载过程主要由类加载器(ClassLoader)完成,类加载器负责将.class文件中的字节码读取到...

    c#学习笔记.txt

    c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...

Global site tag (gtag.js) - Google Analytics