- 博客(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关注的人