![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java核心技术
liliugen
这个作者很懒,什么都没留下…
展开
-
CallableAndFuture
[code="java"]import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; /** *//**...原创 2012-07-24 11:31:03 · 112 阅读 · 0 评论 -
JVM调优总结(一)-- 一些概念
数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对象本身存放在这个引用值所表示的地址的位置。基本类型包括:byte,short,int,long,char,float,double,Boolean,returnAddress...原创 2010-11-25 15:00:44 · 58 阅读 · 0 评论 -
DCL,双重检查(来自annegu)
对于多线程编程来说,同步问题是我们需要考虑的最多的问题,同步的锁什么时候加,加在哪里都需要考虑,当然在不影响功能的情况下,同步越少越好,锁加的越迟越优是我们都必须认同的。DCL(Double Check Lock)就是为了达到这个目的。 DCL简单来说就是check-lock-check-act,先检查再锁,锁之后再检查一次,最后才执行操作。这样做的目的是尽可能的推迟锁的时间。网上普遍举的...原创 2010-09-05 16:25:39 · 162 阅读 · 0 评论 -
JVM原理学习笔记一
最近在阅读 《Inside the JVM》 这本书,结合一些日常工作学习中的感想,随便写一些东西,蜻蜓点水,不必有章法。 关于“单例同步”: 一直有人在问单例对象的并发调用是否需要同步,基本属于“月经帖”了,答案是现成的满天下都是,但真正能让人心里踏实下来的解释寥寥无几。实际上,只要学习了一些JVM的运行原理,解释这个问题就不难了。 如果一个类是单例的,比如某些D...原创 2010-06-11 16:22:15 · 87 阅读 · 0 评论 -
JAVA语言为什么能跨平台?
因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。...原创 2009-09-08 10:52:04 · 125 阅读 · 0 评论 -
类和对象的区别
1、类是对象的抽象;对象是类的实例。2、类不占用内存空间,对象占用存储空间。原创 2009-09-03 21:45:22 · 261 阅读 · 0 评论 -
throw与throws的区别
[b]异常类[/b]从哪里来?有两个来源,一是Java语言本身定义的一些基本异常类型,二是用户通过继承Exception类或者其子类自己定义的异常。Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。[b]异常的对象[/b]从哪里来呢?有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如...原创 2009-09-01 20:34:39 · 70 阅读 · 0 评论 -
servlet在什么时候调用 destroy方法?
destroy方法在容器移除servlet 时执行,同样只执行一次。这个方法会在所有的线程的service()方法执行完成或者超时后执行,调用这个方法后,容器不会再调用这个servlet的方法,也就是说容器不再把请求发送给这个servlet。这个方法给servlet释放占用的资源的机会,通常用来执行一些清理任务。...原创 2009-08-31 19:27:05 · 1288 阅读 · 0 评论 -
链表的实现
[code="java"]/** * */ package link; /** * @author sunxboy * */ public class Node { /** * 链表结构的特征: * 分二部分: * 第一部分为数据 *...原创 2009-07-17 14:21:35 · 57 阅读 · 0 评论 -
java排序汇总
[code="java"]package com.softeem.jbs.lesson4; import java.util.Random; /** * 排序测试类 * * 排序算法的分类如下: * 1.插入排序(直接插入排序、折半插入排序、希尔排序); * 2.交换排序(冒泡泡排序、快速排序); * 3.选择...原创 2009-07-17 10:37:08 · 56 阅读 · 0 评论 -
java基本知识备注
java 代码1.float精确位数运算[code="java"]float a = 1234.5678f; java.text.DecimalFormat df =new java.text.DecimalFormat("#.00"); String a=df.format(a); System.out.println(a); //1234.56 ...2009-07-16 09:46:46 · 85 阅读 · 0 评论 -
java里的String
1. java里的new 一个String对象时都会在堆内存里产生一个对象。String str = new String("abc") 首先检查String Pool里有没有值为abc的对象,如果没有会先在String Pool里产生一个值为abc的对象,然后再在堆内存里拷贝一个值为abc的对象,然后把堆内存里的对象的地址赋值给str,如果String Pool里有一个值为abc的对象...原创 2009-07-16 09:25:56 · 70 阅读 · 0 评论 -
15种提高系统伸缩性和性能的最佳实践
1, 提高系统性能, 需要尽早做性能剖析, 而且要经常做.当项目进行到后期, 你再考虑剖析性能时, 复杂的系统结构会让你望而却步.2, 开发者和SA的合作是有必要的, SA可以反馈线上的运行状况给开发者, 防止一些紧急事故的发生, 恶化.3, 模拟生产环境的数据来做测试, 可以减少上线时, 出现未知问题的概率, 使问题更早的被暴露出来.4, 通过监控日志, 查看系统负载, 分析程序运行...原创 2010-11-25 16:00:32 · 167 阅读 · 0 评论 -
通过GC输出分析内存泄露问题
SIP5.0以后服务的请求量爆发性增长,因此也暴露了原来没有暴露出来的问题。由于过去一般一个新版本发布周期在一个月左右,因此如果是小的内存泄露,在一个月之内重新发布以后也就看不出任何问题。 因此这阵子除了优化Memcache客户端和SIP框架逻辑以外其他依赖部分以外,对于内存泄露的压力测试也开始实实在在的做起来。经过这次问题的定位和解决以后,大致觉得对于一个大用户量应用要放心的话,那么需要...原创 2010-11-26 15:13:41 · 100 阅读 · 0 评论 -
CountDownLatch
concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。 CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDown...原创 2012-07-24 11:00:36 · 86 阅读 · 0 评论 -
认识理解Java中native方法
Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。 可以将native方法比作Java程序同C程序的接口,其实现步骤: 1、在Java中声明native()方法,然后编译; 2、用javah产生一个.h文件; ...原创 2011-11-02 16:35:29 · 140 阅读 · 0 评论 -
java 数组复制:System.arrayCopy 深入解析
转载:[url]http://happyjin2010.iteye.com/blog/1073195[/url]先看ArrayList源码中数组复制的代码: 其实ArrayList 就是一个数组的形式存放数据的. 没有高深的地方.他的性能在于他的索引能力, 正因为他是数组形式,所以索引元素的时候他表现得非常的快速成,试想一下, 只要知道这个元素的索引,E[2] 你看对...原创 2011-11-02 10:02:24 · 194 阅读 · 0 评论 -
equals hashcode 深度分析
1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有 例如内存中有这样的位置 0 1 2 3 4 5 6 7 而我有个类,这个类有个字段叫ID,我要把这个类存放在以上8个位置之一,如果不用hashcode而任意存放,那么当查找时就需要到这八个位置里挨个去找,或者用二分法一类的算法。 但如果用hashcode那就会使效率提高很多。 我 们这个类中有...原创 2011-07-14 13:17:39 · 165 阅读 · 0 评论 -
java proxy
代理?就是别人帮你管理叫代理. 举个例子 你是家里的主人,但是呢.家里有个活儿是开门的活儿..这个活儿呢,你可以招聘一个管家.来做这个开门的活儿.这个管家就是等于代理. 那为什么需要这个管家(代理)呢? 比如没有管家的时候,你做饭的时候有人来了,是你自己去开门,或者洗澡的时候来人了,也是你去开门,或者你大便的时候人来了也需要你自己去开门,但是呢有了管家之后你不需要做这个开门的活儿....原创 2011-07-12 16:31:38 · 64 阅读 · 0 评论 -
关于 JVM 命令行标志您不知道的 5 件事(来自IBM)
JVM 是多数开发人员视为理所当然的 Java 功能和性能背后的重负荷机器。然而,我们很少有人能理解 JVM 是如何进行工作的 — 像任务分配和垃圾收集、转动线程、打开和关闭文件、中断和/或 JIT 编译 Java 字节码,等等。不熟悉 JVM 将不仅会影响应用程序性能,而且当 JVM 出问题时,尝试修复也会很困难。本期 5 件事 系列 将介绍一些命令行标志,您可以使用它们来诊断和...原创 2010-11-29 17:10:22 · 77 阅读 · 0 评论 -
关于 Java Collections API 您不知道的 5 件事,第 1 部分(转自IBM)
对于很多 Java 开发人员来说,Java Collections API 是标准 Java 数组及其所有缺点的一个非常需要的替代品。将 Collections 主要与 ArrayList 联系到一起本身没有错,但是对于那些有探索精神的人来说,这只是 Collections 的冰山一角。关于本系列您觉得自己懂 Java 编程?事实上,大多数程序员对于 Java 平台都是浅尝则止,只学习了足...原创 2010-11-29 16:58:30 · 81 阅读 · 0 评论 -
java线程安全总结(转载jameswxx)
最近想将java基础的一些东西都整理整理,写下来,这是对知识的总结,也是一种乐趣。已经拟好了提纲,大概分为这几个主题: java线程安全,java垃圾收集,java并发包详细介绍,java profile和jvm性能调优 。慢慢写吧。本人jameswxx原创文章,转载请注明出处,我费了很多心血,多谢了。关于java线程安全,网上有很多资料,我只想从自己的角度总结对这方面的考虑,有时候写东西是很痛苦...原创 2010-11-29 12:50:06 · 103 阅读 · 0 评论 -
说说new Integer和Integer.valueOf(转载jameswxx)
看看这两个语句 Integer a=new Integer(1) Integer a=Integer.valueOf(1); 两个都是得到一个Integer对象,但是Integer.valueOf的效率高。为什么呢?因为Integer.valueOf用到了缓存。看看Integer.valueOf的代码: [code="java"]public static In...原创 2010-11-29 12:23:48 · 118 阅读 · 0 评论 -
优化JVM参数提高eclipse运行速度
性能优化从身边做起。 首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse。优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡,也就是没有full GC。 开始: eclipse.ini里加入打印gc情况的参数: [code="java"]-XX:+PrintGCTimeS...原创 2010-11-26 16:13:34 · 77 阅读 · 0 评论 -
主题:一次Java垃圾收集调优实战
1 资料•[url=http://calvin.iteye.com/blog/91905]JDK5.0垃圾收集优化之--Don't Pause(花钱的年华) [/url] •[url=http://calvin.iteye.com/blog/91903]编写对GC友好,又不泄漏的代码(花钱的年华) [/url]•[url=http://pengjiaheng.spaces.live....原创 2010-11-26 15:29:37 · 73 阅读 · 0 评论 -
关于String字符串对象的创建与管理(String pool测试)
String s=new String("abc");//JVM现在String pool中找有没有“abc”的字符串,没有就创建一个该字符串对象“abc”,该对象在String pool中并不是在堆中,这就是很多教程上所说的垃圾对象,然后JVM会通过String pool中对象在堆里也创建一个“abc”String对象,句柄s指向的是堆中的对象; System.out.prin...原创 2009-06-22 22:28:13 · 82 阅读 · 0 评论 -
Java向上转型
通俗理解向上转型:就是子类转型成父类。class A { } class B extends A { } A b = new B();这个就是向上转型。向上转型可以像下面这条语句这么简单:Shape s =new Circle(); 这里,创建一个Circle对象,并把得到的引用立即赋值给S矇,这样做看似错误(将一种类型...原创 2009-06-10 14:15:21 · 82 阅读 · 0 评论 -
System.getProperty()参数大全
java.version Java Runtime Environment version java.vendor Java Runtime Environment vendor java.vendor.url Java vendor URL java.home ...原创 2008-11-06 15:59:21 · 102 阅读 · 0 评论 -
一些经典的国外CSS+DIV设计网站地址,方便学习
http://www.css-gallery.co.uk/index.php?page=8 经典的CSS网站设计网站 http://www.carlsholm.se/hem/ http://www.isureinsurance.co.uk/ http://www.csshardcore.com/?referrer=css-gallery.co.uk http://www.heathwaen.co...原创 2008-11-06 14:57:42 · 145 阅读 · 0 评论 -
Java堆和栈的区别
栈与堆都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 Java的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运...原创 2008-11-06 12:28:13 · 56 阅读 · 0 评论 -
Java堆和栈 & String StringBuffer StringBuilder效率探究
对象的创建(即内存的分配 ) Thinking in Java中详细介绍了当程序运行的时候,具体的内存分配。 可以分为寄存器、堆栈、堆、常量存储、非RAM存储。 下面具体分析一下java中的堆和栈(参考:http://blog.csdn.net/tanghw/archive/2005/02/18/291811.aspx)。 1. 两者比较1). 栈(stack)与堆(heap)都是Java...原创 2008-11-06 10:37:12 · 91 阅读 · 0 评论 -
java常用时间类
经常用到时间日期类,所以就将常用的日期方法和属性都归纳总结如下,方便大家查找 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance(); time.clear(); time.set(Calendar.YEAR,year); time.set(Calendar.MONTH,i-1);//注意,Calendar对象默认一月为0 int day=time.g...原创 2008-10-31 10:17:16 · 87 阅读 · 0 评论 -
Java虚拟机及运行时环境
Java虚拟机及运行时环境JRE The Java Runtime Environment JRE=JVM+Runtime Interpreter+others Java运行环境的三项主要功能 加载代码:由class loader 完成 校验代码:由bytecode verifier完成 ...原创 2008-10-31 09:39:46 · 211 阅读 · 0 评论 -
java 命名规范
关键字: java 参考 命名规范 记得前段日子有幸看到了华为培训资料,发现其中对命名规范方面用了很大篇幅,足见命名规范对于java开发来说是多么重要的事情,这不仅仅是一种良好的开发习惯,也是一种专业、协同的体现。另外了解命名规范,可以更好的学习和记忆 Java 类库中类和函数。因为我们可以看到,很多java程序员在不知不觉中规范着自己,这样我们才可以在浏览别人共享的代码时会受益更多。...原创 2008-10-31 09:24:39 · 83 阅读 · 0 评论 -
java内存机制原理
问题的引入:问题一:String str1 = "abc"; String str2 = "abc"; System.out.println(str1==str2); //true 问题二:String str1 =new String ("abc"); String str2 =new String ("abc"); System.out.prin...原创 2008-10-30 15:47:57 · 82 阅读 · 0 评论 -
JDK源码分析:java.lang.Boolean
先找了一个最简单的java.lang.Boolean开始解剖。首先我们剔除所有的方法和静态变量,Boolean的核心代码如下:public final class Boolean implements java.io.Serializable,Comparable{ private final boolean value;}很明显,凡是成员变量都是fina...原创 2008-10-30 09:47:27 · 80 阅读 · 0 评论 -
newInstance() 和 new 有什么区别?
在初始化一个类,生成一个实例的时候;newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使用工厂模式上也可以找到具体答案。 ...2008-10-28 22:08:25 · 76 阅读 · 0 评论 -
几种类加载方式的区别
虚拟机加载类的途径:1、Dog dog = new Dog();这个动作会导致常量池的解析,Dog类被隐式装载。如果当前ClassLoader无法找到Dog,则抛出NoClassDefFoundError。2、Class clazz = Class.forName(“Dog”); Object dog =clazz.newInstance();通过反射加载类型,...原创 2008-10-28 17:28:41 · 185 阅读 · 0 评论 -
优秀Java程序员必须了解的GC工作原理
一个优秀的Java 程序员必须了解GC的工作原理、如何优化GC的性能、如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统、实时系统等,只有全面提升内存的管理效率 ,才能提高整个应用程序的性能。本篇文章首先简单介绍GC的工作原理之后,然后再对GC的几个关键问题进行深入探讨,最后提出一些Java 程序设计建议,从GC角度提高Java程序的性能。 GC的基本原理 Java的...原创 2008-11-06 16:16:29 · 63 阅读 · 0 评论 -
Java对象池技术的原理及其实现
Java对象的生命周期分析 Java对象的生命周期大致包括三个阶段:对象的创建,对象的使用,对象的清除。因此,对象的生命周期长度可用如下的表达式表示:T = T1 + T2 +T3。其中T1表示对象的创建时间,T2表示对象的使用时间,而T3则表示其清除时间。由此,我们可以看出,只有T2是真正有效的时间,而T1、T3则是对象本身的开销。下面再看看T1、T3在对象的整个生命周期中所占的比例。 ...原创 2008-11-06 16:50:52 · 60 阅读 · 0 评论