虚拟机类加载机制Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最 终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略让Java语言进行提前编译会面临额外的困难,也会让类加载时稍微增加一些性能开销, 但是却为Java应用提供了极高的扩展性和灵活性,Java天生可以动态扩展的语言特性就是依赖运行期动态加...
深入理解JVM2-1-虚拟机执行子系统-类文件结构
类无关性的基石实现语言无关性的基础仍然是虚拟机和字节码存储格式。Java虚拟机不与包括Java语言在内的任何 程序语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集、符号表以及若干其他辅助信息。 作为一个通用的、与机器无关的执行平 台,任何其他语言的实现者都可以将Java虚拟机作为他们语言的运行基础,以Class文件作为他们产品 的交付媒介。例如,使用Java编译器可以把Java代码编译为存储字节码的Class文件,使用JRuby等...
MyBatis动态SQL和resultMap
动态SQLmybatis动态SQL可以根据Java变量的不同动态拼接SQL,其本质就是按照我们每次向接口中传入的变量和我们指定的规则来帮助我们拼接SQL语句,简化了SQL语句的编写。 其主要有以下几组标签,其语义与在Java中相同: if choose (when, otherwise) trim (where, set) foreach ifif即条件判断,一般多用于where后的判断。 例如: 1234567<select id="findActiveBlogWit...
Java多线程编程核心技术-5-Timer的使用
定时器Timer的使用Timer类Timer类的主要作用是设置计划任务,即在指定时间开始执行某一个任务。 其构造方法如下 1234567public Timer() { this("Timer-" + serialNumber());}public Timer(boolean isDaemon) { this("Timer-" + serialNumber(), isDaemon);} 即可以自定...
Java多线程编程核心技术-4-Lock对象的使用
基本用法Java多线程可以使用synchronized关键字来实现线程间同步,不过JDK 1.5新增加的ReentrantLock类也能达到同样的效果,并且在扩展功能上更加强大,如具有嗅探锁定、多路分支通知等功能。 ReentrantLock类可以直接new一个ReentranLock。然后再后面的方法中使用该对象的方法来进行同步处理。 例如: 1private Lock lock = new ReentrantLock(); lock()方法lock方法用于锁定当前的Reentra...
Java多线程编程核心技术-3-线程间通信
wait/notify机制不使用wait/notify机制实现线程间通信 之前说过volatile可以实现不同线程的变量的可见性。所以不同线程间通信可以使用volatile变量来进行信息交换。 示例: 自定义List类: 123456789101112package mylist;import java.util.ArrayList;import java.util.List;public class MyList { volatile private ...
MySQL关键字问题
因为之前排查一个sql错误,看了半天才发现是关键字占用,但是作为属性又没有提示,所以这里记录以下MySQL的所有关键字。 本来一般的排查方案是将sql复制到UI工具中查看,但是有些UI工具提示并不全(可能是版本问题),比如groups关键字,SQLyog就不会提示。导致一直没有排查出来。 MySQL的关键分为占用或不占用。如果是占用的关键词,那么就不能直接使用。必须添加引号,注意这个引号是 ` ,即英文状态下的波浪号。其他的引号是无法做到消除占用的,包括单引号和双引号。 如果是...
反射获取私有数据问题
这里记录通过反射访问私有变量并赋值的方法。第一种是最普遍的,可以访问没有公开的私有变量。而后两种似乎有点多余,直接调用方法也行,权当记录一下后两种操作方法吧。 preUser对象 1234567891011121314151617181920212223242526272829303132333435363738package reflect;public class User { private int id; private String name; private Stri...
Java多线程编程核心技术-2-对象及变量的并发访问
在上一篇文章Java多线程编程核心技术-1-多线程技术基础中,提到了共享变量造成的非线程安全问题。 本文就是为了解决非线程安全的相关问题。 synchronized同步方法关键字synchronized可用来保障原子性、可见性和有序性。 但是在学习synchronized之前,我们必须明确一点: synchronized锁住的是对象。即使是synchronized方法。 线程安全问题和解决方案就像前一文中提到的,只有多线程共享的变量才会面临线程安全问题。 即定义在线程类中并且被多个实例化为...
Java多线程编程核心技术-1-多线程技术基础
使用多线程Java的JDK实现多线程编程主要有两种方式:一种是继承Thread类,另一种是实现Runnable接口。 继承Thread类直接继承Thread类,然后重写其run方法就可以得到一个新的线程类。 12345678public class MyThread extends Thread{ @override public void run(){ super.run(); System.out.println(&q...