自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Jackson Zhang

记录是最好的回忆!

  • 博客(29)
  • 资源 (2)
  • 收藏
  • 关注

原创 垃圾收集器

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/82408521、判断对象是否“存活”的两种方式(1)引用计数算法给对象加一个引用计数器,有一个地方引用它则 +1 ,当引用失效则 -1,当为 0 时则该对象不再使用但是,这样的话会造成循环引用场景无法回收(2)根搜索算法通过一系列名为“GC Roo

2012-11-29 20:37:46 1931

原创 对象访问分析

转载请注明出处: http://blog.csdn.net/kai_wei_zhang/article/details/8239537Object obj = new Object();“object obj"这部分的语义将会映射到Java(虚拟机)栈的本地变量表,作为一个reference类型数据出现而"new Object” 这部分的语义将反映到Java堆中,形成了一块

2012-11-29 16:58:03 3234

原创 Java虚拟机内存管理

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/8239092运行时数据区域(如图)1、对各内存空间的理解 (1)程序计数器(也叫PC寄存器)Program Counter是一块较小的内存空间,作用可以看成当前线程所执行的字节码的行号指示器(2)Java虚拟机栈虚拟机栈描述的是

2012-11-29 15:06:34 2485

原创 类执行机制

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/82347611、字节码解释执行方式在源码编译阶段将源码编译为JVM字节码,JVM字节码是一种中间代码的方式,要由JVM在运行期对其进行解释并执行,这种称为字节码解释执行方式2、执行时的栈帧结构(每一个线程有一到多个栈帧)栈帧是用于支持虚拟机进行方法调用

2012-11-28 16:24:15 2368

原创 类加载机制

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/82341461、预先加载:JRE运行的开始会将Java运行所需要的基本类采用预先加载的方法全部加载到内存,如JRE的rt.jar里面所有的.class文件2、类的生命周期:类从被加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括七个阶段加载——>验证——

2012-11-28 16:17:15 4463 1

原创 类加载器

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/8234690类加载器1、Bootsrap ClassLoader 是Sun JDK采用C++实现的类,此类并非ClassLoader的子类,在代码中无法得到类对象,Sun JDK启动时会初始化此ClassLoader,并有ClassLoader完成$JAVA_

2012-11-28 15:22:12 2328

原创 线程池

只有当任务都是同类型的并且是相互独立时,线程池的性能才能达到最佳。如果将运行时间较长的与运行时间较短的任务混合在一起,那么除非线程池很大,否则将可能造成“阻塞”。如果提交的任务依赖于其他任务,那么除非线程池无限大,否则将可能造成“拥塞”。如果提交的任务依赖于其他任务,那么除非线程池无限大,否则将可能造成死锁。幸运的是,有基于网络的典型服务器应用程序中——网页服务器、邮件服务器以及文件服务器等,他们

2012-11-22 20:41:29 1995

原创 自定义线程工厂

JDK线程 池:Executors.newFixedThreadPool , Executors.newSingleThreadExecutor,由一个 ThreadFactory来创建新的线程,默认情况下为 Executors.defaultThreadFactory(),ThreadFactory接口public interface ThreadFactory { Thread n

2012-11-21 13:43:20 2457

原创 线程工厂 ThreadFactory源码解读

工厂模式是我们学习编程时,接触到的第一个设计模式,也是最简单、最常用的一个设计模式。在JDK的源码中,大量使用工厂模式,ThreadFactory就是其中一种。在我们一般的使用中,创建一个线程,通常有两种方式:继承Thread类,覆盖run方法,实现我们需要的业务继承Runnable接口,实现run方法,实现我们需要的业务,并且调用new Thread(Runnable

2012-11-21 13:16:33 6867 1

原创 信号量 Semaphore的使用介绍

Semaphore当前在多线程环境下被扩放使用,操作系统的信号量是个很重要的概念,在进程控制方面都有应用。Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Sem

2012-11-21 11:40:50 1595

转载 JDK 7 中的 Fork/Join 模式

简介: 随着多核时代的来临,软件开发人员不得不开始关注并行编程领域。而 JDK 7 中将会加入的 Fork/Join 模式是处理并行编程的一个经典的方法。虽然不能解决所有的问题,但是在它的适用范围之内,能够轻松的利用多个 CPU 提供的计算资源来协作完成一个复杂的计算任务。通过利用 Fork/Join 模式,我们能够更加顺畅的过渡到多核的时代。本文将介绍使用 JDK 7 中 Fork/Join

2012-11-20 18:48:29 683

原创 sleep()和wait()的区别

1、sleep()方法是来自Thread类,而wait()方法是来自Object类2、sleep方法没有释放锁,使得其他线程可以使用同步控制块或方法。而wait方法释放了拥有的锁3、wait,notify和notifyAll只能在同步控制方法获知同步控制块里面使用,而sleep可以在任何地方使用注意sleep(long millis)方法是需要指明休眠时间的,并且该方法是静态方法,也就

2012-11-20 17:48:20 830

原创 ReentrantReadWriteLock类和ReentrantLock类的区别

java.util.concurrent.locks包定义了两个锁类,ReentrantLock和ReentrantReadWriteLock类。当有很多线程都从某个数据结构中读取数据而很少有线程对其进行修改时,后者就很有用了。在这种情况下,允许读取器线程共享访问是合适的。当然,写入器线程依然必须是互斥访问的下面是使用读/写锁的必要步骤:(1) 创建一个ReentrantReadWri

2012-11-19 22:27:58 9922 9

转载 中断线程

线程的thread.interrupt()方法是中断线程,将会设置该线程的中断状态位,即设置为true,中断的结果线程是死亡、还是等待新的任务或是继续运行至下一步,就取决于这个程序本身。线程会不时地检测这个中断标示位,以判断线程是否应该被中断(中断标示值是否为true)。它并不像stop方法那样会中断一个正在运行的线程。判断线程是否被中断判断某个线程是否已被发送过中断请求,请使用T

2012-11-18 19:45:53 891

原创 多线程-----重点内容记录解析

1、抢占式多任务和协作(非抢占)式多任务:使用抢占式调度的系统给每个可运行的线程一个时间片来处理任务。当这个时间片用完时,操作系统剥夺该线程对资源的占用,使其他线程有机会运行。在选择下一个线程时,操作系统会考虑到线程的优先级。所有现代的桌面和服务器操作系统都使用抢占式调度。但一些小型设备,例如手机,可能会采用协作式调度。在这样的设备中,一个线程只有在调用sleep或yield这样的方法时才

2012-11-18 18:41:24 1102

原创 volatile域的使用

volatile关键字为对一个实例的域的同步访问提供了一个免锁机制。如果你把域声明为volatile,那么编译器和虚拟机就知道该域可能会被另一个线程并发更新有时候,只是为读写实例的一两个域就使用同步,其带来的开销似乎太大了。这种情况下可以使用volatile关键字例如,假设一个对象有一个布尔标记,由一个线程设置它的值,而由另一个线程来查询它,那么有以下两个方法1、使用锁,如下

2012-11-18 15:31:29 864

转载 多线程-----经典解释监视器和对象锁

在JVM的规范中,有这么一些话:     “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”       “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”     “锁住了一个对象,就是获得对象相关联的监视器”     从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何? 解释1:  监视器好

2012-11-18 15:05:03 6828

原创 同步方法ReentrantLock和Synchronized

同步格言:如果你向一个变量写值,而这个变量接下来可能会被另一个线程所读取,或者你从一个变量读值,而它的值可能是前面由另一个线程写入的,此时你就必须使用同步从JDK5.0开始,有两种机制来保护代码块不受并行访问的干扰。旧版本的Java使用synchronized关键字来达到这个目的,而JDK5.0引进了ReentrantLock类。1、ReentrantLock显示锁基本用法:

2012-11-18 14:22:53 2921 1

原创 java中类加载路径和项目根路径获取的几种方式

package my;import java.io.File;import java.io.IOException;import java.net.URL;public class MyUrlDemo { public static void main(String[] args) { MyUrlDemo muDemo = new MyUrlDemo(); try {

2012-11-17 23:51:58 9000 1

转载 华为十年

昨天晚上在CCTV4的“今日关注”节目中,听军事专家张召忠说:中国在IT方面大概领先强邻俄罗斯十五年左右,让我很困惑,因为不知道为何会有这么大的优势,今天很巧在CSDN上面看到了下面这篇文章,也许正是因为中国有许许多多个“徐家骏”的缘故吧!! 华为十年徐家骏2007年5月28日(注:徐是华为数据中心的头,清华硕士,技术超级牛人,一级部门总监,华为副总裁,年收入过千万

2012-11-17 23:38:18 4547 3

原创 深度解析Java内存的原型

本文主要通过分析Java内存分配的栈、堆以以及常量池详细的讲解了其的工作原理。一、Java虚拟机内存原型寄存器:我们在程序中无法控制栈:存放基本类型的数据和对象的引用,但对象本身不存放在栈中,而是存放在堆中堆:存放用new产生的数据静态域:存放在对象中用static定义的静态成员常量池:存放常量非RAM存储:硬盘等永久存储空间。二、常量池(constant pool)

2012-11-17 23:16:07 891

原创 类文件结构

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/81831641、class文件是一组以8位字节为基础单位的二进制流2、class的结构不像xml等描述语言,由于它没有任何分隔符,故无论是顺序还是数量,都是被严格限定的,哪个字节代表什么含义,长度多少,先后顺序如何,都不允许改变3、各部分字节结构(只选取一小部

2012-11-14 15:51:15 1113

原创 Java源码编译过程

转载请注明出处:http://blog.csdn.net/kai_wei_zhang/article/details/8178174源代码(.java文件)--->分析(词法、语法分析)和填充符号表--->注解处理--->语义分析和字节码生成(.class文件)词法分析:将源代码转变成标记(Token)集合,标记是编译过程的最小元素。如 int a = b + 2; -

2012-11-13 13:31:32 2852

转载 C++程序的执行过程

要理解一个程序的执行过程,首先要理解什么是编译器。我们用C语言写的程序,计算机只能识别机器语言(二进制指令),计算机并不能理解。因此,必须 将C语言转换为机器语言。编译器就是用来实现这一功能的。编译器将源代码文件按照一定的对应规则映射程计算机能够识别的二进制指令。 关于源文件、目标文件和可执行文件源文件:保存源代码的文件(*.c, *.cpp)目标文件:编译器根据源

2012-11-12 22:12:29 630

原创 Java——IO流

1、java.io包下主要包括输入、输出两种IO流,每种输入、输出流又可分为字节流和字符流两大类。2、Java的IO流使用了一种装饰器设计模式3、Java的IO流分类:输入流和输出流:Java的输入流主要由InputStream和Reader作为基类、输出流则主要由OutputStream和Writer作为基类字节流和字符流、节点流和处理流4、字节流操作的最小数据单元是8位

2012-11-12 21:39:37 587

转载 二叉树的非递归遍历

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历

2012-11-06 20:17:12 649

原创 求最大公约数和最小公倍数

下面方法中,ff()求最大公约数,f()是求小公倍数 int ff(int x,int y){ return y == 0 ? x : ff(y,x % y); } int f(int x,int y){ return x / ff(x,y) * y; }

2012-11-01 20:04:50 626

转载 Java内存泄露分析

1 引言     Java的一个重要优点就是通过垃圾收集器GC (Garbage Collection)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java 不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC 或JVM的问题。其实,这种想法是不正确的,因为Java 也存在内存泄漏,但它的表现与C++不同。如果正在开发的Java 代码要全天24

2012-11-01 19:35:04 2265

原创 SQL语句的优化

1、使用EXISTS代替IN2、尽量不要使用通配符,如select * from tables语句,要用到几列就选择几列,如:select col1,col2 from table1;在可能的情况下尽量限制结果集行数如:select top 100 col1,col2,col3 from table23、在关系运算中,尽量要使用=,尽量不要使用4、WHERE字句中尽量不要使用NOT运算

2012-11-01 17:22:00 625

硬盘恢复软件及教程

如果一不小心把硬盘或U盘上重要的东西永久删除了,想恢复可以使用这软件 包括恢复软件和恢复操作教程

2012-08-31

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除