1. JVM类加载过程
加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的
2.类加载方式 : 导入class文件
2.1隐式加载
2.2显式加载
3. 验证:确保被加载的类的正确性
4. 准备:为类的静态变量分配内存,并将其赋默认值
定义静态变量时指定初始值。如 private static String x="123";
在静态代码块里为静态变量赋值。如 static{ x="123"; }
(5)解析 :
解析阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。符号引用就理解为一个标示,而在直接引用直接指向内存中的地址;
解析动作主要针对类或接口、字段、类方法、接口方法、方法类型、方法句柄和调用点限定符7类符号引用进行。
5. 初始化:对静态变量和静态代码块执行初始化工作。
什么时候会触发初始化?
1.遇到new,getstatic,putstatic,invokestatic这4条指令;
2.使用java.lang.reflect包的方法对类进行反射调用;
3.初始化一个类的时候,如果发现其父类没有进行过初始化,则先初始化其父类(注意!如果其父类是接口的话,则不要求初始化父类);
4.当虚拟机启动时,用户需要指定一个要执行的主类(包含main方法的那个类),虚拟机会先初始化这个主类;
以下情况不会触发类的初始化:
1.同类子类引用父类的静态字段,不会导致子类初始化。至于是否会触发子类的加载和验证,取决于虚拟机的具体实现;
2.通过数组定义来引用类,也不会触发类的初始化;例如:People[] ps = new People[100];
3.引用一个类的常量也不会触发类的初始化
6. 卸载阶段
执行了System.exit()方法。
程序正常执行结束。
程序在执行过程中遇到了异常或错误而异常终止。
由于操作系统出现错误而导致Java虚拟机进程终止。
Spring单例Bean与单例模式的区别在于他们关联的环境不一样,单例模式是指在一个jvm进程中仅有一个实例,而Spring单例是指一个Spring Bean容器(ApplicationContext)中仅有一个实例。与此相比,Spring的单例Bean是与其容器(ApplicationContext)密切相关的,所以在一个JVM进程中,如果有多个Spring容器,即使是单例bean,也一定会创建多个实例。
单例bean的优点:
1.spring通过反射创建bean消耗资源、并且在对多个bean进行分配的时候消耗资源
2.减少bean的垃圾回收
3.除了第一次创建以外后面都是从缓存中获取bean,速度很快
创建bean的过程:
实例化 ----> 属性填充 ---> 初始化--->AOP ---> 代理对象--->bean
Spring注解@component、@service、@Autowired等作用与区别
1、@Service用于标注业务层组件
2、@Controller用于标注控制层组件(如struts中的action)
3、@Repository用于标注数据访问组件,即DAO组件.
4、@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
5、@Autowired与@Resource的区别
@Autowired由Spring提供,只按照byType注入,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。如果想使用名称装配可以结合@Qualifier注解进行使用。
@Resource由J2EE提供,默认按照byName自动注入,Spring将@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型
<bean id="userServiceImpl" class="cn.com.bochy.service.impl.UserServiceImpl">
byName就是通过Bean的id或者name,byType就是按Bean的Class的类型
linux常用指令:
- chown (change owner) : 修改所属用户与组。
- chmod (change mode) : 修改用户的权限。
-
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
- df(英文全称:disk free):列出文件系统的整体磁盘使用量 df -h
- du(英文全称:disk used):检查磁盘空间使用量
- fdisk:用于磁盘分区
SPI,Service Provider Interface,一种服务发现机制