java
文章平均质量分 73
无酒少肉终难潇洒
对计算机有浓厚的兴趣,热爱软件行业,痴迷于代码。个人十分钦佩Linus并喜爱Linux操作系统,同时自己也很喜爱阅读,喜欢通过阅读来开阔视野,扩充知识面,并有较强的好奇心与求知欲。
展开
-
JVM自动内存管理机制分析
最近这段时间学习了Java虚拟机相关的一些知识,对Java程序的运行和JVM的内存管理策略有了更深的理解。这篇文章就对此做一下简单的总结。JVM内存模型要理解JVM的内存管理策略,首先就要熟悉JVM的内存模型,如上图所示,在执行Java程序的时候,虚拟机会把它所管理的内存划分为多个不同的数据区,称为运行时数据区。在程序执行过程中对内存的分配、垃圾的回收都在运行时数据区中进行。对于Java程序员来说,原创 2015-03-19 17:16:23 · 408 阅读 · 0 评论 -
什么是CopyOnWrite
前段时间写过一篇关于concurrentHashMap的文章ConcurrentHashMap实现原理,其中讲到了实现ConcurrentHashMap的原理,这篇文章就讲一下CopyOnWrite的实现原理。Java中提供了两个CopyOnWrite容器,分别是CopyOnWriteArrayList和CopyOnWriteArraySet。如果想要高效的使用这两个容器,我觉的首先要弄懂CopyO原创 2015-04-16 22:28:58 · 1275 阅读 · 0 评论 -
Java中的线程
理解线程这段时间在看《Java并发编程实战》这本书,使自己对Java多线程的理解又加深一些,感觉自己可以总结一下了,本文就讲讲与线程有关的内容吧。我们要使用线程,首先需要理解线程,前短时间我在聊聊操作系统这篇文章中提到了一点关于线程的东西,有兴趣的同学可以读一下。有一点需要理解的就是,我们虽然常说“Java多线程”,但实际上线程这东西是由操作系统提供支持的,它并不是由Java本身提供支持的,所以实际原创 2015-04-16 20:57:03 · 513 阅读 · 0 评论 -
深入理解Java类加载原理
虽然每天都在用Java,现在做的项目后台也是用的Java语言,近期帮师兄做的算法实验也是用Java实现的,但是总觉得自己对这门语言学习的不够深入,仅仅停留在会用的层面上。今天看了一位中科大师姐的文章,觉得自己很有必要再深入学习这门语言,还需要加深自己对Java的理解。我个人觉得,对一个程序员来说,理解力十分重要。一门编程语言,学会使用很容易,但是要真正理解这门语言的设计哲学似乎就没那么容易了。而一但原创 2015-03-16 17:33:00 · 317 阅读 · 0 评论 -
几个常见排序算法的实现
冒泡排序突然心血来潮想要自己再重新实现一下当时学过的几个排序算法,然后马上就打开eclipse开始敲代码。说到排序,首先想到的就是冒泡,记得这个算法还是大一入学不久,编程入门老师讲过的。当时还是用c++实现的冒泡,现在虽然知道冒泡的原理,但是很多实现细节都感觉有些模糊了,今天就重新用Java实现一下,加深一下对其的理解。代码详见冒泡排序java实现。 冒泡排序的原理十分简单也很容易理解,比较两个相原创 2015-03-16 17:27:01 · 399 阅读 · 0 评论 -
ConcurrentHashMap实现原理
寒假阶段复习了下Java集合框架,感觉有些收获,但是文中没有提到有关并发集合的内容,这篇文章就来谈谈并发散列表——ConcurrentHashMap,我们知道HashMap本身并不是线程安全的,如果程序需要在多线程的环境下运行,那么我们可以选择Hashtable做为替代,但是看过Hashtable源码的同学应该都知道,Hashtable内部实现是将需要同步的方法加上synchronized关键字来实原创 2015-03-24 16:50:53 · 648 阅读 · 0 评论 -
Java核心技术复读笔记
关于排序算法的稳定性稳定,即不需要交换相同的元素。 考虑一种情况,有一个已经按照姓名排好序的员工列表,现在需要按照工资再次排序。如果有两个员工的工资相等。那么稳定的排序算法,将会保留按名字排列好的顺序。排序的结果将产生这样一个列表:首先按照工资排序,工资相同者再按照姓名排序。而不稳定的排序算法,将会打乱原来按姓名排好的序列。关于阻塞队列对于许多多线程问题,都可以抽象成生产者与消费者问题,可以通过使原创 2015-03-16 17:33:30 · 336 阅读 · 0 评论 -
Java的反射机制
今天在慕课网上看了一些有关Java反射的视频,感觉收获不小。反射(Reflection)能够让运行于JVM中的程序检测和修改运行时的行为。自从学Java以来就一直对反射这块内容不是很理解,今天就觉得自己突然开窍了,好像理解了些什么,于是就趁热打铁记录下来吧。一切皆是对象要学习面向对象编程,首先要理解什么是对象,面向对象更是一种思想,而不仅仅是一种技术。在Java中,对象是某个类的实例,那么类本身是不原创 2015-03-16 17:37:43 · 299 阅读 · 0 评论 -
再谈JVM类加载机制
几个月前写了深入理解Java类加载原理这篇文章,简单的谈了下我对Java类加载的理解,最近这段时间又研习了《深入理解Java虚拟机》一书,对JVM的类加载机制又有了更加系统的认识,下面我就再来讲讲学习心得吧。虚拟机如何进行类的加载 通过一个类的全限定名来获取定义此类的二进制字节流。 将这个字节流所代表的静态存储结构转化为方法区中的运行时数据结构。 在内存(对于HotSpot虚拟机来说,这个内存是指方原创 2015-03-23 16:13:42 · 624 阅读 · 0 评论 -
Java内存模型与volatile关键字
Java内存模型(Java Memory Model)Java内存模型(JMM),不同于Java运行时数据区,JMM的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中读取数据这样的底层细节。JMM规定了所有的变量都存储在主内存中,但每个线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的所有操作都必须在工作内存中进行,而不能直原创 2015-03-23 16:12:57 · 489 阅读 · 0 评论 -
代码整洁之道
是的,我们就是一群代码猴子,上窜下跳,自以为领略了编程的真谛。可惜,当我们抓着几个酸桃子,得意洋洋的坐到树枝上,却对自己造成的混乱熟视无睹。那堆“可以运行”的乱麻程序,就在我们的眼皮底下慢慢腐坏。 这段话引用自Robert C.Martin(鲍勃大叔)所著的《代码整洁之道》。当时刚买来这本书时,只是随便翻了翻,觉得没什么意思就扔到一边去了。最近在书堆里又偶然发现了它,便又拿出来重新读了读。而这次就真原创 2015-03-16 17:42:18 · 365 阅读 · 0 评论 -
Javac和Java在CLI中的使用
最近这几天在学习Robert Sedgewick和Kevin Wayne的《算法》一书。第一章讲了一些Java编程的基础,第二章讲了一些最基础的排序算法。目前刚刚看完这两章,虽然很基础,但是毕竟不能只看书不练习,于是就动手写代码实践一下。可是刚开始写代码我就遇到了麻烦,我始终不知道在Eclipse中如何把标准输入流重定向到文件,就像在命令行中输入java Test < data.txt这样。我知道在原创 2015-03-16 17:46:21 · 445 阅读 · 0 评论 -
Java集合框架
先来看一张Java集合的类图。本来是想自己画一个的,但是在网上看到了这个图之后就觉得没有再重新画一个的必要了。这个图相对网上其他一些图来说更全面一些。下面我们根据这个图来逐一分析具体的常用集合类。 Iterator接口:这个接口定义了从集合中获取元素和判断集合中是否还有元素的方法。下图中是jdk1.8中Iterator接口申明的两个方法 通过hasNext()方法可以判断集合中是否还有剩余元素,ne原创 2015-03-16 17:45:25 · 339 阅读 · 0 评论 -
Spring之思
一直在断断续续的学习Spring框架,到目前为止,虽然没有在实际项目中应用过,但也算是有一些收获了吧。由于刚刚读完吴军博士的《数学之美》,深受其启发,觉得无论做什么事情,心中都一定要有大格局。就像所谓的学习,我看来就可以分成两种,一种是“道”的学习,另一种是“术”的学习。道就是原理,术就是技术。技术可以千变万化,而原理永远都是那个原理。这也是我最近又认真学习算法知识的原因之一——新技术虽然层出不穷,原创 2015-03-16 17:44:34 · 378 阅读 · 0 评论