摘要:
Java堆是虚拟机所管理的内存中最大的一块。 Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。 此内存区域的唯一目的就是存放对象实例,Java中几乎所有的对象实例都在这里分配内存。 随着Java的发展,即时编译技术的进步,Java对象实例分配在堆上慢慢变得不是那么绝对。 Java堆是垃 阅读全文
摘要:
Java虚拟机栈是线程私有的,它的生命周期与线程相同。 虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。 每一个方法被调用直至执行完毕的过程, 就对应着一个栈帧在虚拟机中从入栈到出栈的过程 阅读全文
摘要:
程序计数器是一块较小的内存空间,可以看作是当前线程执行的字节码的行号指示器。 在Java虚拟机的概念模型中,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令。 分支,循环,跳转,异常处理等基础功能都需要依赖这个计数器来完成。 因为Java虚拟机的多线程是轮流切换、分配处理 阅读全文
摘要:
虚拟机没有泛型类型对象(所有对象都属于普通类) 类型擦除 无论何时定义一个泛型代码,都会自动提供一个相应的原始类型。 这个原始类型的名字就是去掉类型参数之后的泛型类型名。 类型变量会被擦除,并替换为其限定类型(或者,对于无限定的变量则替换为Object)。 例如,Pair的原始类型如下所示: // 阅读全文
摘要:
按值调用表示方法接收的是调用者提供的值。 按引用调用表示方法接收的是调用者提供的变量地址。 方法可以修改按引用传递的变量的值,但是不能修改按值传递的变量的值。 Java总是按值调用。 也就是说,方法得到的是所有参数值的一个副本。意思就是,方法不能修改传递给它的任何参数变量的内容。 有两种类型的方法参 阅读全文
摘要:
有时候,使用内部类只是为了把一个类隐藏在另一个类的内部,并不需要内部类有外围类对象的一个引用。为此,可以将内部类声明为static,这样就不会产生那个引用。 只有内部类可以声明为static。 静态内部类类似其他内部类,只是静态内部类的对象没有生成它的外围类对象的引用。 如果内部类对象是在静态方法中 阅读全文
摘要:
可以将实例字段定义为final,这样的字段必须在构造对象时初始化。 也就是说,必须确保在每个构造器执行之后,这个字段的值已经设置,并且以后不能再修改这个字段。 例如,可以将Employee类中的name字段声明为final,因为在对象构造之后,这个值不会改变,所以name没有set方法 class 阅读全文
摘要:
泛型类和泛型方法有参数类型,这使得它们可以准确地描述用特定实例化时会发生什么。 在有泛型类之前,程序员必须使用Object编写适用于多种类型的代码。这烦琐且不安全。 泛型程序设计意味着编写的代码可以对多种不同类型的对象重用。 在Java 5中增加泛型类之前,泛型程序设计是用继承实现的。 如果用一个明 阅读全文
摘要:
由于严格的泛型类型使用不方便,所以Java的设计者发明了一种巧妙但很安全的“解决方案”:通配符类型 通配符概念 在通配符类型中,允许类型参数发生变化。例如通配符类型Pair<? extends Employee> 表示任何泛型Pair类型,它的类型参数是Employee的子类,如Pair<Manag 阅读全文
摘要:
Date类的实例有一个状态,即特定的时间点 时间是用距离一个固定时间点的毫秒数(可正可负)表示的,这个时间点就是纪元,它是UTC时间1970年1月1日00:00:00。 UTC就是Coordinated Universal Time(国际协调时间),和GMT(Greenwich Mean Time, 阅读全文