Java垃圾回收(3):常见的四种垃圾收集器

2014年11月23日 没有评论 10 人阅读    

本节我们将介绍几种可用的Java垃圾收集器。垃圾回收是一个自动进程,它把开发人员从内存的分配与回收的杂务中解放出来。本文是“Java垃圾回收系列”的第三篇。在上一篇,也就是第二篇中,我们了解了Java垃圾回收的工作原理,这节非常有意思,我推荐你看一看。在第一篇“Java垃圾回收入门”中,我们介绍了Java虚拟机架构,堆内存模型以及Java相关的一些术语。

Java有四种垃圾收集器:

  1. Serial Garbage Collector
  2. Parallel Garbage Collector
  3. CMS Garbage Collector
  4. G1 Garbage Collector

D瓜哥注

这是四种类型的垃圾收集器。具体到每一个实现,在Oracle提供的官方JDK中就有Serial Garbage Collector、ParNew Garbage Collector、Parallel Scavenge Garbage Collector、Serial Old Garbage Collector、Parallel Old Garbage Collector、CMS Garbage Collector、G1 Garbage Collector等七种垃圾收集器。以后有机会再专门写文章做详细介绍!

四种Java垃圾收集器工作流程对比

这四种垃圾收集器每一种都有自己的优点与不足。最重要的是, 阅读全文…

分类: Java, 挨踢(IT) 标签: , ,

Java垃圾回收(2):工作原理

2014年11月16日 没有评论 23 人阅读    

本文将介绍Java垃圾回收的基础知识,同时将说明它的工作原理。同时,本文还是“Java垃圾回收系列”的第二篇文章。希望您已经阅读过该系列的第一篇文章,“Java垃圾回收入门”

Java垃圾回收是一个自动管理程序所用内存的进程。通过将内存的分配与回收交给Java虚拟机来自动完成,就可以将开发人员从这些繁琐易错的工作中解放出来。

垃圾回收的启动

作为一个自动化的进程,开发人员不需要在代码中显式地启动垃圾回收进程。System.gc()Runtime.gc()是申请垃圾收集器启动垃圾回收的勾子(hook)。

开发人员通过这种请求机制就有机会来请求启动垃圾回收,但是是否启动则由Java虚拟机自己决定。垃圾收集器可以选择拒绝这个请求,所以不保证请求到来之后就肯定进行垃圾回收。是否进行垃圾回收主要是根据堆内存中Eden内存的利用情况。Java虚拟机规范将这个选择权交给了实现,所以更详细的信息还要看具体的实现细节。

现在,我们知道了, 阅读全文…

分类: Java, 挨踢(IT) 标签: , ,

简易Java(16):Java中的覆盖和重载

2014年11月16日 没有评论 2 人阅读    

1、定义

对于Java初学者来说,覆盖(Overriding)和重载(Overloading)是两个非常容易混淆的概念。

重载的情况是这样的,在同一个类中,有两个甚至更多的方面,他们名称相同,但是有不同的参数列表。

覆盖的意思是,有两个同名的方法,同时还有相同的参数列表,但是却有不同的实现。其中一个存在于父类中,另外一个在子类中。

2、覆盖 vs 重载

对于覆盖和重载有几个非常重要的事实需要注意:

  1. 真实的对象类型,而不是引用变量的类型,至于哪个覆盖方法会被使用是在运行时决定的;
  2. 引用类型在编译时决定那个重载方法被使用;
  3. 多态性取决于覆盖,而不是重载。

3、覆盖示例

这里有一个覆盖的示例。阅读代码,然后 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(15):Java中equals()hashCode()之间的联系

2014年11月14日 没有评论 8 人阅读    

Hash函数

Java的最基本的父类java.lang.Object中有两个非常重要的方法定义:

public boolean equals(Object obj)
public int hashCode()

实践证明,正确理解这两个方法非常重要,尤其是向Map中添加用户自定义的对象时。即便如此,甚至有些高级开发人员有时很很难说清楚它们到底应该怎么用。在这篇文章里,我将先展示几个常见的 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

强烈推荐十本好书

2014年11月10日 6 条评论 825 人阅读    

上周三(2014年11月5日)公司搞入职培训,所讲的一些东西和我关注的东西有点“不谋而合”,感觉很爽;周四蔡导(当然就是讲师了)把讲座的PPT群发到技术部邮件组里,参与讨论时,我就询问想推荐一些书,看大家感不感兴趣,结果不少人回应很“激烈”。到周五(2014年11月7日)在公司技术群里求推荐好书,又掀起来一波热潮。大家推荐了不少好书。中国向来是礼仪之邦,正所谓来而不往非礼也!D瓜哥也来推荐一些书。

上面是废话,下面开始转入正题。

推荐原则

从去年找工作,甚至再往前,从上大学开始,到现在为止,翻过不少书(好多没看完,姑且叫翻吧),运气还算不错,确实遇到一些不错的好书,值得反复阅读,细细品味。不过,一次太多,容易把人吓着,所以,暂且推荐十本吧。

另外,这次的介绍主要是面向公司内部同事,考虑到公司所用技术方向,也为了照顾大多数人,推荐的书籍大部分不限于某一语言。不过,因为本人几乎一直从事Java开发,所以,相对来说可能稍微侧重一些;另外,因为从来没有从事过PHP的开发(为了优化博客,折腾Wordpress不算),所以不推荐专门的PHP相关书籍。

最后一个,也是最重要的原则:D瓜哥看过、试过之后有一种“醍醐灌顶”的“顿悟”感。(当然,D瓜哥水平有限,所以“顿悟”的可能比较频繁。这个,牛人、大拿可以直接飞过去了。呵呵)

一、《大话设计模式 》

先说明一下,这本书的代码是用C#实现的,搞C#的人可以先高兴一下。

不过,代码都很浅显易懂,可以很方便地“迁移”到其他语言了。所有的技术人员都可以高兴一下了。哈哈

引用本书中的一句话:如果说数学是思维的体操,那么设计模式就是 阅读全文…

简易Java(14):ComparableComparator

2014年11月9日 没有评论 11 人阅读    

ComparableComparator是Java核心API提供的两个接口(interface)。从它们的名字就可以看出,他们用于比较对象的大小。但是,确切来说,它们到底是什么呢?以及它们直接有什么不同之处呢?接下来的两个例子来回答这个问题。这个简单的例子就是比较两种HDTV的尺寸。当阅读完下面的代码,你就知道如何使用ComparableComparator

1、Comparable

一个类实现Comparable接口,是为了可以让其自身的对象和其他对象进行比较。类本身必须实现这个接口,为的是可以和它自己的实例进行比较。要求实现的方法是compareTo()。下面的 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

简易Java(13):Java中的null到底为何方神圣?

2014年11月3日 没有评论 30 人阅读    

让我们从下面这行代码开始:

String x = null;

上面这句话到底做了什么?

在回答这个问题之前,我们需要先回顾一下什么是变量以及什么是变量值?一个常见的比喻是变量就类似一个箱子。就像你可以使用箱子盛放东西一样,你能用变量存放变量值。当你声明一个变量时,你就需要设置它的类型。

Java中主要分为两种数据类型:基本类型和引用类型。声明为基本类型的变量存储变量值;声明为引用类型的变量存储引用。在 阅读全文…

分类: Java, 挨踢(IT) 标签: ,

Java垃圾回收(1):入门

2014年10月29日 没有评论 69 人阅读    

在Java,内存空间的分配和回收都是有Java虚拟机的垃圾回收进程自动完成的。这点和C语言不同,在Java中,不需要开发人员专门垃圾回收相关的代码。这是使Java流行起来的众多原因之一,并且帮助开发人员写出了更好的Java应用。

接下来,将通过四篇文章来介绍Java垃圾回收的一些基础知识。

  1. Java垃圾回收入门
  2. Java垃圾回收的工作原理
  3. 常见的四种Java垃圾收集器
  4. Java垃圾回收的监控与分析

本文是该系列的第一篇文章。将介绍几个 阅读全文…

简易Java(12):如何高效检查一个数组中是否包含某个值?

2014年9月29日 没有评论 125 人阅读    

如何检查一个数组(未排序)中是否包含某个特定的值?在Java中,这是一个非常有用并又很常用的操作。同时,在StackOverflow中,有时一个得票非常高的问题。在得票比较高的几个回答中,时间复杂度差别也很大。在下面的例子中,D瓜哥将展示每个方法花费的时间。

1、不同的实现方式

1) 使用List

/**
 * Coder:D瓜哥,http://www.diguage.com/
 */

public static boolean useList(String[] arr, String targetValue) {
    return Arrays.asList(arr).contains(targetValue);
}

2) 使用 阅读全文…

分类: Java, 未分类 标签: , ,

MySQL远程访问设置终极解决方案

2014年8月28日 没有评论 165 人阅读    

数据库对于服务端开发人员来说,几乎就是左膀右臂。几乎每一个服务端开发人员都要和数据库打交道。而MySQL又以其开源免费,小巧玲珑,简单易用,功能强大占据中国数据库使用份额的半壁江山。从去年接触到Vagrant以来,Vagrant以其方便易用深深吸引了D瓜哥。为了尽可能地和生产环境保持尽可能的一致性,减少不必要的问题的发生,Vagrant+Ubuntu+MySQL几乎是绝配。

MySQL允许远程访问的设置

  1. 注释bind-address = 127.0.0.1

    >cd /etc/mysql
    >sudo vim my.cnf
    

    阅读全文…

无觅相关文章插件,快速提升流量