- 浏览: 12843 次
- 性别:
- 来自: 南京
最新评论
文章列表
1.1 线程的创建和运行
在Java中,我们有2个方式创建线程:
1、通过直接继承thread类,然后覆盖run()方法。
2、构建一个实现Runnable接口的类, 然后创建一个thread类对象并传递Runnable对象作为构造参数
在下面的示例中,我们将使用两种方法来制作一个简单的程序,它能创建和运行10个线程。每一个线程能计算和输出1-10以内的乘法表。
实现Runnable接口:
public class Calculator implements Runnable{
private int number;
pu ...
JVM性能监控与故障处理工具
- 博客分类:
- jvm
给一个系统定位问题的时候,知识、经验是关键基础,数据是依据。工具是运用知识处理数据的手段。这里说的数据包括:运行日志、异常堆栈、GC日志、线程快照文件(threaddump/javacore文件)、堆转储快照(heapdump/hprof文件)等。
为此sun公司提供了一系列的工具来支撑这些功能,这些工具主要分为两大类:命令行工具和可视化工具。
1、JDK命令行工具
1.1、jps
Jvm process status tool,显示指定系统内所有的hotspot虚拟机进程。
以列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本 ...
垃圾收集与内存分配策略
- 博客分类:
- jvm
1、如何判断对象已死
1.1、引用计数法
给对象添加一个引用计数器,每当有一个地方引用它时,计数器就加1;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。这种方法实现简单,判定效率高,但是很难解决对象之间互相循环引用的问题。
1.2、可达性分析法
通过一系列称为“GC Roots”的对象作为起点,从这些节点来时向下搜索,搜索所走过的路径称为引用链,当一个对象到GCRoots没有任何引用链相连时,则证明此对象是不可用的。
可以作为GCRoots的对象:
虚拟机栈中引用的对象;
方法区中静态属性引用的对象;
...
Java中的四种引用
- 博客分类:
- java
1、强引用(Strong Reference)
指在程序中普遍存在,类似Object obj = new Object()这类的引用,只要引用还存在,垃圾收集永远不会回收掉被引用的对象。
2、软引用(Soft Reference) 用来描述一些还有用但是并非必须 ...
java运行时数据区域
- 博客分类:
- jvm
JAVA运行时数据区域
1.程序计数器
程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条执行字节码指令。
每条线程都有一个独立的程序计数器。这类内存也被称为“线程私有内存”。
如果执行的是java方法,这个计数器记录的是正在执行的虚拟机字节码指令地址。如果是native方法,计数器为空。此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。
2.j ...
try语句在返回前,将其他所有的操作执行完,保留好要返回的值,而后转入执行finally中的语句,而后分为以下三种情况:
情况一:如果finally中有return语句,则会将try中的return语句”覆盖“掉,直接执行finally中的return语句,得到返回值,这样便无法得到try之前保留好的返回值。
情况二:如果finally中没有return语句,也没有改变要返回值,则执行完finally中的语句后,会接着执行try中的return语句,返回之前保留的值。
情况三:如果finally中没有return语句,但是改变了要返回的值,这里有点类似与引用传递和 ...
1. 请说明的文件属性
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
答:root用户拥有读写权限,root组与其他用户拥有读权限
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:test1用户拥有读写、运行权限,testgroup组拥有读、运行权限,其他用户没有权限
2. 列举改变文件属性命令
答:chgrp 用户 文件或者文件夹(chgrp root tmp)
chown 用户:组 文件或者文件夹(chown root:root tmp,cho ...
在/etc/yum.repos.d目录下新建rhel-beta.repo文件
文件内容:
[rhel-beta]
name=Red Hat Enterprise Linux $releasever Beta - $basearch
baseurl=file:///home/soft/temp
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-beta
* baseurl为yum源,即linux系统的mount路径
...
密码学扫盲:加密、认证、公钥、私钥
密码学的概念容易被搞混淆,对大多数非专业人员而言,的确也情有可原。因为公钥、私钥、 加密、认证这些,都是较为复杂的问题,其概念不太容易理解,理解不透就容易产生各种似是而非的概念,为了让大家对于密码学有进一步的了解,这里笔者就详细 解说一下公钥和私钥的具体作用和使用方法。
加密和认证
首先我们需要区分加密和认证这两个基本概念。
加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的 安全性。身份认证是用来判断某个身份的真实性,确认身份后, ...
脏读:一个事物正在访问数据,并且对数据进行了修改,但是还没有提交到数据库。这个时候,另一个事务读取了这部分没有提交的数据
不可重复读:是指在一个事物内多次读取同一数据。在这个事务还没有结束时,另一个事务对该数据进行了修改。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不 可重复读。
不可重复读的重点是修改 :
同样的条件,你读取过的数据,再次读取出来发现值不一样了。
幻读:是指当事务不是独立执行时发生的一种现象。例如第一个事务对一个表中的数据进行了修改, ...
泛型(generic):是指参数化类型的能力。可以定义泛型类和泛型方法,随后编译器会用具体的类型来替换它。
使用泛型的主要优点是,能够在编译时而不是在运行时检测出错误。比如:
public interface Comparable { public interface Comparable<T> {
public int compareTo(Object o); public int compareTo(T o);
} ...
序列化:把对象转换为字节序列的过程
反序列化:把字节序列恢复为对象的过程
什么情况下需要序列化:
1、当你想把的内存中的对象状态保存到一个文件中或者数据库中时候
2、当你想用套接字在网络上传送对象的时候
3、当你想通过RMI传输对象的时候
JDK类库中的序列化API
java.io.ObjectOutputStream代表对象输出流,它的writeObject(Object obj)方法可对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中。
java.io.ObjectInputStream代表对象输入流,它的readObject ...
覆盖hashCode方法
- 博客分类:
- java
覆盖hashCode方法规约:
1、在应用程序运行期间,只要对象的equals方法的比较操作所用到的信息没有被修改,那么对这同一个对象调用多次,hashCode方法都必须始终如一的返回同一个整数。
2、如果两个对象根据equals方法比较 ...
1.1 equals方法
覆盖equals方法必须遵守的约定:
1、自反性
x.equals(x)必须返回true
2、对称性
x.equals(y)的结果与y.equals(x)必须一致
3、传递性
x.equals(y)为true且y.equals(z)为true,则x.equals(z)为true
4、一致性
多次调用equals方法,结果必须一致
5、对于任何非null的引用x,x.equals(null)必须返回false
综合以上五个约定,得出了实现高质量equals方法的诀窍:
1、使用==操作符检查是否为这个对象的引用
2、使用insta ...
1.1 考虑用静态工厂方法代替构造器
示例:
public static Boolean valueOf()boolean b {
return b ? Boolean.TRUE : Boolean.FALSE;
}
静态工厂方法的优势:
1、相对于构造器,静态工厂方法有名称。
例如:构造器BigInteger(int,int,Random)返回的BigInteger可能为素数,如果用名为BigInteger.probablePrime的静态工厂方法来表示,显然更为清楚。(1.4的发行版本增加了这个方法)
2.静态工厂方法不必在每次调用它们的时候都创建一个新对象
...