「java缓存注解」自定义缓存注解
本篇文章给大家谈谈java缓存注解,以及自定义缓存注解对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java注解@immutable什么意思
- 2、java开发 从哪些地方可以看出来spring使用的单例模式?
- 3、java hibernate注解@cache指的是设定缓存指的是一级还是二级
- 4、学习Java软件工程师要具备什么条件?
java注解@immutable什么意思
从字面意思来理解就是不会发生变化的类,那么是什么不会发生变化呢,其实就是类的状态,也就是不变类的实例一旦被创建,其状态就不会发生变化,举个例子:如果人是一个class,那么我们中的每一个都是人这个类的具体的instance,如果人这个类只有一个状态就是生身父母,那么它就是一个不变类,因为每一个人在出生的那一刹那,生身父母就已经被设置了值,而且终生都不会发生变化。
不变类有什么好处呢?
1) 不变类是线程安全的,由于不变类的状态在创建以后不再发生变化,所以它可以在线程之间共享,而不需要同步。
2) 不变类的instance可以被reuse
创建类的实例需要耗费CPU的时间,当这个实例不再被引用时,将会被垃圾回收掉,这时候,又需要耗费CPU的时间。对于不变类而言,一个好处就是可以将常用的实例进行缓存,从而减少了对象的创建。举个例子,对于布尔型,最常用的便是true and false。JDK中的Boolean类就是一个不变类,并且对这两个实例进行了缓冲。
public final class Boolean implements java.io.Serializable{
/**
* The codeBoolean/code object corresponding to the primitive
* value codetrue/code.
*/
public static final Boolean TRUE = new Boolean(true);
/**
* The codeBoolean/code object corresponding to the primitive
* value codefalse/code.
*/
public static final Boolean FALSE = new Boolean(false);
// 这个方法不会创建新的对象,而是重用已经创建好的instance
public static Boolean valueOf(boolean b) {
return (b ? TRUE : FALSE);
}
}
3) 不变类的某些方法可以缓存计算的结果
hashCode这个方法来自于Object这个类,这个方法用来返回对象的hashCode,主要用于将对象放置到hashtable中时,来确定这个对象的存储位置。对于一个不变类的实例,它的hashCode也是不变的,所以就可以缓存这个计算的结果,来提高性能,避免不必要的运算,JDK中的String类就是一个例子。
public final class String{
/** Cache the hash code for the string */
private int hash; // Default to 0
public int hashCode() {
int h = hash;
if (h == 0) {
// compute the value
hash = h; // cache the value
}
return h;
}
}
在JDK中, String, the primitive wrapper classes, and BigInteger and BigDecimal都是不变类。
如果一个类是不变类,这个类是不是就不能有改变状态的方法呢?
答案当然是否定的,String是一个不变类,仍然有replace,replaceAll这样的方法,而String仍然是一个不变类,那是因为在这些改变状态的方法中,每次都是新创建一个String对象。
如果大家理解了不变类,那也就不难理解为什么在做String的concatenate时,应当用StringBuffer而不是用+的操作符。
如何正确使用String呢?
1) 不要用new去创建String对象。
如果使用new去创建String,那么每次都会创建一个新对象。
public static void main(String[] args) {
String A1 = "A";
String A2 = "A"; // It won't create a new object
checkInstance(A1, A2); // Result: They are same instances
String B1 = new String("A"); // create a new object
String B2 = new String("A"); // creat a new object
checkInstance(B1, B2); // Result: They are different instances
}
private static void checkInstance(String a1, String a2) {
if (a1 == a2) {
System.out.println("They are same instances");
} else {
System.out.println("They are different instances");
}
}
2) 应当用StringBuffer来做连接操作
因为String是一个不变类,那么在做连接操作时,就会创建临时对象来保存中间的运算结果,而StringBuffer是一个mutable class,这样就不需要创建临时的对象来保存结果,从而提高了性能。
我抄来的自己也学到东西了,以前这个都没接触过的说。
java开发 从哪些地方可以看出来spring使用的单例模式?
使用注解或xml配置的bean默认都是单例,需要原型就再加注解:@Scope("prototype") 或者在xml配置的bean加上属性scope="prototype"
多说几句我也复习一下
spring源码中 就是通过判断scope是否是prototype 来决定是否缓存或者说管理bean
所以说spring只管理单例的bean,不是单例就每次new(不是new 是反射)给你
sigletonObject 就是spring单例ben的集合。我猜非单例bean的话是不是不能做AOP。。。也有可能能做new的时候再折腾一遍应该也行。
AbstractBeanFactory-doGetBean方法中看这个注解
java hibernate注解@cache指的是设定缓存指的是一级还是二级
CPU缓存CPU缓存大小是重要的指标之一,但也影响对CPU速度的高速缓冲存储器的结构和尺寸是在CPU高速缓冲存储器内非常大,非常高的工作频率,通常用频率和处理器的操作效率远比系统存储器和硬盘驱动器大得多。当实际工作中,CPU经常需要重复相同的数据块被读出,并高速缓存大小增加时,可以大大提高CPU内部读取数据的命中率,而不存储器或硬盘上,然后寻找一种方法来提高系统性能。然而,由于CPU芯片面积和成本的因素要考虑,缓存是非常小的。
的L1高速缓存(高速缓存)是CPU的高速缓冲存储器的第一层被分成数据高速缓存和指令高速缓存。的内置于CPU的性能L1高速缓存大的影响,但由一个静态RAM的高速缓冲存储器构成的更复杂的结构,在CPU的芯片面积的情况下,也不能过大,L1级缓存容量是容量和结构没有可能做太多。 L1缓存一般服务器CPU容量通常为32 256KB。
L2缓存(二级缓存)是二级缓存的CPU,分内部和外部芯片。内部芯片二级缓存主频以相同的速度和运行,而外部二级缓存是只有一半的时钟速度。 L2高速缓存的大小会影响CPU的性能,原则是越大越好,现在家庭用CPU 512KB容量最大,但随着服务器和工作站CPU二级缓存高达256-1MB,有的可达2MB或者3MB。
L3缓存(三级缓存),分为两种,早期的是外置的,现在是内置的。虽然这是它的实际作用,L3缓存的应用可以进一步降低内存延迟,同时提升性能,当大量数据以计算的处理器。减少存储器等待时间和提高的大量数据的计算能力的游戏是非常有帮助的。增加L3高速缓存在服务器场中的性能方面仍然有显著改善。让我们有更大的L3缓存配置将更加有效地利用物理内存,所以它比较慢的磁盘I / O子系统可以处理更多的数据请求。处理器具有更大的L3缓存,以提供更有效的文件系统缓存行为及较短消息和处理器队列长度。
学习Java软件工程师要具备什么条件?
零基础学习java可按照这份大纲来进行学习
第一阶段:Java专业基础课程
阶段目标:
1. 熟练掌握Java的开发环境与编程核心知识
2. 熟练运用Java面向对象知识进行程序开发
3. 对Java的核心对象和组件有深入理解
4. 熟练应用JavaAPI相关知识
5. 熟练应用JAVA多线程技术
6. 能综合运用所学知识完成一个项目
知识点:
1、基本数据类型,运算符,数组,掌握基本数据类型转换,运算符,流程控制。
2、数组,排序算法,Java常用API,类和对象,了解类与对象,熟悉常用API。
3、面向对象特性,集合框架,熟悉面向对象三大特性,熟练使用集合框架。
4、IO流,多线程。
5、网络协议,线程运用。
第二阶段:JavaWEB核心课程
阶段目标:
1. 熟练掌握数据库和MySQL核心技术
2. 深入理解JDBC与DAO数据库操作
3. 熟练运用JSP及Servlet技术完成网站后台开发
4. 深入理解缓存,连接池,注解,反射,泛型等知识
5. 能够运用所学知识完成自定义框架
知识点:
1、数据库知识,范式,MySQL配置,命令,建库建表,数据的增删改查,约束,视图,存储过程,函数,触发器,事务,游标,建模工具。
2、深入理解数据库管理系统通用知识及MySQL数据库的使用与管理。为Java后台开发打下坚实基础。Web页面元素,布局,CSS样式,盒模型,JavaScript,jQuery。
3、掌握前端开发技术,掌握jQuery。
4、Servlet,EL表达式,会话跟踪技术,过滤器,FreeMarker。
5、掌握Servlet相关技术,利用Servlet,JSP相关应用技术和DAO完成B/S架构下的应用开发。
6、泛型,反射,注解。
7、掌握JAVA高级应用,利用泛型,注解,枚举完成自己的CRUD框架开发为后续框架学习做铺垫。
8、单点登录,支付功能,项目整合,分页封装熟练运用JSP及Servlet核心知识完成项目实战。
第三阶段:JavaEE框架课程
阶段目标:
1. 熟练运用Linux操作系统常见命令及完成环境部署和Nginx服务器的配置
2. 熟练运用JavaEE三大核心框架:Spring,SpringMVC,MyBatis
3. 熟练运用Maven,并使用SpringBoot进行快速框架搭建
4. 深入理解框架的实现原理,Java底层技术,企业级应用等
5. 使用Shiro,Ztree和Spring,SpringMVC,Mybaits完成企业项目
知识点:
1、Linux安装配置,文件目录操作,VI命令,管理,用户与权限,环境部署,Struts2概述,hiberante概述。
2、Linux作为一个主流的服务器操作系统,是每一个开发工程师必须掌握的重点技术,并且能够熟练运用。
3、SSH的整合,MyBatis,SpringMVC,Maven的使用。
4、了解AOP原理,了解中央控制器原理,掌握MyBatis框架,掌握SSM框架的整合。
5、Shiro,Ztree,项目文档,项目规范,需求分析,原型图设计,数据库设计,工程构建,需求评审,配置管理,BUG修复,项目管理等。
6、独立自主完成一个中小型的企业级综合项目的设计和整体架构的原型和建模。独立自主完成一个大型的企业级综合项目,并具备商业价值
关于java缓存注解和自定义缓存注解的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-12-28,除非注明,否则均为
原创文章,转载请注明出处。