`
文章列表
今天终于有所斩获,发现了Sun Hotspot JVM GC最全的参数调整列表:   http://blogs.sun.com/watt/resource/jvm-options-list.html http://www.cnblogs.com/totti19841106/archive/2009/01/12/1374274.html   有关JVM默认值的参考资料如下: https://gist.github.com/827140 http://hg.openjdk.java.net/jdk6/jdk6/hotspot/file/tip/src/share/vm/runtime/ ...
Java的内存使用完之后,是通过JVM的GC进行回收的。 1 概述   垃圾收集的目的在于清除不再使用的对象。gc通过确定对象是否被活动对象引用来确定是否收集该对象。gc首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。   1.1引用计数(Reference Counting)   通过引用的次数来判断对象是否需要被回收。因为在循环引用时,容易出问题,因此在较新的JVM中被抛弃,这种策略只是在早期的JVM中使用过。   由下图可以看出, Interger P = new Integer(); Integer对象的引用计数为1. ...
选择排序的基本思想是,每一趟在n-i(i=0....,n-1)个记录中选取关键字最小的记录作为有序序列中的第i个记录。   更加具体的描述如下:   假设有5个待排元素需要升序排列:   第一趟排序,把5个元素中最小的元素拿出来,并把它放在第一个位置上,此时第一个元素的位置已经排好,不需要再排列 第二趟排序,把除掉第一个元素的其它四个元素的最小值求出,并把它放在第二个位置上 。。。。。 直到最后一次为止 选择排序算法的优点   相对于冒泡算法,选择算法减少了交换的次数,由n(n-1)/2到n-1次,但是元素之间的比较次数并没有改变: n(n-1)/2   ...
1.排序算法的简要介绍   排序是非常重要的的并且是非常耗时的,所以它已经成为一个计算机科学中广泛研究的课题,而且人们已经研究出了一些非常成熟的算法。目前最简单的排序算法包括:冒泡排序、选择排序和插入排序。每一个算法都由一个实例说明。更加复杂的排序算法包括:希尔排序和快速排序。尽管简单排序算法执行速度相对慢一些,但是仍然值得学习。比如,对于小规模的文件以及基本有序的文件,插入排序算法能比快速排序算法更加有效,实际上,插入排序通常会作为快速排序算法实现的一部分。   2.排序-冒泡排序算法 冒泡排序运行起来非常慢,但在概念上是排序算法中最简单的。   冒泡排序算法描述 ...
1.简介   现摘录一段Java5内存管理白皮书中的一段话:   One strength of the Java™ 2 Platform, Standard Edition (J2SE™) is that it performs automatic memory management, thereby shielding the developer from the complexity of explicit memory management.   由上面我们可以知道,Java平台采用了自动的内存管理方式,那么JVM是如何进行内存管理的呢?   Java的内存管理实 ...
“生产者-消费者-仓储”模型,包含三种角色: 1.生产者 2.消费者 3.仓库   离开了仓储,生产者消费者模型就显得没有说服力了。   对于此模型,应该明确一下几点: 1、生产者仅仅在仓储未满时候生产,仓满则停止生产。 2、消费者仅仅在仓储有产品时候才能消费,仓空则等待。 3、当消费者发现仓储没产品可消费时候会通知生产者生产。 4、生产者在生产出可消费产品时候,应该通知等待的消费者去消费。 下面的三个类分别代表了生产者,消费者和仓库 package producerconsumer; /**  * <p>Description: Test&l ...
1.队列的基本知识   和栈相反,队列是一种先进先出(First In First Out,缩写为FIFO)的线性表,它只允许一端进行插入,而在另外一端删除元素。这和我们日常生活中的排队是一致的,最早进入队列的元素最早离开。在队列中,允许插入的一端叫做队尾(rear),允许删除的一端称之为队头(front)。         2.队列的基本操作 InitQueue:构造一个空队列 DestroyQueue:销毁队列 ClearQueue:清空队列 QueueEmpty:判断队列是否为空 QueueLength:队列长度 GetHead:获取队列头部元素 EnQ ...
在网页开发过程中,Keep-Alive是HTTP协议中非常重要的一个属性。大家知道HTTP构建在TCP之上。在HTTP早期实现中,每个HTTP请求都要打开一个socket连接。这种做效率很低,因为一个Web 页面中的很多HTTP请求都指向同一个服务器。例如,很多为Web页面中的图片发起的请求都指向一个通用的图片服务器。持久连接的引入解决了多对已请求服务器导致的socket连接低效性的问题。它使浏览器可以再一个单独的连接上进行多个请求。浏览器和服务器使用Connection头ilai指出对Keep-Alive的支持。   笔者在去年遇到一个跟Keep-Alive的问题:   问题现象: ...
疑难杂症类别是总结了笔者这么多年来开发的经验总结   2006年开发公司里的一个产品时,发现了一个很难解决的问题:   问题现象:Tomcat跑一天Perm Space 报outofMemory的错误,后来就调整JVM的PermSize,调大后,一天稍长时间又出现这个错误,有点晕了。   环境:JDK1.5,Tomcat5,Hibernate+Spring   问题解决:想了半天,原来Hibernate 采用CGLib实现了lasy load的功能,其间要生成新的class,这些class,如果GC不回收,Perm Space当然迟早会溢出。后来一查果然是这个问题CGLib有个b ...
当下面两种情况的SSL,用HttpClient建立连接时,需要使用自定义SSL:   Ability to accept self-signed or untrusted SSL certificates. This is highlighted by an SSLException with the message Unrecognized SSL handshake (or similar) being thrown when a connection attempt is made. You want to use a third ...
栈是重要的数据结构,从数据结构角度看,栈也是线性表,其特殊性在栈的基本操作是线性表的子集。Stack作为最基本的数据结构,在JDK代码中,也有它的实现,java.util.Stack类是继承了Vector类,来实现了栈的基本功能。   1.栈的基本原理   栈(Stack)是限定仅在表尾进行插入或者删除操作的线性表。因此,对于栈来说,表尾端有特殊含义,成为栈顶,表头称之为栈底。   由下图可以看出,栈的最基本的特征是LIFO(Last In First Out),因此栈又被称为后进先出 的线性表。   2.栈的基本操作   InitStack(&S)-- ...
Global site tag (gtag.js) - Google Analytics