`
文章列表
适用于线程间的简单同步:在不使用线程池(ThreadPoolExecutor)的情况下,而且线程不需要返回值(即线程继承自Runnable而非Callable接口)thread.join()应该是让当前线程block住,等被依赖的thread执行完之后,再继续执行

ClassLoader

一、什么是ClassLoader?   大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能 ...
1) 永久区溢出 Exception in thread "main" java.lang.OutOfMemoryError: PermGen space   PermGen space = Permanent Generation space 永久保存区域主要存放放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域(包括常量池: 静态变量),它和 ...
相同:都是根据ID查找记录区别:get()先在一级缓存中查找,再从二级缓存中找,都没有的话查询数据库   对于load(), 具体要看lazy为true或者false了 1. lazy=true     先在一级缓存中查找对应ID, 如存在则返回; 如不存在则建立实体的代理对象(该对象为该实体类的子类,由CGLib动态生成并被class loader加载)     等到具体使用该对象的时候,在查询二级缓存,如不存在进而查询数据库     如果DB中存在相应记录则返回,如果没有则返回ObjectNotFoundException 2. lazy=false      和get() ...
一级缓存:事务级缓存 或 Session级缓存    其实质是由Hibernate自动维护的一个map,根据id来缓存实体对象(不存放普通属性的查询)    ***不能跨sesseion/transaction访问    无论是list(), load()还是iterate,只要读出的是对象, 都会自动填充一级缓存    但是list()本身不去使用缓存, iterate是先去DB中select id出来,在一个一个load(),如果缓存中有就直接返回,没有的话再去数据库中查询    二级缓存    SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存,可以跨session访 ...
Global site tag (gtag.js) - Google Analytics