自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 TCP协议

Internet协议(IP协议),提供Internet节点间无连接的不可靠端对端分组服务。 TCP是个传输协议,在不可靠的无连接协议上建立可靠的端对端信道。TCP提供两种非常重要的网路功能:1.流控制 2.拥塞控制 流控制:是为了控制太快的发送者压迫太慢的接收者 拥塞控制:是为了提供平等资源共享 TCP的三次握手 第一次 客户机发起TCP连接请求SYN(客户机初始序列名)() 第二次 ...

2019-04-28 12:26:12 177

原创 内存泄漏

内存泄漏通常分为一下四类 1)常发性内存泄漏 发生内存泄漏的代码会被多次执行,每行一次执行都会导致一块内存泄漏 2)偶发性内存泄漏 发生内存泄漏的代码只在某些特定的环境或操作中才会发生,常发性和偶发性是相对的,在特定的环境下,偶发性内存泄漏也许就变成了常发性 3)一次性内存泄漏 发生内存泄漏的代码只被执行一次。 4)隐式内存泄漏 程序在运行过程中不停的分配内存,但直到结束时才释放内...

2019-04-27 14:22:57 316

原创 对象访问

对象的访问基础 Object obj = new Object(); Object obj是保存在java栈的本地变量中,而new Object()这部分则会反映道java堆中,形成一块存储了Object类型所有实例的数据值结构化内存。在这块堆中,必须含有能够查找到此对象类型数据(对象类型,父类,接口,方法等)的地址信息,这些类型的数据保存在方法区中。 reference类型在java虚拟机...

2019-04-27 14:09:58 206

原创 本地方法区、Java堆、方法区、运行时常量池

本地方法区 java堆 方法区 运行时常量池 本地方法区:在本地方法栈中执行非java语言编写的代码,例如C或者C++。 Java堆:是类实例和数组的分配空间,是一块线程所共享的内存区域,虚拟机启动时创建。 方法区:方法区在虚拟机启动时创建,也是一块所有线程共享的内存区域,它用于存储已被虚拟机加载的类的信息,常量,静态变量,及时编译器编译后的代码数据。 运行时常量池:是方法区的一部分,...

2019-04-27 13:35:04 2513

原创 运行时的数据区域

Java虚拟机在执行java程序时,会在运行时环境中将其所管理的内存分为几个不同的数据区域。有的区域会在java虚拟机启动进程时创建,死亡时销毁。有些区域则是依赖于用户进程的启动而创建,结束时而销毁 所有线程共享堆和方法区。虚拟机栈,本地方法栈和程序计数器则是线程隔离的数据区。 所以java虚拟机会将其管理的内存分为: 堆 方法区 虚拟机栈 本地方法区 程序计数器 程序计数器: 线...

2019-04-27 11:31:17 127

原创 Java的内存管理

1.栈:Java程序的运行区,是在线程创建时创建。生命周期与线程生命周期一致。 栈是由栈帧的格式存在,栈帧是一个内存区块,是一个有关方法的和运行时数据的数据集。 栈帧主要保存一下几种变量: 1)本地变量:包括输入参数和输出参数以及方法内的变量 2)栈操作:记录出栈和入栈操作 3)栈帧数据:包括类文件,方法 2 堆:堆内存用来存放关键字 new 创建的对象和数组。在堆中分配的内存,由Ja...

2019-04-27 11:10:28 135

原创 类型装载、连接和初始化详解

类型装载 装载阶段由三个基本动作组成: 1)根据类型的完全限定名,产生一个能够代表该类型的二进制流 2)解析这个二进制流为方法区的数据结构 3)创建一个能够代表该类型的java.lang.Class实例 实际上就是一个把二进制数据流解析为方法区的数据结构,并在堆中创建一个实例,这就是装载。 java类型的装载要么由启动类装载器装载,要么由用户自定义的类装载器装载。 连接 验证 连...

2019-04-22 23:15:26 212

原创 栈和局部变量操作之一

类型的装载、连接和初始化 装载:把二进制形式的java类型读入java虚拟机中 连接:把已经读入虚拟机的二进制形式的数据合并到虚拟机运行时的状态中去。连接分为三个状态 1.验证 2.准备 3.解析 初始化:在此期间都给类变量赋以适当的初始值 上述三个阶段必须严格按照时序进行,唯一有区别的是,在连接的解析阶段,可以在初始化之后进行 在类和接口被装载和连接的时机上,java虚拟机规范给出了...

2019-04-22 22:08:42 104

原创 Java虚拟机之数据类型

byte short int long char float double boolean returnAddress 类类型 接口类型 数组类型 byte 一个字节 short 两个字节 int 四个字节 long 八个字节 char 两个字节 float 四个字节 double 八个字节 每个字节八位 在java虚拟机中boolean会用int 或者Byte来表示...

2019-04-22 14:19:35 231

原创 Java虚拟机运行一

某些运行时数据时数据区是共享的,还有一些则是只由一个线程所拥有,每个java虚拟机实例都有一个方法区和堆,他们是由所有新线程所共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析所得到的类信息,并将其放在方法区里面。当程序运行时,虚拟机会把所有在该程序中创建的实例对象放入堆中。 当一个线程被创建时,它都将得到它自己的pc寄存器(程序寄存器)以及一个java栈,...

2019-04-22 13:58:29 407

原创 Java虚拟机的体系结构

一个虚拟机实例的行为分别是按照子系统,内存区,数据类型,指令这几个术语来描述的。 当java虚拟机运行一个程序时,它需要使用内存来存储许多东西,例如: 1.字节吗 2.从已经装载的class文件中得到的其他信息 3.程序创建的对象 4.传递给方法的参数 5.返回值 6.局部变量 7.运算的中间结果 Java虚拟机会把上述元素都组织到"运行时数据区",目的是便于管理。尽管这些"运行...

2019-04-22 13:27:14 108

原创 java构造器再探

再次发现父类构造函数只会执行一次 父类 B package gavin; class B{ public B(){ System.out.println("B Constructor B()"); } public B(int i){ this(); System.out.println("B Constructor B...

2019-04-21 19:58:51 105

原创 java构造器初探

什么是构造器:构造器是Java和C#学习中很重要的一个概念,构造器可以提供许多特殊的方法,构造器作为一种方法,负责类中成员变量(域)的初始化。实例构造器分为缺省构造器和非缺省构造器。(百度百科) 构造器中的this和方法中的this的区别 构造器的this是指向该类下的带其他参数的构造器。 方法中的this是指向正在执行该类的实例。静态方法不能使用this,因为静态方法不属于实例。 构造器...

2019-04-21 19:40:06 170

原创 线程池的工作机制

线程池的两个核心队列 1.线程等待池 线程队列 2.任务处理池 即正在工作的Thead列表 核心参数 1.核心池大小 即固定大小,设定好之后,线程池的稳定峰值,达到这个值之后的线程数大小不会释放 2.最大处理线程池数 ,当线程池里的线程数超过核心池的大小,小于最大处理线程池数后,会动态创建与回收线程池中的线程资源 ...

2019-04-21 10:53:23 772

原创 线程池

什么是线程池? 利用已有的线程继续操作。保存已有的线程的地方。 Executors是一个创建线程工厂的类,提供了常用的一下三种方法: 1.newSingleThreadExecutor 2.newFixedThreadPool 3.newCachedThreadPool newSingleThreadExecutor是创建一个只有一个线程的线程池,如果这个唯一的线程因为异常结束,那么会...

2019-04-21 10:44:57 125

原创 多线程之间的交互:线程阀

1.阻塞队列BlockingQueue 2.数组队列ArrayBlockingQueue 3.链表队列LinkedBlockingQueue 4.优先队列PriorityBlockingQueue 5.延时队列DelayQueue 6.同步队列SynchronousQueue 7.链表双向阻塞队列LinkedBlockingDeque 8.链表传输队列LinkedTransferQu...

2019-04-21 10:27:08 182

原创 线程安全的集合类

1.Hashtable和Hashmap的区别 2.ConcurrentHashMap 3.CopyOnWriteArrayList 4.CopyOnWriteArraySet 5.CopyOnWrite机制 6.Vector 7.StringBuffer和StringBuilder的区别 ...

2019-04-21 09:55:22 260

原创 Thread线程安全四

volatile关键字和原子操作:atomic volatile 意思是易变的,不稳定的。作用是告诉编译器,凡是被该关键字声明的变量都是易变。 对于易变的变量最好不要进行锁操作,容易造成死锁。被volatile修饰的变量,线程从主内存中读取后,进行操作,之后并不一定立刻刷性主内存中的变量。volatile只提供了内存的可见性,没有提供原子性。所以用来做高并发是不可靠的。 volatile适合...

2019-04-20 15:15:57 310

原创 Thread线程安全三

悲观锁和乐观锁 悲观锁:假设会发生并发冲突,屏蔽一切可能违反数据完整性的操作 读悲观锁:在读悲观锁之前一定要判断一下,数据是否正在被修改 乐观锁:假设不会发生冲突,只在提交操作时检查是否违反数据完整性 读乐观锁:不需要判定数据的一致性,只管自己读 import java.util.concurrent.locks.StampedLock; class Point{ priva...

2019-04-20 15:01:28 194

原创 Thread线程安全二

什么是线程安全? 多个线程操纵变量,能保持变量的一致性,正确性,没有发生相互修改和串行的情况。 隐式锁,又称为线程同步synchronized syschronized可以对一个方法使用,也可以对一个代码快进行使用。 public synchronized void Set(){ } public void set(){ synchronized...

2019-04-20 14:47:12 157

原创 Thread线程安全一

Java内存模型与多线程 计算机读取数据的优先顺序是寄存器>高速缓存>内存 JLS(java语言规范)定义了一个同一的内存管理模型JMM(Java memery model),JMM屏蔽了底层平台的内存管理细节,在多线程中必须解决的两个问题是可见性和时序性 JMM规定了主内存和工作内存,主内存就是平时所说的堆内存,存放程序中所有的类实例,静态变量等数据,是多个线程共享的,工作内存...

2019-04-20 14:12:50 144

原创 Thread

实现线程的三种方法 1.继承线程类Thread 2.实现接口Runnable 3.实现Callable类 继承Thread public class A extends Thread{ public void run(){ for (int i = 0; i < 5; i++) { System.out.println("A thr...

2019-04-20 13:50:14 155

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除