java
文章平均质量分 96
it_monkey_ali
待人真诚,做事有上进心,头脑灵活,接受能力强。处事 自信、认真、有主见,不怕辛苦。 我憧憬做一个事业成功的人、能带快乐给身边人的人。 觉得很有意思,也是驱使我有强烈求知欲的一句话—— “玉不打磨雕刻,不会成为精美的器物;人若是不学习,就不懂得做人的道理,也就成不了大器。”
展开
-
JVM内存模型,以及JVM性能调优
转载批注:最近因与别人讨论问题时,问到JVM内存模型,但是苦于只知道JVM的大概内容,不知道详细,也罢,近期会逐渐有充足的自己的时间,好好整理学习学习。以下内容为转载别人的资料,个人认为写的很好,就全文拷贝了。===================华丽的分割线======================一、JVM内存模型及垃圾收集算法1.根据Java虚拟机规范,JVM将内存划分为:New(年轻代) Old(年老代) 永久代(Perm) 其中New和Old属于堆内存,堆内存会从...转载 2020-09-13 22:49:52 · 439 阅读 · 0 评论 -
CurrentHashMap在JDK1.8的改进
一、ConcurrentHashMap在jdk1.7中的设计jdk1.7中采用Segment+HashEntry的方式进行实现,结构如下:二、ConcurrentHashMap在jdk1.8中的设计1.8中放弃了Segment臃肿的设计,取而代之的是采用Node+CAS+Synchronized+红黑树来保证并发安全进行实现,结构如下:...原创 2019-03-06 15:39:38 · 2555 阅读 · 0 评论 -
高级JAVA必会系列一:常用线程池和调度类
一、常用线程池1.newCachedThreadPool (1)缓存型池子,先查看池中有没有以前建立的线程,如果有,就复用,如果没有,就建立一个新的线程加入池中; (2)缓存型池子,通常用于执行一些生存周期很短的异步型任务;因此一些面向连接的daemon型server中用得不多; (3)能复用的线程,缺省超时时间是60s,超过这个IDLE时长...原创 2018-05-30 15:52:55 · 342 阅读 · 0 评论 -
高级JAVA必会系列二:多线程经常使用的3个关键字:synchronized、ReentrantLock、volatile
一.synchronized(1)用法:1.修饰实例方法:package com.retail.sync;/** * @author Tom */public class AccountingSync implements Runnable { /** * 共享资源(临界资源) */ static int i = 0; /**...原创 2018-05-30 16:00:33 · 296 阅读 · 0 评论 -
高级JAVA必会系列四
本文大纲 1.并发编程三要素原子性,即一个不可再被分割的颗粒。在Java中原子性指的是一个或多个操作要么全部执行成功要么全部执行失败。 有序性,程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序) 可见性,当多个线程访问同一个变量时,如果其中一个线程对其作了修改,其他线程能立即获取到最新的值。2. 线程的五大状态创建状态,当用 new 操作符创建一个线程...原创 2018-10-13 09:30:26 · 425 阅读 · 0 评论 -
高级JAVA必会系列三:并发编程
FutureTaskIntroduction FutureTask这个组件是J.U.C里面的,但不是AQS的子类,但是这个类对线程处理的结果很值得我们学习和在项目中使用。 在Java中一般通过继承Thread类或者实现Runnable接口这两种方式来创建多线程,但是这两种方式都有个缺陷,就是不能在执行完成后获取执行的结果,在Java 1.5之后提供了Callable和Future接口...原创 2018-10-08 11:54:23 · 204 阅读 · 0 评论 -
关于JVM内存模型的理解
一、概念1、JVM运行时数据区jvm运行时数据区 整个JVM占用的内存可分为两个大区,分别是线程共享区和线程私有区,线程共享区和JVM同生共死,所有线程均可访问此区域;而线程私有区顾名思义每个线程各自占有,与各自线程同生共死。这两个大区内部根据JVM规范定义又分为以下几个区:方法区(Method Area) 方法区主要是放一下类似类定义、常量、编译后...原创 2018-10-19 10:41:05 · 198 阅读 · 0 评论 -
JDK1.8 HashMap源码分析
1、底层结构JDK1.8之前的结构在JDK1.7之前,HashMap采用的是数组+链表的结构,其结构图如下: 数组的每一个元素都是一个单链表的头节点,链表是用来解决冲突的,如果不同的key映射到了数组的同一位置处,就将其放入单链表中。JDK1.8的结构JDK1.8之前的HashMap都采用上图的结构,都是基于一个数组和多个单链表,hash值冲突的时候,就将对应节点以链...原创 2019-02-27 15:35:37 · 219 阅读 · 0 评论 -
AQS原理浅析
这是一道面试题:简述AQS原理AQS核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制AQS是用CLH队列锁实现的,即将暂时获取不到锁的线程加入到队列中。CLH(Craig,Landin,and Hagersten)队列是一个虚拟的双向队列(虚...原创 2019-02-19 14:53:23 · 462 阅读 · 0 评论 -
【面试题】Netty相关
1.BIO、NIO和AIO的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。 AIO:一个有效请求一个线程,客户端的I/O请求都是由OS...转载 2018-05-16 17:39:35 · 194 阅读 · 0 评论 -
Netty 实现HTTP文件服务器
Netty 实现HTTP文件服务器一,需求文件服务器使用HTTP协议对外提供服务。用户通过浏览器访问文件服务器,首先对URL进行检查,若失败返回403错误;若通过校验,以链接的方式打开当前目录,每个目录或文件都以超链接的形式展现,可递归访问,并下载文件。 二,关键实现代码①文件服务器启动类需要添加的通道处理器如下:@Override protected void i...转载 2018-05-16 17:18:27 · 473 阅读 · 0 评论 -
javaSE复习之-------------------动态代理
代理模式一般涉及到的角色有:–抽象角色:声明真实对象和代理对象的共同接口–代理角色:代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装–真实角色:代理角色所代表的真实对象,是我们最终要引用的对象在某些情况下,一个客户不想或者不能直接引用另一个...原创 2018-04-29 16:54:39 · 88 阅读 · 0 评论 -
常见java面试题
JAVA基础1.多个线程同时读写,读线程的数量远远⼤于写线程,你认为应该如何解决 并发的问题?你会选择加什么样的锁?(ReentrantReadWriteLock)读写锁最适用于对数据结构的读操作次数多于写操作的场合,因为,读模式锁定时可以共享,而写模式锁定时只能某个线程独占资源(解释为读模式可以共享 所以不用创建线程 多个线程共享个资源, 二写模式由单个线程独占,所以要写更多的内容...原创 2018-04-24 11:11:50 · 3264 阅读 · 1 评论 -
java类的加载机制
java类的加载机制 1、什么是类的加载类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。类加载器并不需要等到某个类被“...转载 2018-04-20 14:43:01 · 103 阅读 · 0 评论 -
java NIO
NIO即新的输入输出,这个库是在JDK1.4中才引入的。它在标准java代码中提供了高速的面向块的IO操作。12一、基本概念描述1.1 I/O简介I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统。在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过stream对象一次移动一个字节。流IO负责把对象转换为字节,然后再转换为对象。关于J...原创 2018-04-26 13:25:34 · 101 阅读 · 0 评论 -
Netty 对webSocket的支持
WebSocket是一种规范,是Html5规范的一部分,websocket解决什么问题呢?解决http协议的一些不足。我们知道,http协议是一种无状态的,基于请求响应模式的协议。网页聊天的程序(基于http协议的),浏览器客户端发送一个数据,服务器接收到这个浏览器数据之后,如何将数据推送给其他的浏览器客户端呢?这就涉及到服务器的推技术。早年为了实现这种服务器也可以像浏览器客户端推送消息的长连接需...原创 2018-05-18 13:35:52 · 778 阅读 · 0 评论 -
java NIO网络IO
1、BIO编程 服务端提供IP和监听端口,客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手连接,如果连接成功建立,双方就可以通过套接字进行通信。 传统的同步阻塞模型开发中,ServerSocket负责绑定IP地址,启动监听端口;Socket负责发起连接操作。连接成功后,双方通过输入和输出流进行同步阻塞式通信。 简单的描述一下BIO的服务端通信模型:采用BIO通信模...原创 2018-04-27 18:26:13 · 94 阅读 · 0 评论 -
Netty入门
Java中的NIO是一种解决阻塞式IO问题的基本技术,但是NIO的编写对java程序员是有比较高的要求的。那么Netty就是一种简化操作的一个成熟的网络IO编程框架。这里简单介绍一个程序,代码是《netty in action》里面的,不过那个里面的实例有点问题,反正我没有跑成功,修改后成功。直接上代码:1.服务端:package com.gerry.netty.server;impo...原创 2018-04-27 20:40:34 · 117 阅读 · 0 评论 -
Netty4 学习笔记之三-粘包和拆包
名词解释粘包: 会将消息粘粘起来发送。类似吃米饭,一口吃多个饭粒,而不是一粒一粒的吃。拆包: 会将消息拆开,分为多次接受。类似喝饮料,一口一口的喝,而不是一口气喝完。简单的来说:多次发送较少内容,会发生粘包现象。单次发送内容过多,会发生拆包现象。我们使用简单的Netty的服务端和客户端demo用来测试粘包和拆包。将 Hello Netty 发送一百次,就会发送粘包现象;将《春江花月夜》和《行路难》...原创 2018-04-27 21:47:51 · 350 阅读 · 0 评论 -
Netty学习笔记系列之五:自定义通讯协议
实现的原理是通过Encoder把java对象转换成ByteBuf流进行传输,通过Decoder把ByteBuf转换成java对象进行处理,处理逻辑如下图所示:传输的java bean为Person:[java] view plain copypackage com.guowl.testobjcoder; import java.io.Serializable; // 必须实现S...原创 2018-04-28 12:39:54 · 139 阅读 · 0 评论 -
Netty学习笔记系列之六:多种通讯协议支持
通讯协议,指的是把Netty通讯管道中的二进制流转换为对象、把对象转换成二进制流的过程。转换过程追根究底还是ChannelInboundHandler、ChannelOutboundHandler的实现类在进行处理。ChannelInboundHandler负责把二进制流转换为对象,ChannelOutboundHandler负责把对象转换为二进制流。接下来要构建一个Server,同时支持Pers...转载 2018-04-28 15:03:28 · 545 阅读 · 0 评论 -
java多线程学习之------------------Executor线程池框架
为什么引入Executor线程池框架new Thread()的缺点每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致过多占用系统资源导致系统瘫痪。 不利于扩展,比如如定时执行、定期执行、线程中断采用线程池的优点重用存在的线程,减少对象创建、消亡的开销,性能佳 可有效控制最大并发线程数,提高系统资源的使用率,同...原创 2018-04-29 16:20:04 · 95 阅读 · 0 评论