自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lizhao007

一杯Java 一杯咖啡

  • 博客(25)
  • 收藏
  • 关注

原创 方法区

方法调用 方法调用不等于方法执行,其唯一的任务就是确定调用哪一个具体方法,暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用时最普遍,最频繁的操作。解析所有方法调用中的目标方法在Class文件里面都是一个常量池中的符号引用。在类加载的解析阶段,一部分符号引用会被转化为直接引用,这种解析成立的前提是:方法在程序真正运行之前就有一个可确定的调用版本,且这个方法的调用版本在运行时是不可改

2015-11-30 13:39:57 618

转载 类加载器和双亲委派机制

预定义类加载器和双亲委派机制JVM预定义的三种类型类加载器: 启动(Bootstrap)类加载器:是用本地代码实现的类装入器,它负责将 <Java_Runtime_Home>/lib下面的类库加载到内存中(比如rt.jar)。由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用,所以不允许直接通过引用进行操作。 标准扩展(Extension)类加载器:是由

2015-11-27 17:58:55 633

原创 虚拟机类加载机制

虚拟机类加载机制类的生命周期  类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括了:加(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(using)、和卸载(Unloading)七个阶段。其中验证、准备和解析三个部分统称为连接(Linking),这七个阶段的发生顺序如下

2015-11-27 17:51:24 516

原创 垃圾收集器之路

垃圾收集器Serial收集器  对于图上可以看见Serial收集器是新生代的收集器,他也是单线程收集器,收集时会暂停所有工作线程(我们将这件事情称之为Stop The World,下称STW),使用复制收集算法,虚拟机运行在Client模式时的默认新生代收集器。ParNew收集器  ParNew 收集器就是Serial的多线程版本,除了使用多条收集线程外,其余行为包括算法、STW、对象分配规则、回收

2015-11-23 17:21:01 417

原创 新生代和老年代的区别

新生代和老年代的区分**所谓的新生代和老年代是针对于分代收集算法来定义的,新生代又分为Eden和Survivor两个区。加上老年代就这三个区。数据会首先分配到Eden区 当中(当然也有特殊情况,如果是大对象那么会直接放入到老年代(大对象是指需要大量连续内存空间的java对象)。),当Eden没有足够空间的时候就会 触发jvm发起一次Minor GC。如果对象经过一次Minor GC还存活,并且又能被

2015-11-23 17:19:47 5941

原创 垃圾回收算法之路

垃圾收集算法  在上一节我说了我们应该回收哪些内存,什么时候回收,接下来我会谈怎样回收?  对于这样回收在think in java中也有相同的介绍,但是非常的少,译者也翻译得不太详细,之前读了think in java再看一遍 深入理解java虚拟机,加深了很多理解。标记清除算法  标记-清除算法是最基础的算法,和他名字一样分为两个部分,“标记”和“清除”:首先标记所有需要回收的对象,在标记完成后

2015-11-23 17:19:16 446

原创 GC之路

本文一样是参考周志明的《深入理解java虚拟机》和java虚拟机规范,加上一些自己的意见,希望大家批评指正。面对GC(Garbage Collection)的三个问题  1.哪些内存需要回收?  2.什么时候回收?  3.如何回收?  了解这三个问题,可以当我们需要排查各种内存溢出,内存泄露问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们可以自己针对其调控。哪些内存需要回收  首先我们根据内存

2015-11-23 17:18:14 465

原创 java内存区域

Java内存区域  我写这个文章只是对学习的一些记录加上自己的理解,所以很简陋,详细可参考周志明的《深入理解Java虚拟机》或者《Java虚拟机规范(Java SE 7版)》的中译本。运行时的数据区域深入理解Java虚拟机中的图画得不是特别详细,所以我在网上找了稍微详细一点的!针对这个图我会详细说明程序技术器,Java虚拟机栈,本地方法栈,Java堆,方法区,运行时常量池,还有一个直接内存(图上没有

2015-11-22 17:48:23 531

原创 Tomact中权限设置-Realm配置

什么是Realm   Realm(安全域)其实就是一个存储用户名和密码的“数据库”再加上一个枚举列表。“数据库”中的用户名和密码是用来验证 Web 应用(或 Web 应用集合)用户合法性的,而每一合法用户所对应的角色存储在枚举列表中。可以把这些角色看成是类似 UNIX 系统中的 group(分组),因为只有能够拥有特定角色的用户才能访问特定的 Web 应用资源(而不是通过对用户名列表进行枚举适配)

2015-11-21 15:29:27 448

原创 虚拟机字节码执行引擎

虚拟机字节码执行引擎   执行引擎是Java虚拟机最核心的组成部分之一。在不同的虚拟机中看,执行引擎在执行JAVA代码的时候可以选择解释执行(通过解释器执行)和编译执行(通过即使编译器产生本地代码执行)两种选择。但是从外观上,所有java虚拟机执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果。运行时栈帧结构  用于支持虚拟机进行方法调用和方法执行的数据结

2015-11-30 12:58:49 318

原创 Session的策略

今天遇到了Spring和Hibernate4.2.x系列个问题   save is not valid without active transaction 这句话一看就是和事务有关,我开始一直找Service层和dao层里面代码有问题吗,结果白找了 最后在这里<prop key="hibernate.current_session_context_class">org.springframe

2015-11-26 20:39:03 621

原创 Spring事务传播行为和隔离机制

spring的事务隔离级别ISOLATION_DEFAULT:使用数据库默认的隔离级别。 ISOLATION_READ_UNCOMMITTED:允许读取改变了的还未提交的数据,可能导致脏读、不可重复读和幻读。 ISOLATION_READ COMMITTED:允许并发事务提交之后读取,可以避免脏读,可能导致重复读和幻读。 ISOLATION_REPEATABLE_READ:对相同字段的多次读取

2015-11-26 19:41:37 416

转载 openSession和getCurrentSession

在比较openSession和getCurrentSession这两个方法之前,我们先认识一下这两个方法。在进行配置信息管理时,我们一般进行一下简单步骤:Configuration cfg = new Configuration(); // 获得配置信息对象 SessionFactory sf = cfg.configure().buildSessionFactory(); //解析并建立Sess

2015-11-26 17:49:34 346

原创 类文件结构

首先要提到平台无关性和语言无关性,平台无关性,这里大家也都知道了。对于语言无关性这里要简单的提一下,很多人认为java虚拟机只能运行Java的代码其实是不正确的,虚拟机并不会关心Class的来源是什么语言,只要符合Class文件应有的结构就可以在java虚拟机中运行。比如Clojure,Groovy,JRuby,Jython,Scala等。在以后很有可能语言无关性会超过平台无关性。Class类文件结

2015-11-26 12:59:26 379

转载 JPA注解主键生成策略-UUID

@GeneratedValue:主键的产生策略,通过strategy属性指定。  主键产生策略通过GenerationType来指定。GenerationType是一个枚举,它定义了主键产生策略的类型。  1、AUTO 自动选择一个最适合底层数据库的主键生成策略。如MySQL会自动对应auto increment。这个是默认选项,即如果只写@GeneratedValue,等价于@GeneratedV

2015-11-25 16:16:56 25298

原创 Rest安全(一)

REST安全(一)  ## 1.身份认证 ##  HTTP认证规范定义了两种HTTP身份认证方式:HTTP Basic(基本认证)和Http Digest(摘要认证)。HTTP认证是一种无状态的认证方式,服务器容器不会为这样的登录匹配Session,身份信息随浏览器关闭而消失。Java平台包含了HTTP的两种身份认证,此外还定义了HTTP+HTML form-based authentication

2015-11-21 14:54:04 1021

原创 阻塞

终结任务在阻塞时终结     sleep()可以让执行状态变为被阻塞状态,而有时你必须终止被阻塞的任务。             线程状态:一个线程可以处于四种状态之一:1:新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。2:就绪(Runnable)

2015-11-21 14:41:56 478

原创 线程中的的资源(二)

在有关java中的讨论中,一个常不正确地知识是“原子操作不需要进行同步控制”。原子操作是不能被线程调度机制中断的操作;一旦操作开始,那么它一定可以在可能发生的“上下文切换”之前执行完毕。  原子性可以应用于除long和double之外的所有基本类型之上的“简单操作”。对于读取和写入这些基本类型变量这样的操作,可以保证它们会被当作不可分的操作来操作内存。但是JVM可以将64位(long和double变

2015-11-21 14:41:11 403

原创 线程中资源(一)

对于单线程来说,因为只有一个实体,所以永远都不需要担心“两个实体同时使用同一个资源会发生什么”这样的问题。   有了并发就可以同时做多件事情了,但是两个或多个线程彼此互相干涉的问题也就出现了。这就是我们将要讨论的事   1.不正确地访问资源   如果几个线程同时读一个资源,此时不会更改资源,这时也不会需要考虑这个资源竞争这个问题。但是一旦涉及到写操作,这便会涉及到竞争资源这个问题,这时

2015-11-19 16:31:02 538

转载 Thread.UncaughtExceptionHandler(为每一个Thread对象加一个异常处理器)

Thread的run方法是不抛出任何检查型异常(checked exception)的,但是它自身却可能因为一个异常而被终止,导致这个线程的终结。最麻烦的是,在线程中抛出的异常即使使用try…catch也无法截获,因此可能导致一些问题出现,比如异常的时候无法回收一些系统资源,或者没有关闭当前的连接等等。 JDK5.0之前,不能为单独的Thread设置UncaughtExceptionHandler,

2015-11-19 14:57:22 443

原创 基本的线程机制(总结)

在think in java中,作者提到: Thread类自身不执行任何操作,它只是驱动赋予它的任务,但是线程研究中总是不变地使用“线程执行那项或这项”这样的语言。因此,你得到的印象就是“线程就是任务”,当我第一次碰到java线程时,这种印象非常强烈,尤其是Runnable接口的名字非常糟糕,应该叫TASK。在我看来:我们需要搞清楚任务和线程之间的关系,不要被混淆,有时描述的时候可能更多的是要

2015-11-19 14:44:16 446

转载 Callable,Runnable比较及用法

编写多线程程序是为了实现多任务的并发执行,从而能够更好地与用户交互。一般有三种方法,Thread,Runnable,Callable.Runnable和Callable的区别是,(1)Callable规定的方法是call(),Runnable规定的方法是run().(2)Callable的任务执行后可返回值,而Runnable的任务是不能返回值得(3)call方法可以抛出异常,ru

2015-11-19 14:28:30 350

原创 基本的线程机制(三)

4.休眠        对于休眠我们这里会详细讨论sleep()方法和yield()方法,wait()方法暂时不讨论.        Thread.sleep():public static native void sleep(long millis) throws InterruptedException;是Thread类中的一个静态方法,该方法会让当前正在

2015-11-19 14:20:03 404

原创 基本的线程机制(二)

2.Thread类 将Runnable对象转变为工作任务的传统方式是把他提交给一个Thread构造器,如下public class BasicThreads { public static void main(String[] args) { Thread thread=new Thread(new Liftoff()); thread.start(

2015-11-19 13:23:28 465

原创 基本的线程机制(一)

java编程思想中说道:并发编程使我们可以将程序划分为多个分离的,独立运行的任务。通过使用多线程机制,这些独立任务(也被称为子任务)中的每一个都将由执行线程来驱动。一个线程就是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的任务,但是你的程序使得每个任务都好像有其自己的cpu一样。其底层机制是切分cpu时间,通常程序员不需要考虑他。 针对以上提出,可以分为任务,执行线程,

2015-11-19 12:36:06 391

空空如也

空空如也

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

TA关注的人

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