Java
文章平均质量分 94
李牙刷儿_
在路上的程序员!
展开
-
java 反射机制
今天和同事一起开发一个Android App的时候,第一次接触到了反射机制这样一个东西,于是上网查了很多资料,看了一些文档。现在终于有了一点了解,故将其写下,大牛勿喷。 首先,我们所学的编程语言大致可以分为两种,第一种为静态语言:C、C++、java ,这些语言的的变量类型一旦确定将不可更改;还有一类为动态语言:Perl、Python 这些语言的变量类型是可以更改的。但是java又区别原创 2013-05-11 17:16:52 · 878 阅读 · 0 评论 -
ProGuard 混淆解析
最近被keep keepnames keepclassmembers等几个混淆规则搞得晕头转向,看起来虽然简单,但用起来却经常跟自己预想的一样。所以决定放弃看他人总结的博客,直接看ProGuard官方文档,目前为止,总算是有一定了解了。1 ProGuard简介通常我们都认为ProGuard是一个代码混淆工具,实际上其作用还不至于此,而是包括了四部分内容:shrink(删减):删减无用代码,包括无用原创 2017-08-15 22:04:08 · 1313 阅读 · 0 评论 -
Java并发——volatile的原理
volatile关键字就是Java中提供的另一种解决可见性和有序性问题的方案。对于原子性,需要强调一点,也是大家容易误解的一点:对volatile变量的单次读/写操作可以保证原子性的,如long和double类型变量,但是并不能保证i++这种操作的原子性,因为本质上i++是读、写两次操作。原创 2017-07-25 20:44:04 · 408 阅读 · 0 评论 -
Java并发——线程间协作(wait、notify、sleep、yield、join)
1线程的状态Java中线程中状态可分为五种:New(新建状态),Runnable(就绪状态),Running(运行状态),Blocked(阻塞状态),Dead(死亡状态)原创 2017-07-25 20:43:17 · 551 阅读 · 0 评论 -
Java并发——Synchronized优化(轻量级锁、偏向锁)
Synchronized的实现依赖于与某个对象向关联的monitor(监视器)实现,而monitor是基于底层操作系统的Mutex Lock实现的,而基于Mutex Lock实现的同步必须经历从用户态到核心态的转换,这个开销特别大,成本非常高。所以频繁的通过Synchronized实现同步会严重影响到程序效率原创 2017-07-25 20:42:11 · 1797 阅读 · 0 评论 -
Java并发——Synchronized及其实现原理
接下来我们就来看下Synchronized的实现原理,看看Synchronized是如何实现上述三个作用的。Synchronized有三种常用方法:修饰普通方法、修饰静态方法、修饰代码块原创 2017-07-25 20:39:44 · 523 阅读 · 0 评论 -
java.util.concurrent解析——AbstractQueuedSynchronizer队列管理
上一篇博客中,我们提到AQS的队列管理是基于CLH锁队列实现的,所以首先我们来看下CLH锁队列。1 CLH锁队列CLH锁队列本质上是一个基于链表的FIFO自旋锁队列,队列中的每一个节点实质上是一个自旋锁:在阻塞时不断循环读取状态变量,当前驱节点释放同步对象使用权后,跳出循环,执行同步代码。原创 2017-07-25 20:35:49 · 617 阅读 · 0 评论 -
java.util.concurrent解析——AbstractQueuedSynchronizer综述
尽管JVM在并发上已经做了很多优化工作,如偏向锁、轻量级锁、自旋锁等等。但是基于Synchronized wait notify实现的同步机制还是无法满足日常开发中。原生同步机制在时间和空间上的开销也一直备受诟病。为了提升Java程序在并发场景下的性能、扩展性和健壮性,java.util.concurrent的使用必不可少。原创 2017-07-25 20:32:56 · 1026 阅读 · 0 评论 -
java.util.concurrent解析——FutureTask源码解析
Runnable、Callable、Future、FutureTask的区别与联系和Java异步打交道就不能回避掉Runnable,Callable,Future,FutureTask等类,首先来介绍下这几个类的区别原创 2017-07-16 22:33:51 · 1190 阅读 · 0 评论 -
java.util.concurrent解析——ThreadPoolExecutor源码解析
任何一种语言、框架,线程都是非常重要的一部分。要想实现异步就需要通过异步线程,但是频繁地创建销毁线程会带来较大的性能开销,而线程池就是为解决这一问题而出现的原创 2017-07-16 22:35:38 · 746 阅读 · 0 评论 -
JVM学习笔记(二)——Class文件结构
JVM学习笔记(二)——Class文件结构Class文件是Java程序跨平台的保证,正是由于有了Class文件架起源码和机器码之间的中间桥梁,JVM虚拟机才可以在各种平台上按照统一的规范标准加载Java代码。作为“写给虚拟机看的”Java代码,Class文件结构必须设计得足够完善,同时由于Java虚拟机规范并不只针对Java,Class文件又不能引入过多细节。本篇博客我们就来介绍下Class文件的结原创 2017-07-10 21:12:05 · 461 阅读 · 0 评论 -
JVM学习笔记(四)——字节码执行引擎
代码编译的结果从机器码转变为字节码,是存储格式的一小步,确实编程语言发展的一大步。正是因为有了字节码这一中间格式才有了Java语言跨平台的特性。字节码并不能直接基于物理机执行引擎执行,因为物理机执行引擎是建立在特定的处理器,指令集以及操作系统之上的,并不具备跨平台特性。所以执行字节码的责任就交给了虚拟机中的字节码执行引擎。1 运行时栈帧结构栈帧是用于刻画Java程序运行时一个方法的调用、执行以及返回原创 2017-07-10 21:15:09 · 383 阅读 · 0 评论 -
JVM学习笔记(三)——虚拟机类加载机制
在介绍完class文件格式后,我们来看下虚拟机是如何把一个由class文件描述的类加载到内存中的。具体来说java中类的加载涉及7个阶段:加载、校验、准备、解析、初始化、使用、卸载。1.加载时机并不是所有的类在程序启动时即被加载,为提升效率,虚拟机通常秉承的是按需加载的原则,即需要使用到相应的类时才加载对应的类。具体包括如下几个加载时机:遇到new、getstatic、putstatic、invo原创 2017-07-10 21:13:13 · 385 阅读 · 0 评论 -
JVM学习笔记(一)——内存模型
对于Java程序员来说,他们相比C++程序员最幸福的一点就是不用自己管理内存,内存的分配和回收都由虚拟机完成。然而,正是由于该原因,一旦虚拟机内存管理出现问题,比如出现内存泄漏或溢出,排查起来将是非常困难的。所以尽管不用亲自动手管理内存,但是了解虚拟机的内存管理机制还是很有必要的。运行时数据区域首先来看下Java虚拟机在运行时的数据区域划分,Java虚拟机在Java程序运行时会将内存区域划分成若原创 2017-07-10 21:10:53 · 372 阅读 · 0 评论 -
Android进阶之自定义注解
原文链接:点击打开链接本篇文章内容包括: 注解的概念元注解自定义注解Android自定义编译时注解如果使用过ButterKnife, EventBus, Retrofit, Dagger等框架, 你对注解一定不会陌生. 但是注解背后究竟有什么魔法, 可以做这么不可思议的事情.什么是注解先来看看Java文档中的定义An annotation is a form o转载 2016-11-06 16:43:50 · 806 阅读 · 0 评论 -
Java反射机制
今天和同事一起开发一个Android App的时候,第一次接触到了反射机制这样一个东西,于是上网查了很多资料,看了一些文档。现在终于有了一点了解,故将其写下,大牛勿喷。 首先,我们所学的编程语言大致可以分为两种,第一种为静态语言:C、C++、java ,这些语言的的变量类型一旦确定将不可更改;还有一类为动态语言:Perl、Python 这些语言的变量类型是可以更改的。但是java又区...2013-05-11 17:10:26 · 99 阅读 · 0 评论