java SE
文章平均质量分 76
tom和cat
知识的搬运工
展开
-
线程池线程复用源码解析
先说说使用线程池的好处,比如可以控制线程的数量,节省反复创建线程和销毁线程的开销等,在开发中的使用,一般来说任务量肯定是大于线程数量的,而为了防止出现OOM,都是建议设置相对应业务的合适线程数量。那是在线程池中线程就只有那些,肯定是要做到线程的重复利用,才能执行超过线程的任务量的,那么线程池是怎么做到"线程复用"的呢?从源码开始逐步分析,从execute()方法开始//原子变量private final AtomicInteger ctl = new AtomicInteger(ctlOf(RU转载 2021-03-26 16:54:59 · 204 阅读 · 0 评论 -
CMS调优参数
-XX:CMSInitiatingOccupancyFraction和-XX:+UseCMSInitiatingOccupancyOnly由于CMS收集器不是独占式的回收器,在CMS回收过程中,应用程序仍然在不停地工作。在应用程序工作过程中,又会不断产生垃圾。这些新垃圾在当前CMS回收过程中是无法清除的。同时,因为应用程序没有中断,所以在CMS回收过程中,还应该确保应用程序由足够的内存可用。因此,CMS回收器不会等待堆内存饱和时才进行垃圾回收,而是当堆内存使用率达到某一阈值时便开始进行回收,以确保应用程原创 2021-02-19 17:14:16 · 1263 阅读 · 0 评论 -
jdk版本和垃圾收集器对应关系
1. 使用jcmd假设java进程id为1000# Linuxjcmd 1000 PerfCounter.print |grep gc.collector.*name# Windowsjcmd 1000 PerfCounter.print |findstr gc.collector.*name1 2 3 4以串行收集器(-XX:+UseSerialGC )为例,返回信息如下:sun.gc.collector.0.name="Copy"sun.gc.collector.1原创 2020-11-28 10:05:21 · 1232 阅读 · 1 评论 -
JVM面试题——持续更新中
java内存区域划分在java8,将方法区替代为元空间(由于方法区主要存储类的相关信息,所以对于动态生成类的情况比较容易出现永久代的内存溢出。最典型的场景就是,在 jsp 页面比较多的情况,容易出现永久代内存溢出)发生fullgc的情况有哪些 发生oom的情况有哪些?哪些区域可能会发生oom new对象时会在哪个区域分配 方法区在什么情况下会发生oom,碰到过oom吗?怎么排查的?...原创 2020-11-13 11:53:15 · 86 阅读 · 0 评论 -
JAVA线上故障排查全
线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jsta转载 2020-10-22 14:58:52 · 130 阅读 · 1 评论 -
JVM 参数(JDK8)
JVM参数https://blog.csdn.net/liyongbing1122/article/details/88716400原创 2020-06-08 14:17:46 · 886 阅读 · 0 评论 -
JProfiler使用
https://blog.csdn.net/liyantianmin/article/details/86534544转载 2020-06-08 13:44:54 · 178 阅读 · 0 评论 -
JVM工具文档
第一章无第二章jdk8工具集https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.htmlTroubleshootinghttps://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/jpshttps://docs.oracle.com/ja...转载 2020-03-17 12:00:11 · 218 阅读 · 0 评论 -
linux 线程查看 (proc命令)与Jvm栈线程ID(jstack命令)
一、proc查看进程和线程该方法是个人最为推荐,也最喜欢的一种方法。进程文件下,有几种方式可以获取目前进程开启的进程数。查看status文件:# cat /proc/5877/statusName: mysqldState: S (sleeping)Tgid: 5877Pid: 5877PPid: 1……………………省略Threads: 107……………………省略...原创 2019-11-18 20:58:12 · 2866 阅读 · 0 评论 -
ThreadLocal使用方法
ThreadLocal:用于实现线程内部的数据共享叫线程共享(对于同一个线程内部数据一致),即相同的一段代码 多个线程来执行 ,每个线程使用的数据只与当前线程有关。 实现原理:ThreadLocal相当于一个map 当前线程 存储当前的变量的时候 map.put(确定线程的唯一值(比如变量名称),变量),然后获取的时候直接拿过来就行 一般用法:定义一个全局变量ThreadLoa...原创 2018-07-30 10:29:35 · 254 阅读 · 0 评论 -
Java泛型方法和类型通配符的区别
泛型方法VS类型通配符(两者可以混用): 1)你会发现所有能用类型通配符(?)解决的问题都能用泛型方法解决,并且泛型方法可以解决的更好:最典型的一个例子就是: a. 类型通配符:void func(List<? extends A> list); b. 完全可以用泛型方法完美解决:<T extends A>...原创 2018-10-20 18:36:55 · 8180 阅读 · 3 评论 -
WebSocket
一.简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回...原创 2018-10-26 17:15:55 · 409 阅读 · 0 评论 -
ThreadLocal内存泄漏
前言ThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。但是如果滥用ThreadLocal,就可能会导致内存泄漏。下面,我们将围绕三个方面来分析ThreadLocal内存泄漏的问题ThreadLocal实现原理 ThreadLocal为什么会内存泄漏 ThreadLocal最佳实践...转载 2018-10-30 16:35:59 · 213 阅读 · 0 评论 -
内部类
内部类详解:https://www.cnblogs.com/chenssy/p/3388487.html https://www.cnblogs.com/dolphin0520/p/3811445.html匿名内部类详解:https://www.cnblogs.com/chenssy/p/3390871.html...转载 2018-11-20 16:29:22 · 114 阅读 · 0 评论 -
java反射
转载自https://blog.csdn.net/sinat_38259539/article/details/71799078(个人觉得讲反射讲的很好的一篇文章)反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的Class,Class类用于表示.class文件(字节码)) 一、反射的概述JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;...转载 2018-11-21 14:08:16 · 117 阅读 · 0 评论 -
动态代理
1、为什么要动态代理动态代理的作用其实就是在不修改原代码的前提下,对已有的方法进行增强。关键点:不修改原来已有的代码(满足设计模式的要求) 对已有方法进行增强比如,我们想在每次调用某个类的save方法时,都在日志文件里写下日志信息,这时候,在不影响原来的代码的封装的前提下,我们可以手动的去创建一个该类的代理类,来代替该类帮我们实现一些附加的方法。2、实现方式JAVA中,...原创 2018-11-19 15:37:49 · 600 阅读 · 0 评论 -
数据结构与算法(java版)
目录:https://blog.csdn.net/wangshuminjava/article/details/80040673原创:http://blog.csdn.net/column/details/datastructureinjava.html转载 2018-12-07 14:33:27 · 3946 阅读 · 0 评论 -
Java内部接口
内部接口也被称为嵌套接口,这意味着在另一个接口内声明一个接口。 例如,Entry接口声明在Map接口中。public interface Map { interface Entry{ int getKey(); } void clear();}为什么要用内部接口?使用内部接口有几个令人信服的理由:它是逻辑分组仅在一个地方使用的接口的一...转载 2018-12-25 10:23:28 · 2233 阅读 · 1 评论 -
java面试
string为何是不可变的https://www.cnblogs.com/wuchanming/p/9201103.htmlstatic与单例模式https://blog.csdn.net/TCJGGSDDU/article/details/53457029手写单例模式https://blog.csdn.net/cuiran/article/details/52299756...原创 2019-01-23 09:56:18 · 1008 阅读 · 0 评论 -
java基础——static关键字有哪些作用
static关键字有哪些作用1.修饰成员变量可以通过类名.变量名直接引用,而不需要new出一个类来,static修饰的成员被所有的对象共享,static是不允许用来修饰局部变量。成员变量和静态变量的区别: 1.生命周期的不同: 成员变量随着对象的创建而存在随着对象的回收而释放。 静态变量随着类的加载而存在随着类的消失而消失。 2.调用方式不同: 成员变量...原创 2019-03-18 17:00:46 · 502 阅读 · 0 评论 -
java基础——final关键字有哪些作用
final关键字有哪些作用用来修饰数据,包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被改变。对于成员变量来讲,我们必须在声明时或者构造方法中对它赋值; 用来修饰方法参数,表示在变量的生存期中它的值不能被改变; 修饰方法,表示该方法无法被重写; 修饰类,表示该类无法被继承。package basic;/** * @Classname finalTest * @Des...原创 2019-03-18 18:00:06 · 155 阅读 · 0 评论 -
泛型补充——泛型的extends与super
转载自:https://www.cnblogs.com/cherryljr/p/6880657.html1. <T extends Comparable<? super T>>代表什么意思大家可以明白的是这里应用到了Java的泛型,那么首先向大家说明一下这里extends的作用 extends后面跟的类型,如<任意字符 extends 类/接口>表...转载 2019-04-04 10:53:27 · 2194 阅读 · 0 评论 -
JVM垃圾回收器
在这篇教程中我们将学习几种现有的垃圾回收器。在Java中,垃圾回收是一个自动的进程可以替代程序员进行内存的分配与回收这些复杂的工作。这篇是垃圾回 收教程系列的第三篇,在前面的第2部分我们看到了在Java中垃圾回收是如何工作的,那是篇有意思的文章,我推荐你去看一下。第一部分介绍了Java的垃 圾回收,主要有JVM体系结构,堆内存模型和一些Java术语。Java有四种类型的垃圾回收器:串行垃圾...转载 2019-04-26 15:18:40 · 210 阅读 · 0 评论 -
sleep和wait的区别
sleep和wait的区别有: 1,这两个方法来自不同的类分别是Thread和Object 2,最主要是sleep方法没有释放锁,而wait方法释放了锁,使得敏感词线程可以使用同步控制块或者方法。 3,wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在 任何地方使用 synchronized(x){ x.n...转载 2018-03-15 19:58:01 · 20553 阅读 · 2 评论 -
Java Stream入门
1 知识框架 先上一张图来说明一下Java8中”流”的引进、意义和优势。2 传统Java集合的不足2.1 传统Java集合 集合是Java中用途十分广泛的一个集合,正是因为它对于数据的处理的优势,几乎任何一个Java应用程序都会设计对Java集合的制造和处理。 然而,一个传统的Java集合仅仅是对Java集合内部的数据进行简单的添加、删除等操作,而且处理的数据类型有限。 ...转载 2018-07-24 18:11:24 · 142 阅读 · 0 评论 -
多线程中的ThreadLocal 详解
要了解ThreadLocal,首先搞清楚ThreadLocal 是什么?是用来解决什么问题的?ThreadLocal 是线程的局部变量, 是每一个线程所单独持有的,其他线程不能对其进行访问, 通常是类中的 private static 字段,是对该字段初始值的一个拷贝,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联我们知道有时候一个对象的变量会被多个线程所访问,这时就会...转载 2018-07-11 17:07:49 · 165 阅读 · 0 评论 -
session管理
Session 管理是Web应用开发中的一个重要的内容,其实每天我们浏览网站,网站的后台都是通过这门技术来记录我们的浏览状态,最典型的就是登录,每次你在网站上登录一次,当跳转到该网站的任何其他页面都不会再次要求你登录,这就是使用了Session管理技术。那么问题来了我们为什么需要这门技术?这是因为Http协议是无状态的,什么是无状态?简单来说就是Web服务器不能区分请求是否来自一个人,也就是说每个...转载 2017-12-08 13:36:16 · 515 阅读 · 0 评论 -
Java 序列化Serializable
1、什么是序列化和反序列化Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。2、为什么需要序列化 最重要的两个原因是:1、将对象的状态保存在存储媒体中以便可以在以后重新创建出完全相同的副本;2、按值将对象从一个应用程序域发送至另一个应用程序域。实现serializable接口的作用是就是可以把对象存...转载 2018-04-09 14:57:29 · 102 阅读 · 0 评论 -
spring MVC配置实例解析
角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对...转载 2018-03-23 16:56:07 · 128 阅读 · 0 评论 -
JVM内存模型图
转载 2018-03-15 21:01:41 · 401 阅读 · 0 评论 -
java位移运算
java 位移运算,先出【运算结果】,不懂的可以运行程序: 6的二进制是: 1106进行左移两位运算后结果是:11000,也就是24,可以看出来,正数的左移N位就是在右边末尾加N个0 -33的二进制是: 11111111111111111111111111011111-33进行左移两位运算后结果是:11111111111111111111111101111100,也就是-1原创 2017-12-21 10:16:50 · 398 阅读 · 0 评论 -
栈和队列使用
(1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min、push、pop、的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致1. 栈的创建:我们接下来通过链表的形式来创建栈,方便扩充。代码实现: 1 public class Stack { 2 3原创 2017-12-12 13:39:31 · 580 阅读 · 0 评论 -
Java中的重写和重载区别
重载就是多态的具体体现,可以改变参数和返回值。而重写必须相同。重写与重载之间的区别区别点重载方法重写方法参数列表必须修改一定不能修改返回类型可以修改一定不能修改异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常访问可以修改一定不能做更严格的限制(可以降低限制)原创 2017-11-21 16:13:42 · 243 阅读 · 0 评论 -
java基础面试题
示例 1 : 面向对象的特征有哪些方面? 答:封装,继承,多态,抽象(1) 封装:将属性私有化private封装在一个类里,只能通过方法去访问(2) 继承,子类继承于父类extands(3) 多态:分操作符的多态和类的多态,父类引用指向子类对象,关键是继承和重写实现多态(4) 抽象:一个类抽象出许多属性,便于理解示例 2 : S...原创 2017-11-28 20:51:58 · 203 阅读 · 0 评论 -
Java泛型详解
原文出处: ZiWenXie引言泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。泛型基础泛型类我们首先定义一个简单的Box类:12345public class Box { private String object; public void set(String o...转载 2018-03-28 18:34:40 · 105 阅读 · 0 评论 -
Intellij IDEA 快捷键整理
【常规】Ctrl+Shift + Enter,语句完成“!”,否定完成,输入表达式时按 “!”键Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可以关闭文件Ctrl+[ OR ],可以跑到大括号的开头与结尾Ctrl+F12,可以显示当前文件的结构Ctrl+F7,可以查询当前元素在当前文件中的引用,然后按 F3 可以选择Ctrl+N,可以快速打开类Ctrl+S...转载 2018-06-29 14:11:59 · 169 阅读 · 0 评论 -
java中构造代码块、static代码块和局部代码块
class StaticCode{ int age; // static 代码块 static{ System.out.print("static "); } //构造代码块 { System.out.print("55 "); } // 构造函数 StaticCode(int age)...原创 2018-05-24 11:02:11 · 108 阅读 · 0 评论 -
通过命令行指定 Java 程序运行时使用的字符集
1. 运行: 参数: -Dfile.encoding# 注意:"-Dfile.encoding=utf-8" 中是没有空格的,且最好遵循 java [-options] -jar jarfile [args...] 的顺序 java -Dfile.encoding=utf-8 -jar Test.jar 2. 编译: 参数: encoding javac -enco...原创 2018-06-04 16:09:01 · 7317 阅读 · 1 评论 -
java并发编程教程,线程池的使用
并发教程:https://www.yiibai.com/java_concurrency/concurrency_overview.htmlhttps://www.cnblogs.com/wihainan/p/4765862.htmlhttps://www.cnblogs.com/jmcui/p/8017473.html我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但...原创 2018-06-03 23:01:08 · 755 阅读 · 1 评论 -
我见过最通俗易懂的快速排序过程讲解,转自《坐在马桶上看算法:快速排序》
https://blog.csdn.net/vayne_xiao/article/details/53508973转载 2018-05-07 19:28:04 · 251 阅读 · 0 评论