Java 内存模型

概述jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型。重要的事情说多遍。内存划分java虚拟机按照运行时内存使用区域划分如图区域是否线程共享是否会内存溢出程序计数器否不会java虚拟机栈否会本地方法栈否会堆是会方法区是会 Read More

Java 垃圾回收机制

一、垃圾回收机制的意义  Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。  ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。 Read More

Android O后台持续获取地理位置的简单调研过程

这几天打算重新捡起之前的智能家居项目,由于近期换了安卓设备,所以要重新开发一款安卓APP。但是其功能很简单---可以在后台稳定地上报地理位置到服务器。首先,考虑到用LocationManager方式获取地理位置,但是根据官方文档声明,很大程度上限制了后台获取位置的能力。重要说明:作为起点,我们只允许后台应用每小时接收几次位置更新。我们将在整个预览版阶段继续根据系统影响和开发者的反馈优化位置更新间隔。当然,根据官方解释,可以通过在通知区持续地显示一项通知信息,以提高后台获取位置更新的频率。但是由于自身对于安卓开发并不熟悉,而且网上高德提供的SDK已经很好地解决了该问题,索性直接高德定位SDK来解决吧。项目代码:https://github.com/GenialX/hestia-android/tree/v0.0.1_bet文章来源:胡小旭 => Android O后台持续获取地理位置... Read More

按位运算代替乘、除和取模:哪个更快?

许多程序员都意识到这个特例,就是当你乘或除一个2次幂的时候,你可以用位移运算符来代替乘法和除法。比如:你可以用i << 1代替i*2和用i>>1代替i / 2。还有一个不太为人所知的方法是取模。但是这些方法实际上哪个更快呢?今天这篇文章就要来测试它们以下就是今天的竞争对手[code lang="java"// Multiplicatioi * 8; // normai << 3; // bitwise [8 = 2^3, so use 3] // Division i / 16; // normal i >> 4; // bitwise [16 = 2^4, so use 4// Modului % 4; // normai & 3; // bitwise [4 = 1 << 2, apply ((1 << 2) - 1), so use 3[/code这就是多次执行这些操作后的性能测试[code lang="java"... Read More

拆轮子 – 唯美细腻的夕阳海浪安卓手机动画

好久没有写博客了,一直在弥补基础, 今天带来的是一个博主有史以来见过最最精美的动画效果了。所以我才迫不及待的拆轮子。今天拆的部分是如下的效果。无图无真相呀前人种树,后人乘凉。很早的时候大神CJJ关于这个库的一些分析,大家可以去看看。http://www.jianshu.com/p/a4dabb3554c1 不过由于该文章中对于动画的具体实现没有提及,所以才有这篇文章的存在了=.因为本人水平不咋地,先奉上这个库的下载地址https://github.com/danielzeller/Depth-LIB-Android大家如果之前接触过类似的效果,其实也就没有必要看下去啦=.好了,废话说了这么多,如果有兴趣往下看,就继续吧一.说明因为代码已经存在,所以我认为就没有必要照着代码一点点讲,感觉这样的方式更容易把读者弄得云里雾里的,所以我这里决定从零开始一步步来实现这个效果(当然因为我是先仔... Read More

Java资源大全中文版(Awesome最新版)

Awesome系列的Java资源整理。awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具、数据库、框架、模板、安全、代码分析、日志、第三方库、书籍、Java 站点等等。业务流程管理套件流程驱动的软件系统构建,中间件。jBPM:非常灵活的业务流程管理框架,致力于构建开发与业务分析人员之间的桥梁。 官网Activiti:新一代的开源 BPM 引擎,核心是基于 Java 的超快速、超稳定的 BPMN 2.0 流程引擎,强调流程服务的可嵌入性和可扩展性。 官网  下载字节码操作编程方式操作字节码的开发库。ASM:通用底层字节码操作和分析开发库。 官网Byte Buddy:使用流式API进一步简化字节码生成。 官网Byteman:在运行时通过DSL(规则)操作字节码进行测试和故障排除。 官网Javassist:一个简化字节码编辑尝试。 官网集群管理在集群内动态管理应用程序的框架。... Read More

Java类加载器详解

类加载器是负责将可能是网络上、也可能是磁盘上的class文件加载到内存中。并为其生成对应的java.lang.class对象。一旦一个类被载入JVM了,同一个类就不会被再次加载。那么怎样才算是同一个类?在JAVA中一个类用其全限定类名(包名和类名)作为其唯一标识,但是在JVM中,一个类用其全限定类名和其类加载器作为其唯一标识。也就是说,在JAVA中的同一个类,如果用不同的类加载器加载,则生成的class对象认为是不同的。当JVM启动时,会形成由三个类加载器组成的初始类加载器层次结构1、启动类加载器BootstrapClassLoader是嵌在JVM内核中的加载器,该加载器是用C++语言写的,主要负载加载JAVA_HOME/lib下的类库,启动类加载器无法被应用程序直接使用。2、扩展类加载器Extension ClassLoader该加载器器是用JAVA编写,且它的父类加载器是Boots... Read More

一文了解Java NIO

Java NI1 背景介绍在上一篇文章中我们介绍了Java基本IO,也就是阻塞式IO(BIO),在JDK1.4版本后推出了新的IO系统(NIO),也可以理解为非阻塞IO(Non-Blocking IO)。引用《Java NIO》中的一段话来解释一下NIO出现的原因操作系统与 Java 基于流的 I/O模型有些不匹配。操作系统要移动的是大块数据(缓冲区),这往往是在硬件直接存储器存取( DMA)的协助下完成的。而 JVM 的 I/O 类喜欢操作小块数据——单个字节、几行文本。结果,操作系统送来整缓冲区的数据, java.io 的流数据类再花大量时间把它们拆成小块,往往拷贝一个小块就要往返于几层对象。操作系统喜欢整卡车地运来数据, java.io 类则喜欢一铲子一铲子地加工数据。有了 NIO,就可以轻松地把一卡车数据备份到您能直接使用的地方( ByteBuffer 对象)。但是Java里的... Read More