标签 'Java'

JAVA自定义注解(Target,Retention,Documented,Inherit)

    Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。     注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。 1、元注解     元注解是指注解的注解。包括  @Retention @Target @Document @Inherited四种。 1.1、@Retention     定义注解的保留策略     @Retention(RetentionPolicy.SOURCE)     // 注解仅存在于源码中,在class字节码文件中不包含     @Retention(RetentionPolicy.CLASS)        // 默认的保留策略,注解会在cla...

阅读全文

java常用集合类

在Java中有一套设计优良的接口和类组成了Java集合框架,使程序员操作成批的数据或对象元素极为方便。所有的Java集合都在java.util包中。 1、List接口及其实现类 List接口继承于Collection接口。 List接口及其实现类是容量可变的列表,可按索引访问集合中的元素。 特点: 集合中的元素有序、可重复; 实现类: ArrayList是以Arayy方式实现的List,允许快速随机存取,相对于LinkedList不适合进行插入和移除元素操作; LinkedList提供最佳顺序存取,适合插入和移除元素。 2、Set接口及其实现类 Set接口同样继承于Collection接口。 特点: 集合中的元素无序、不包含重复的元素。 实现类; HashSet 能够快速定位一个元素,要注意...

阅读全文

java面试题

问题:switch(exp)语句能作用的数据类型 参考答案: 问题:说出ArrayList,Vector, LinkedList的存储性能和特性 参考答案:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 问题:Collection 和 Collections的区别 参考答案:Collection是...

阅读全文

java注解详解

一、什么是注解 定义:注解(Annotation),也叫元数据(metadata),所谓元数据就是数据的数据。也就是说,元数据是描述数据的。就象数据表中的字段一样,每个字段描述了这个字段下的数据的含义。一种代码级别的说明。注解是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 二、为什么学习注解 为了能读懂别人的代码,特别是框架相关的代码; 让编程更加简单,代码更加清晰; 注解可以通过代码里标识的元数据生成文档;可以对代码进行分析;可以让编译器实现基本的编译检查。 三、注解有哪几种类型 java自带注解 @Override:注解表示子类要重写父类的对应方法。如果方法利用此注释类型进...

阅读全文

Java异步调用中的Future

Future是什么? 最近写了一些关于netty的相关代码,发现类似netty 的这种异步框架大量的使用一个Future的类。利用这个Futuer类可以实现,代码的异步调用,程序调用耗时的网络或者IO相关的方法的时候,首先获得一个Future的代理类,同时线程并不会被阻塞。继续执行之后的逻辑,直到真正要使用远程调用返回的结果的时候,才需要调用Futuer的get()方法。这样可以提高代码的执行效率。 于是就花了一点时间研究Futuer是如何实现的。调用方式如何知道,结果什么时候返回的呢?如果使用一个线程去轮询flag 标记?那么就很难及达到及时获取新状态,又降低性能开销。所以我们需要了解java的等待通知机制。利用这个机制来构建一个节能环保的Future。等待通知机制一个线程修改了一个对象的...

阅读全文

Java如何定位占用CPU比较高的问题?

编写Java项目时,经常会遇到两种问题。 第一种:Java进程占用CPU比较高 第二种:Java进程堆内存溢出 今天主要跟大家聊聊第一种问题如何排查。 一、确定消耗CPU的Java进程 从上图可以看到Java进程 27459 消耗的CPU比较高。 二、查找 27459 Java进程消耗CPU线程ID 方式一: top -p [pid] 或 top -H -p [pid] 执行命令后按shift + h (显示进程各线程运行情况) 1)、top -p 27459 2)、shift + h 如下图: 方式二: ps -mp [pid] -o THREAD,tid,time ps -mp 27459 -o THREAD,tid,time 方式三: pidstat -p [pid] -t 1 pid...

阅读全文

Java如何定位堆内存溢出问题?

编写Java项目时,经常会遇到两种问题。 第一种:Java进程占用CPU比较高 第二种:Java进程堆内存溢出 上一篇主要介绍了第一种问题的排查手段,今天主要跟大家聊聊第二种问题如何排查。 一、查看Java进程堆内存使用情况 jstat -gcutil [pid] 2000 随着进程运行时间的推移内存会上下浮动。如果内存上升后执行FGC,内存没有被回收,则需要查看是否有内存泄露风险。 二、排查 获取内存信息 jmap -dump:format=b,file=[文件输出路径] [pid] ex: jmap -dump:format=b,file=/opt/app/27459.dump 27459 备注: 1、执行jmap dump 前可以手动触发一次fgc(jmap –histo:live [...

阅读全文