Java学习笔记
凉茶方便面
学习
展开
-
Java中的类加载机制
在Java虚拟机中,类在JVM中的生命周期为:加载、验证、准备、解析、初始化、使用和卸载几个阶段。一般类的主动加载会有以下情况:遇到new、getstatic、putstatic、或invokestatic这4条字节码(一般为new对象时,读取设置类静态字段时,调用类的静态方法时);使用java.lang,reflect包的方法进行反射时;初始化某个类,其父类会首先被初始化;拥有main方法所在的原创 2016-09-07 18:25:38 · 505 阅读 · 0 评论 -
Java中的垃圾回收
对象是否存活引用计数算法:一般判定对象是否存活的方式是通过引用计数器来记录和判定的。其过程大概是记录一个对象被引用的次数,当增加这个对象的引用时就将引用次数加1;当一个引用失效时就将引用次数减1,当对象的引用次数为0时就回收这个对象。这种方式简单且方便(有许多语言也都使用了这种方式,如Python),但是它不能解决对象间的循环引用问题。可达性分析算法:Java中是通过可达性分析(Reach原创 2016-09-06 22:03:33 · 638 阅读 · 0 评论 -
Java中的集合(List和Set)
Java容器类主要是为了“保存对象”,并将其划分为两个不同的概念:Collection,独立元素的集合,这些元素都服从一条或多条规则,如List必须按照插入顺序保存元素,Set不能有重复元素,Queue按照排队规则来确定对象的顺序。Map形成一组“键值对”对象,允许你使用键来查找值,故也被称为关联数组。本篇文章主要讲List和Set的实现细节和具体的操作。原创 2016-08-24 22:46:29 · 2940 阅读 · 1 评论 -
Java中的注解(annotation)
注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便的使用这些信息数据。注解在一定程度上是把元数据和源代码文件结合在一起,而不是保存在外部文档中。它可以使得我们能够让编译器来测试和验证格式,存储有关程序的额外信息。注解还可以生成描述符文件,甚至或是新的类定义,并且有助于减轻些“样板”代码的负担。注解是在实际的源代码级别保存所有的信息,而不是某种注释性的文字,这使得代码更整洁且便于维护。原创 2016-08-23 20:11:57 · 1655 阅读 · 0 评论 -
Java中的RMI(远程方法调用)
RMI(Remote Method Invocation,远程方法调用)是从java1.1开始实现的,它大大增强了Java开发分布式应用的能力。RMI对接口有着强烈的依赖,在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,所以客户得到远程对象的一个句柄时,它们真正得到的是接口句柄,然后本地代码通过接口操作远程对象。通过RMI编写程序可以非常方便的实现分布式Java应用程序。原创 2016-08-23 19:42:46 · 11323 阅读 · 0 评论 -
Java中的IO系统
Java I/O系统中的类非常复杂,而且因为使用了装饰器模式,很容易造成使用多种组合方式都可以达到相同的目的,故很容易产生疑惑。Java中的I/O系统大部分都在java.io包中,并且可以分为两类:针对字节流的I/O;针对字符流的I/O。并且每种I/O又分为输入流和输出流。在处理Java中的I/O时主要关注数据格式要怎么处理和数据要以什么方式传输,这两个问题。原创 2016-08-22 22:23:25 · 668 阅读 · 0 评论 -
Java中的NIO
Java1.4之后提供了java.nio包,里面包含了新的I/O库,通过使用这个nio包可以提高速度。速度的提高来自于,它的结构接近操作系统执行I/O的方式,它的核心操作源自于通道和缓冲器。通道是和I/O系统内部交互的地方,所有的数据都要通过缓冲器交给通道,通道会自动帮你和底层进行存储或取出。而且,唯一直接能够与通道交互的缓冲器是ByteBuffer。原创 2016-08-21 14:25:49 · 1304 阅读 · 1 评论 -
Java中的对象序列化
Java的对象序列化将那些实现了Serializable接口的对象转换成一个字节序列,并能够在以后将这个字节序列完全恢复为原来的对象。这一过程甚至可以通过网络进行,这意味着序列化机制能自动补弥不同操作系统之间的差异。“持久化”意味着一个对象的生存周期并不取决于程序是否正在执行,它可以生存于程序的调用之间。对象序列化的概念加入到语言中是为了支持两种主要特性。一是Java的远程方法调用(Remote Method Invocation,RMI),它使存活于其他计算机的对象使用起来就像是存活于本机上一样。二是对原创 2016-08-21 14:15:38 · 484 阅读 · 0 评论 -
生产者消费者Java实现
对于生产者消费者模式来说,通常可以用java.util.concurrent包中的ArrayBlockingQueue来实现,但是有的时候不让用concurrent,必须自己手工实现。编写生产者消费者有多中方式,一种是当条件不满足时就抛出异常,一种是通过轮询或休眠的方式,当条件不满足时进行循环,直到条件满足为止。但是还有更好的方式是,当条件不满足时可以让线程等待,如果是生产者产品过多,则让生产者等待,如果消费者消费过快,则消费者等待生产者生产。原创 2016-08-19 19:37:54 · 1124 阅读 · 0 评论 -
Java6中与Synchronized相关的锁机制
JDK1.6提供了大量的锁优化技术,其中包括适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、轻量级锁(Lightweight Locking)和偏向锁(Biased Locking)等。通过使用这些方法对Synchronized进行了虚拟机级别的锁优化,从而提高了Synchronized的使用效率。原创 2016-08-18 15:58:29 · 1423 阅读 · 0 评论 -
Java中的集合(Map)
标准库中包含了几种Map的基本实现,包括:HashMap、TreeMap、LinkedHashMap、WeekHashMap、ConcurrentHashMap、IdentityHashMap。它们都有同样的基本接口Map,但是行为特性各不相同,这表现在效率,键值对的保存及呈现次序、对象的保存周期、映射表如何在多线程程序中工作和判定“键”等价的策略等方面。Map可以将键映射到值。一个映射不能包含重复的键;每个键最多只能映射到一个值。Map 接口提供三种collection 视图,允许以键集、值集或键-值映原创 2016-08-25 22:23:00 · 3573 阅读 · 1 评论