![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JAVA
文章平均质量分 76
罗拙呓
简书博客地址:http://www.jianshu.com/u/14a4c5c3afc4
展开
-
JAVA之ConcurrentHashMap源码深度分析
欢迎转载,请附上出处:我们首先来看一下ConcurrentHashMap类的声明: public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable其中,这个类继承了java.util.AbstractMap中已有的实现,这个在前原创 2015-07-22 15:47:36 · 899 阅读 · 0 评论 -
JAVA之"equals"和"=="
equals方法是基类Object中的方法,因此对于所有的继承于Object的类都会有该方法。为了更直观地理解equals方法的作用,直接看Object类中equals方法的实现。 该类的源码路径为:C:\Program Files\Java\jdk1.6.0_14的src.zip 的java.lang路径下的Object.java(视个人jdk安装路径而定)。 下面是Object类中equal原创 2015-08-03 14:49:36 · 477 阅读 · 0 评论 -
HashMap为什么是线程不安全的?
一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题?HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。javadoc中关于hashmap的一段描述如下:此实现不是同步的。如果多个线程同时访问一个哈转载 2015-07-22 17:28:06 · 892 阅读 · 0 评论 -
JAVA动态代理详解
这几天做项目的时候碰到了JAVA动态代理机制,之前只是知道这种机制,后来通过翻书,查资料对动态代理机制有了更进一步的了解。 第一次写博客,写得不好之处请见谅,废话不多说,我们首先来看一下什么是代理。 说到代理必然要说到设计模式,其实代理是设计模式的一种,他要做的工作就是通过被代理的对象来扩展原有的功能,请看代码:/** * 首先定义一个接口,我们这里就假设一个卖衣服的场景 * SellClo原创 2015-03-26 09:41:13 · 503 阅读 · 0 评论 -
Java内存回收(2)——垃圾回收算法
如果还没看过第一篇的朋友请移步:JAVA内存回收(1)—深入浅出Java垃圾回收机制 任何垃圾收集算法必须完成两件事情。首先,它必须检测出垃圾对象。其次,它必须回收垃圾对象所占用的堆空间并使之对程序重新可用。 垃圾检测通常通过定义一个根引用集并计算其可达对象集的方式来实现。一个对象,如果可以通过某条始于根引用的引用路径而被执行程序访问到的话,则称其为可达的(reachable)。对程序原创 2015-08-15 09:05:27 · 802 阅读 · 0 评论 -
JAVA中volatile关键字的含义
在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。Java语言是支持多线程的,为了解决线程并发的问题,在语言内部引入了 同步块 和 volatile 关键字机制。synchronized同步块大家都比较熟悉,通过synchronized关键字来实现,所有加上synchronized 和 块语句,在多线程访问的原创 2015-08-03 20:18:49 · 548 阅读 · 0 评论 -
简述Java内存泄露
内存管理一直是Java 所鼓吹的强大优点。开发者只需要简单地创建对象,而Java的垃圾收集器将会自动管理内存空间的分配和释放.但在很多情况下,事情并不那么简单,在 Java程序中总是会频繁地发生内存泄露(Memory Leaks).本文阐述什么是内存泄露,为什么会泄露,以及如何防止内存泄露。内存泄露是什么? 内存泄露的定义: 当某些对象不再被应用程序所使用,但是由于仍然被引用而导致垃转载 2015-08-16 09:32:02 · 410 阅读 · 0 评论 -
Java finalize方法使用
《JAVA编程思想》: java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。 (1).对象不一定会被回收。 (2).垃圾回收不是析构函数。 (3).垃圾回收只与内存有关。 (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾转载 2015-07-24 11:56:41 · 708 阅读 · 0 评论 -
Java 中的语法糖 (Syntactic Sugar)
语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是,下面做简单的介绍和分析。泛型转载 2015-08-05 23:35:09 · 567 阅读 · 0 评论 -
深入解析String#intern
引言 在 JAVA 语言中有8中基本类型和一种比较特殊的类型String。这些类型为了使他们在运行过程中速度更快,更节省内存,都提供了一种常量池的概念。常量池就类似一个JAVA系统级别提供的缓存。8种基本类型的常量池都是系统协调的,String类型的常量池比较特殊。它的主要使用方法有两种:直接使用双引号声明出来的String对象会直接存储在常量池中。 如果不是用双引号声明的String对象,可以转载 2015-08-07 14:14:24 · 662 阅读 · 0 评论 -
Android Service与Activity之间通信的几种方式
在Android中,Activity主要负责前台页面的展示,Service主要负责需要长期运行的任务,所以在我们实际开发中,就会常常遇到Activity与Service之间的通信,我们一般在Activity中启动后台Service,通过Intent来启动,Intent中我们可以传递数据给Service,而当我们Service执行某些操作之后想要更新UI线程,我们应该怎么做呢?接下来我就介绍两种方式来原创 2015-08-20 17:27:00 · 776 阅读 · 0 评论 -
JAVA之堆内存和栈内存的区别
笔者最近在准备面试的时候重新看了一些JAVA基础的知识,下面我们一起来看一下JAVA中堆栈内存的区别: Java把内存分成两种,一种叫做栈内存,一种叫做堆内存在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。原创 2015-07-22 19:04:09 · 4212 阅读 · 2 评论 -
Java中堆、栈、常量池等概念解析
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:(1) 寄存器这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。(2) 栈(stack)存放基本类型的变量数据和对象的引用,但对象本身不原创 2015-08-20 17:59:46 · 792 阅读 · 0 评论 -
Java内存模型
1. 概述多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请求数,而TPS值与程序的并发能力有着非常密切的关系。在讨论Java内存模型和线程之前,先简单介绍一下硬件的效率与一致性。2.硬件的效率与一致性由于计算机的存储设备与处理原创 2015-09-07 22:05:37 · 612 阅读 · 0 评论 -
HashMap循环遍历方式及其性能对比
主要介绍HashMap的四种循环遍历方式,各种方式的性能测试对比,根据HashMap的源码实现分析性能结果,总结结论。1. Map的四种遍历方式 下面只是简单介绍各种遍历示例(以HashMap为例),各自优劣会在本文后面进行分析给出结论。 (1) for each map.entrySet()Map<String, String> map = new HashMap<String, String原创 2015-10-15 21:29:30 · 1101 阅读 · 0 评论 -
JAVA内存泄露原因解析
1 引言Java的一个重要优点就是通过垃圾收集器GC (Garbage Collection)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java 不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC 或JVM的问题。其实,这种想法是不正确的,因为Java 也存在内存泄漏,但它的表现与C++不同。如果正在开发的Java 代码要全天24 小时在服务器上运原创 2015-08-14 20:11:04 · 718 阅读 · 0 评论 -
JAVA内存回收(1)—深入浅出Java垃圾回收机制
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,我们不原创 2015-08-14 17:19:57 · 1020 阅读 · 0 评论 -
JAVA之父子类的构造函数、静态代码块等执行顺序
最近在做项目时遇到了Java构造函数,代码块的一些执行顺序方面的知识,随兴做了个实验,毕竟实践出真知嘛。遇到的问题简单说一下就是在子类A继承父类B的时候,如果在代码中A a = new A();这个时候父类和子类的静态代码块和构造函数执行的先后顺序到底是怎么样的呢? 我得出的结论是 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代原创 2015-07-27 22:27:51 · 2373 阅读 · 0 评论 -
栈的链表实现(JAVA)
大家知道,栈的实现可以是链表或数组或其他多种方式,链表的好处就是不会限制大小而且出栈和入栈速度都很快。下面我们来看代码:public class ListNode{ Object val; ListNode next = null; public ListNode(Object val){ this.val = val; }}public inter原创 2015-08-09 19:58:45 · 581 阅读 · 0 评论 -
JAVA线程池的分析和使用
1. 引言 合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。2. 线程原创 2015-08-24 16:00:56 · 633 阅读 · 0 评论 -
Java集合之Stack 源码分析
1.简介栈是数据结构中一种很重要的数据结构类型,因为栈的后进先出功能是实际的开发中有很多的应用场景。Java API中提供了栈(Stacck)的实现,简单使用如下所示import java.util.Stack;public class StackTest { /** * @param args */ public static void main(Strin原创 2015-07-29 10:43:24 · 1857 阅读 · 0 评论 -
synchronized的JAVA底层实现
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU原创 2015-07-29 11:47:44 · 1021 阅读 · 2 评论 -
JAVA中String和StringBuffer的区别
最近做算法题时经常会遇到StringBuffer来处理字符串,那么StringBuffer和String到底有什么区别呢,下面我们来看一下: String与StringBuffer的区别 简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被修改,重新赋值其实是两个对象。 StringBuffer的内部实现方式和Strin原创 2015-07-18 09:58:31 · 477 阅读 · 0 评论 -
算法题(JAVA实现)——网易校招2015
有两个有序的集合,集合的每个元素都是一段范围,求其交集,例如集合{[4,8],[9,13]}和{[6,12]}的交集为{[6,8],[9,12]}public class Collection { class Set { // 集合数据结构 int low; int high; public Set() { } pu原创 2015-08-11 14:41:37 · 1262 阅读 · 1 评论 -
JAVA---揭秘StringBuffer的capacity
原文地址:http://blog.sina.com.cn/s/blog_7de5c6210100t641.html 前几天写了一篇文章“ 如何让你的程序运行的更快(1)—String VS StringBuffer ”,文章在情景三中提到了如何通过“设置StringBuffer的容量来提升性能”,其中有个问题我没有想明白,就是为什么StringBuffer的容量自动增加的时候是“2*旧值+2”呢?原创 2015-07-18 10:02:07 · 2787 阅读 · 0 评论 -
一个经典例子让你彻彻底底理解java回调机制
转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17483273),请尊重他人的辛勤劳动成果,谢谢 以前不理解什么叫回调,天天听人家说加一个回调方法啥的,心里想我草,什么叫回调方法啊?然后自己就在网上找啊找啊找,找了很多也不是很明白,现在知道了,所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用转载 2015-07-30 19:31:23 · 482 阅读 · 0 评论 -
JAVA CAS原理深度分析
CAS---CAS:Compare and Swap, 翻译成比较并交换。 java.util.concurrent包中借助CAS实现了区别于synchronouse同步锁的一种乐观锁。 本文先从CAS的应用说起,再深入原理解析。转载 2015-07-30 16:20:14 · 793 阅读 · 0 评论 -
JAVA——各类型所占字节数
都是些基础,没啥好说的。。基本概念 字节的单位是byte。位的单位是bit。1byte=8bit。 1bit能表示多少个数字——最小0,最大1。2的1次方个。 2bit能表示多少个数字——最小00,最大11。2的2次方个。 3bit能表示多少个数——最小000,最大111。2的3次方个。 依此类推—8bit可以表示2的8次方共256个数字。 若数没有正负之分可表示0—255共256个数字原创 2015-07-30 17:12:31 · 1607 阅读 · 0 评论 -
Java中Exception的种类
通常来讲,Java中的异常会被分为三种: Error: 这种异常被设计成不被捕获,因为这种异常产生于JVM自身。 Runtime Exception: 运行时异常往往与环境有关,编译时无法检查,并且可能发生的情况太广泛,所以系统会去处理,程序不需要捕获。 普通异常: 常见的异常大多属于此类。 这里的Java异常指直接继承java.lang.Throwable的异常类,他们的结构如下图: j原创 2015-08-27 08:20:16 · 1579 阅读 · 0 评论 -
java中四种引用类型
今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混。后来在网上查资料,感觉收获颇多,现记录如下。对象的强、软、弱和虚引用在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及(reachable)状态,程序才能使用它。从JD转载 2015-08-27 11:42:50 · 2202 阅读 · 0 评论 -
JAVA wait(), notify(),sleep详解
在JAVA中,是没有类似于PV操作、进程互斥等相关的方法的。JAVA的进程同步是通过synchronized()来实现的,需要说明的是,JAVA的synchronized()方法类似于操作系统概念中的互斥内存块,在JAVA中的Object类型中,都是带有一个内存锁的,在有线程获取该内存锁后,其它线程无法访问该内存,从而实现JAVA中简单的同步、互斥操作。明白这个原理,就能理解为什么synchroni转载 2015-08-13 21:16:24 · 549 阅读 · 0 评论 -
深入剖析Java中的装箱和拆箱
原文链接: http://www.cnblogs.com/dolphin0520/p/3780005.html 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题。本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱、拆箱相关的问题。 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试转载 2015-07-22 11:54:17 · 716 阅读 · 0 评论 -
Java native方法以及Mac上的JNI实践
前言今天看AndFix实现时,核心方法之ReplaceMethod方法是一个native方法,之前并没有遇到过,所以在此整理记录。native的作用总而言之:native是与C++联合开发的时候用的!使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++语言实现的,并且被编译成了DLL,由java去调用。native 是用做java 和其他语言(如c++)...转载 2018-03-11 10:25:16 · 1377 阅读 · 0 评论