西维蜀黍

【Java】类(Class)与继承(Inheritance)

你了解类吗?

.java文件中的public类

在Java中,类文件是以.java为后缀的代码文件。

在每个类文件中最多只允许出现一个public类。

且当有public类的时候,这个.java文件的文件名称必须和public类的名称相同。

若不存在public,则类文件的名称可以为任意的名称(当然以数字开头的名称是不允许的)。

  ...


【Java】访问修饰符(Access Modifier)

访问修饰符(Access Modifier)

**访问控制修饰符(Access Modifier)**用来定义类、类的方法或者类的成员变量。

  ...


【Java】Java 动态代理(Dynamic Proxy)

代理

我们大家都知道微商代理,简单地说就是代替厂家卖商品,厂家“委托”代理为其销售商品。

关于微商代理,首先我们从他们那里买东西时通常不知道背后的厂家究竟是谁,也就是说,“委托者”对我们来说是不可见的;其次,微商代理主要以朋友圈的人为目标客户,这就相当于为厂家做了一次对客户群体的“过滤”。

我们把微商代理和厂家进一步抽象,前者可抽象为代理类,后者可抽象为委托类(被代理类)。通过使用代理,通常有两个优点,并且能够分别与我们提到的微商代理的两个特点对应起来:

  ...


【Java】对象的序列化(Serialization)与反序列化(Deserialization)

序列化(Serialization)与反序列化(Deserialization)

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。一般将一个对象存储至一个储存媒介,例如档案或是记亿体缓冲等。在网络传输过程中,可以是字节或是XML等格式。而字节的或XML编码格式可以还原完全相等的对象。这个相反的过程又称为反序列化。

  ...


【Java】枚举Enum

背景

在Java语言中还没有引入枚举类型之前,表示枚举类型的常用模式是声明一组具有int常量。

  ...


【Java】枚举实现单例模式

背景

单例模式的不同实现

  ...


【Java】同步容器与线程安全问题

问题

对于线程安全的集合类(例如Vector)的任何操作是不是都能保证线程安全?

  ...


【Java】String - String.intern()方法

背景

String 类型拥有一个字符串常量池(String Constant Psool),使用字符串常量池包括以下两种方式:

  ...


【Java】垃圾回收 - 分代垃圾回收

为什么要分代?

分代的垃圾回收策略,是基于这样一个事实:不同的对象的生命周期是不一样的。

因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。

在Java程序运行的过程中,会产生大量的对象,其中有些对象是与业务信息相关,比如Http请求中的Session对象、线程、Socket连接,这类对象跟业务直接挂钩,因此生命周期比较长。但是还有一些对象,主要是程序运行过程中生成的临时变量,这些对象生命周期会比较短,比如:String对象,由于其不变类的特性,系统会产生大量的这些对象,有些对象甚至只用一次即可回收。

试想,在不进行对象存活时间区分的情况下,每次垃圾回收都是对整个堆空间进行回收,花费时间相对会长。同时,因为每次回收都需要遍历所有存活对象,但实际上,对于生命周期长的对象而言,这种遍历是没有效果的,因为可能进行了很多次遍历,但是他们依旧存在。

因此,分代垃圾回收采用分治的思想,进行代的划分,把不同生命周期的对象放在不同代上,不同代上采用最适合它的垃圾回收方式进行回收。

如何分代?

如图所示,虚拟机中的共划分为三个代:新生代(Young Generation)、老年代(Tenured Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。新生代和老年代的划分是对垃圾收集影响比较大的。

  ...


【Java】对象的内存分配 - 垃圾回收过程

对象的内存分配 - 垃圾回收过程

1 对象分配到新生代区域中

所有new出来的对象都会最先分配到新生代区域中,两个survivor区域初始化是为空的。

  ...