拿笔小星的博客

Stay hungry,Stay foolish

Java8 effectively final

在Java8之前,我们在匿名内部类中如果使用外部局部变量a,那么变量a必须被声明为final的。但从Java8开始,我们不需要再去显示地声明这个局部变量为final了。

2019-03-31 19:23:38

阅读数 28

评论数 0

Java反序列化与对象的创建

Java反序列化,创建对象,不会调用目标对象的构造方法。这是为什么?那么反序列化是如何创建对象的,让我们来看看他的底层机制吧。

2019-02-24 19:45:08

阅读数 113

评论数 0

Java SPI机制

**SPI(Service Privoder Interface)**,是Java提供的一套用来被第三方实现或者扩展的API,它可以用来启用框架扩展和替换组件。

2019-01-26 19:33:12

阅读数 87

评论数 0

Java字节码结构剖析五:异常表

异常表实际上是Java代码的一部分,编译器使用异常表而不是简单的跳转命令来实现Java异常及`finally`处理机制。(注:在JDK1.4.2之前的Javac编译器采用了jsr和ret指令实现`finally`语句。在JDK1.7中,已经完全禁止Class文件中出现jsr和ret指令,如果遇到这...

2019-01-05 00:31:06

阅读数 119

评论数 0

Java字节码结构剖析四:属性表

了解了方法表的结构后,我们知道方法表有自己的属性表,用来存储与当前方法相关的附加属性。属性表每一个成员的值必须是`attribute`结构(如下所示:),一个方法可以有任意个与之相关的属性。

2018-12-09 18:09:40

阅读数 148

评论数 0

浅析java内存模型

在并发编程中,多个线程之间采取什么机制进行通信(信息交换),什么机制进行数据的同步? 在Java语言中,采用的是共享内存模型来实现多线程之间的信息交换和数据同步的。 线程之间通过共享程序公共的状态,通过读-写内存中公共状态的方式来进行隐式的通信。同步指的是程序在控制多个线程之间执行程序的相对顺序的...

2018-12-02 14:41:30

阅读数 54

评论数 0

Java字节码结构剖析三:方法表

这里给大家介绍一款字节码分析小工具——jclasslib bytecode viewer。它可以将字节码文件结构化的展现给我们看。

2018-11-18 16:44:58

阅读数 155

评论数 0

Java字节码结构剖析二:字段表

上篇介绍了字节码文件的结构和其常量池分析。紧接其后呢,我们要去了解字段表的概念和组成结构。接着上篇里的字节码的常量池往后分析。 access_flags 访问标志信息包括该class文件是类还是接口,是否定义成public,是否是abstract,如果是类,是否被申明为final。access...

2018-10-28 16:44:27

阅读数 189

评论数 0

Java字节码结构剖析一:常量池

这篇博客开始,我打算手把手的带大家去解读一下JVM平台下的字节码文件(熟悉而又陌生的感觉)。众所周知,Class文件包含了我们定义的类或接口的信息。然后字节码又会被JVM加载到内存中,供JVM使用。那么,类信息到了字节码文件里,它们如何表示的,以及在字节码里是怎么分布的呢?带着这些问题,让我们去深...

2018-10-14 15:01:42

阅读数 474

评论数 1

Java与单例模式

最近在阅读《Effective Java 》这本书,第3个条款专门提到了单例属性,并给出了使用单例的最佳实践建议。让我对这个单例模式(原本我以为是设计模式中最简单的一种)有了更深的认识。 单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类...

2018-07-29 20:49:47

阅读数 1065

评论数 2

策略模式

最近我在项目中做了一个地图API相关的功能开发,需求就是,国内调百度地图API,海外就调谷歌地图API。功能实现很简单,但是这个功能开发完后,让我对策略模式有了更深的理解和印象。在这里我把当时的想法和遇到的问题完整记录下来。 首先,定义一个地图接口。 /** * 地图servic...

2018-06-16 15:45:32

阅读数 145

评论数 0

类初始化阶段详解

一个Java类的完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况。如图所示: 类的初始化做了什么 为类的静态变量赋予正确的初始值。 执行类的静态代码块。 按照顺序自上而下运行类中的变量赋值语句和静态语句,如果有...

2018-03-04 20:46:24

阅读数 1036

评论数 4

Java NIO学习笔记四(零拷贝详解)

维基上是这么描述零拷贝的:零拷贝描述的是CPU不执行拷贝数据从一个存储区域到另一个存储区域的任务,这通常用于通过网络传输一个文件时以减少CPU周期和内存带宽。

2018-01-21 20:20:57

阅读数 6848

评论数 6

Java NIO学习笔记三(堆外内存之 DirectByteBuffer 详解)

堆外内存堆外内存是相对于堆内内存的一个概念。堆内内存是由JVM所管控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且它们遵循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存。那么堆外内存就是存在于JVM管控之外的一块内存区域,因此它是不受JVM的管控。

2017-12-11 17:13:24

阅读数 5124

评论数 0

Java NIO学习笔记二(Buffer的flip()方法详解)

flip()反转Buffer,将Buffer从读状态反转到写的状态

2017-11-26 17:09:17

阅读数 2170

评论数 0

Java NIO学习笔记一(IO VS NIO)

JAVA中传统IO和NIO的区别

2017-11-18 17:11:50

阅读数 600

评论数 0

foreach循环详解

不要在 foreach 循环里进行元素的 remove / add 操作。 remove 元素请使用 Iterator方式,如果并发操作,需要对 Iterator 对象加锁

2017-11-02 15:48:17

阅读数 2410

评论数 1

gradlew在基于Gradle项目构建中的应用分析

众所周知,在软件开发中,我们无论使用何种工具、库和软件,首先要做的事情就是先将所需的工具下载到本地,然后可能还需要进行一些基本的配置才能够正常使用。

2017-10-22 16:22:26

阅读数 814

评论数 0

通过匿名内部类创建对象

通过匿名内部类的方式创建一个对象,并且完成一些操作。

2017-07-23 21:48:31

阅读数 785

评论数 0

git用github搭建远程仓库

在github上新建远程库,然后和本地git库关联,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举多得。

2017-07-15 14:45:51

阅读数 356

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭