java
软件猫
华为初级码农
展开
-
Java垃圾回收机制
综合了若干人的blog~1. 垃圾回收的意义 在C++中,对象所占的内存在程序结束运行之前一直被占用,在明确释放之前不能分配给其它对象;而在Java中,当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后转载 2016-04-08 21:17:18 · 304 阅读 · 0 评论 -
深入浅出设计模式之策略模式、观察者模式
第一章 入门1.这里讲了一个简单的例子,鸭子的例子。鸭子都会叫,都会走,都会游泳(不变的部分)。但是有的鸭子会飞,有的鸭子的外观不一样等等(变得部分),如何设计呢?采取分离的策略,将不变的部分和可变的部分分离,因此引出我们第一个设计原则:找出应用中可能需要的变化之处,把它们独立出来,不要和哪些不需要变化的代码混在一起。2.如何设计呢?对于上面的鸭子的例子,我们知道我们要增强我们的代码弹性,原创 2017-03-22 17:01:48 · 6653 阅读 · 0 评论 -
深入浅出设计模式之装饰者模式、工厂模式
装饰着模式原创 2017-03-22 19:50:32 · 2730 阅读 · 0 评论 -
深入浅出设计模式之命令模式、适配器模式、外观模式
命令模式原创 2017-03-22 20:42:45 · 2318 阅读 · 0 评论 -
深入浅出设计模式之模板方法模式、迭代器模式、组合模式
模板方法模式原创 2017-03-22 21:31:30 · 795 阅读 · 0 评论 -
java设计模式(1)接口和抽象类
语义简单描述1.接口和抽象类的概念接口和抽象类是面向对象思想的两个重要概念。接口仅是方法定义和常量值定义的集合,方法没有函数体;抽象类能定义除了普通类的内容之外,还可以定义抽象方法。2.既然接口和抽象类定义的都是一些概念或者抽象,那么接口或者抽象类的作用是什么呢?是为了实现“思考-实现的过程”。思考就是构建接口和抽象类的过程,实现就是现实或者继承我们的接口和抽象类的过程。于是,接口原创 2017-03-22 21:50:08 · 531 阅读 · 0 评论 -
Java并发编程:线程池的使用(非常棒,通俗易懂)
Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任转载 2017-03-13 16:56:28 · 59842 阅读 · 7 评论 -
深入浅出设计模式之状态模式、代理模式
状态模式原创 2017-03-23 22:24:37 · 1311 阅读 · 0 评论 -
康拓排列--全排列的解码与编码
原文链接:http://www.2cto.com/kf/201311/260148.html一、康托展开:全排列到一个自然数的双射 X=an*(n-1)!+an-1*(n-2)!+...+ai*(i-1)!+...+a2*1!+a1*0! ai为整数,并且0<=ai<i(1<=i<=n),其中ai为小于上一个数字的个数。 适用范围:没有重复元素的全排列转载 2017-03-15 20:59:13 · 1552 阅读 · 0 评论 -
康拓排列的自我总结--以及全排列的递归非递归算法
写了几个关于全排列的东西,然后就接触到了康拓排列。之前对于全排列的非递归算法耿耿于怀,一只不能找到好的方式。现在好了,有了康拓,什么都解决了。递归求全排列我们先来看一个简单的例子,就是如何递归的求全排列。private static void recursionPermutation(String[] s, int k) { // TODO Auto-generated metho原创 2017-03-15 23:59:34 · 866 阅读 · 0 评论 -
Java基础小技巧回顾--浅析String ==操作
原文地址:http://blog.csdn.net/xieyuooo/article/details/6859160本文非常简单,不过有很多朋友经常问,网上很多例子也写个大概,很多人也只是知道和大概,就本文而来读起来非常的轻松,不过算是一些小技巧;但是我们的程序中相信用得最多的就是char数组和byte[]数组,而String就是由char[]数组组成的,一般情况下我们就可以认为Str转载 2017-04-11 12:51:33 · 536 阅读 · 0 评论 -
java虚拟机随手笔记(1)内存分配
java内存运行时数据区域及其含义1.程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 2.与程序计数器一样,Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。 虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时原创 2017-03-16 10:40:38 · 283 阅读 · 0 评论 -
java正则表达式对一些特殊字符匹配的理解
public static void match(String str){ //特殊字符在正则和字符串中都要转义,但是转义的方式不太相同 //正则表达式中,\\\\为一个\;而字符串String中,\\表示一个\ //正则表达式中,*,.,+,?,()等特殊字符需要两个斜杠加特殊字符表示,比如\\*表示一个*,而字符串中直接输入即可 //正则表达式中,\W,\d,D,\w等都需要双原创 2017-04-11 18:22:55 · 6941 阅读 · 0 评论 -
java虚拟机随手笔记(2)垃圾收集器与内存分配策略
JIT:JVM机试编译,just in time complicationTLAB:本地线程分配缓冲,Thread Local Allocation Buffer回收类型1.何时回收对象?即如何判断对象已死:有两种方式,但是java用的是第二种。即判断对象的可达性。java会将所有的对象连接到一个引用链上,一般是个树,从树的根节点GC roots开始搜索,如果能搜索到,说明没死,搜索不原创 2017-03-16 14:20:18 · 334 阅读 · 0 评论 -
java设计模式复习——23中设计模式
原文链接:http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html设计模式(Design Patterns) ——可复用面向对象软件的基础设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目转载 2017-03-22 14:42:03 · 823 阅读 · 0 评论 -
java并发编程应用易忘知识点(1)java中的锁
Lock接口Java se5之后,出现了Lock接口,提供了与Synchronized类似同步功能。与synchronized相比,他虽然少了隐式获取释放锁的便捷性,却拥有了锁获取与释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized不具备的同步特性。Lock的使用方式非常简单,首先实例化Lock对象Lock lock = new ReentrantLoc原创 2017-03-28 21:29:39 · 518 阅读 · 0 评论 -
java多线程之线程运行状态
java线程的状态一共有6种,如下所示NEW:初始状态,线程被构建,但是还没有调用start()方法RUNNABLE: 运行状态,java线程将操作系统中的就绪和运行两种状态笼统的称作运行态BLOCKED:阻塞状态,表示线程阻塞于锁。比如阻塞于lock(),阻塞于Synchronized。WAITING:等待状态,表示线程进入等待状态,需要等待其他线程做出一些特定工作(一般是调用m原创 2017-03-21 22:11:36 · 972 阅读 · 0 评论 -
java初始化顺序
属性、方法、构造方法和自由块都是类中的成员,在创建类的对象时,类中各成员的执行顺序:1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。4.执行父类的构造方法。5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。6.执行子类的构转载 2016-04-08 21:19:49 · 323 阅读 · 0 评论 -
java虚拟机随手笔记(3)虚拟机性能监控与故障处理工具
JDK命令行工具原创 2017-03-17 19:18:52 · 339 阅读 · 0 评论 -
Java虚拟机详解----常用JVM配置参数
原文地址:http://www.cnblogs.com/smyhvae/p/4736162.html【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/文章来源:http://www.cnblogs.com/smyhvae/p/4736162.html联系方式:smyhvae@163.com转载 2017-03-17 20:09:10 · 322 阅读 · 0 评论 -
java虚拟机随手笔记(4)内存调优与案例分析
1.在高性能硬件上部署程序,目前主要有两种方式:通过64位JDK来使用大内存。使用若干个32位虚拟机建立逻辑集群来利用硬件资源。对于第一种方式,要控制好Full GC的频率,不然可能会导致服务长时间不响应,譬如十几个小时或者一天进行一次Full GC,可以在深夜进行。对于第二种方式,具体做法是在一台物理机器上启动多个应用服务器进程,每个服务器进程分配不同端口,然后在前端搭建一个负载均衡原创 2017-03-17 23:14:36 · 351 阅读 · 0 评论 -
永久代(PermGen)和元空间的区别(Metaspace)
转载自:http://www.cnblogs.com/paddix/p/5309550.html从jdk开始,就开始了永久代的转移工作,将譬如符号引用(Symbols)转移到了native heap;字面量(interned strings)转移到了java heap;类的静态变量(class statics)转移到了java heap。但是永久在还存在于JDK7中,直到JDK8,永久代才转载 2017-03-17 23:38:27 · 19479 阅读 · 4 评论 -
java虚拟机随手笔记(5)java类文件结构
1 class类文件的结构原创 2017-03-18 16:52:53 · 487 阅读 · 0 评论 -
java虚拟机随手笔记(6)虚拟机类加载机制
上一章我们了解了class文件的基本结构,下面我们要做的就是来了解虚拟机是如何将class文件加载的了-----虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。java是运行时动态加载和动态链接的,虽然可能会牺牲一些性能开销,但是赋予了java无比强大的灵活性。类加载的时机原创 2017-03-18 22:03:48 · 371 阅读 · 0 评论 -
java反射机制&动态代理
综合各个博客主的帖子而来,感谢以下博主!java反射机制详解:http://www.cnblogs.com/lzq198754/p/5780331.htmljava中的反射机制:http://blog.csdn.net/liujiahan629629/article/details/18013523java中的动态代理详解:http://www.cnblogs.com/xiaolu原创 2017-03-19 10:09:39 · 514 阅读 · 0 评论 -
CGLib动态代理
JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了。CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。JDK动态代理与CGLib动态代理均是实现Spring AOP的基础。 简单的实现举例:这是一个需要被代理的类,也就是父类,通过字转载 2017-03-19 10:29:22 · 372 阅读 · 0 评论 -
Java并发编程知识点(1)基本的并发语句
实现多线程的两种方式--Runnable和Threadimport java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class MyRunnable implements Runnable{ protected int countDown=10; private stat原创 2017-03-05 20:19:11 · 616 阅读 · 0 评论 -
java的一些其他情况(1):System.getProperty()
Java.versionJava 运行时环境版本java.vendorJava 运行时环境供应商java.vendor.urlJava 供应商的 URLjava.homeJava 安装目录java.vm.specification.vers原创 2017-03-20 10:09:10 · 340 阅读 · 0 评论 -
java反射机制---java的动态加载详解
111转载 2017-03-20 00:43:05 · 606 阅读 · 0 评论 -
java虚拟机随手笔记(7)虚拟机字节码执行引
111原创 2017-03-21 15:11:22 · 406 阅读 · 0 评论 -
String的赋值操作,intern,==等的关系
很多人可能都会对String的==操作感到非常迷茫,这个的话, 首先我们来看一下这个规律。jdk1.61)如果对String变量赋值字面量,比如String a = “abcdef”,那么这个时候会首先到方法区的常量池中间找abcdef是否存在,如果存在,则返回这个对象。如果不存在,则首先在常量池中创建这个对象,再返回这个对象。2)如果是new,则会在堆中创建这个对象。3)==比较原创 2017-04-25 19:37:01 · 717 阅读 · 0 评论