
java
augfun
旧博客遗失,新博客凑活着用吧
展开
-
java GC相关内容
GC是什么?为什么要有GC?垃圾回收的优点和原理,并考虑两种回收机制垃圾回收器的基本原理是什么Java中会有内存泄漏吗ClassLoader如何加载class...原创 2020-04-12 03:12:35 · 154 阅读 · 0 评论 -
Java中static、final、static final的区别
final:final可以修饰:属性,方法,类,局部变量(方法中的变量)final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变。final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值。final修饰的属性表明是一个常数(创建后不能被修改)。final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被...转载 2019-12-06 11:04:37 · 158 阅读 · 0 评论 -
java反射--通过反射越过泛型检查(2)
ArrayList<Integer>的一个对象,在这个集合中添加一个字符串数据test2.javaimport java.lang.reflect.Method;import java.util.ArrayList;public class test2 { /** * @param args * * A:案例演示 * ArrayList<Integ...原创 2019-12-06 10:14:51 · 226 阅读 · 0 评论 -
java反射(1)
反射概述 * JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; * 对于任意一个对象,都能够调用它的任意一个方法和属性; * 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。 * 要想解剖一个类,必须先要获取到该类的字节码文件对象。 * 而解剖使用的就是Class类中的方法,所以先要获取到每一个字节...原创 2019-12-05 14:07:18 · 135 阅读 · 0 评论 -
String源码分析,==与equals的区别及理解
区别:“==”是一个运算符,可以比较基本的数据类型和引用的数据类型,基本的数据类型比较的是值,引用数据类型比较的是地址值。“equals”重写之前比较的是引用数据类型,重写之前比较的是地址值,重写以后比较的是属性值。“==” 比较的是两个引用在内存中指向的是不是同一对象(即同一内存空间),也就是说在内存空间中的存储位置是否一致。如果两个对象的引用相同时(指向同一对象时),“==”操...转载 2018-09-16 06:07:58 · 540 阅读 · 0 评论 -
HashTable源码剖析
HashTable同样是基于哈希表实现的,同样每个元素都是key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阈值)时,同样会自动增长。Hashtable也是JDK1.0引入的类,是线程安全的,能用于多线程环境中。Hashtable同样实现了Serializable接口,它支持序列化,实现了Cloneable接口,能被克隆。##Hashtable源码剖析 Hasht...转载 2018-09-16 06:08:37 · 327 阅读 · 0 评论 -
Vector源码剖析
Vector简介 Vector也是基于数组实现的,是一个动态数组,其容量能自动增长。Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector没有实现Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAcce...转载 2018-09-16 06:09:17 · 252 阅读 · 0 评论 -
可重入内置锁
每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁。获得内置锁的唯一途径就是进入由这个锁保护的同步代码块或方法。当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置锁是可重入的,因此如果摸个线程试图获得一个已经由它自己持有的锁,那么这个请求就会成功。“重入”意味着获取锁的操...转载 2018-09-16 06:09:43 · 287 阅读 · 0 评论 -
并发编程中实现内存可见的两种方法比较:加锁和volatile变量
volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。 从内存可见性的角度看,写入volatile变量相当于退出同步代码块,而读取volatile变量相当于进入同步代码块。 在代码中如果过度依赖volatile变量来控制状态的可见性,通常会比使用锁的代码...转载 2018-09-15 22:26:33 · 376 阅读 · 0 评论 -
Thread和Runnable的实现和多线程的区别
Java中实现多线程有两种方法:继承Thread、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:可以避免由于Java的单继承特性而带来的局限 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的 适合多个相同程序的线程区处理同一资源的情况首先通过Thread类实现。通过...转载 2018-09-10 05:18:17 · 755 阅读 · 0 评论 -
synchronized
线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案,当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是说当一个共享数据...转载 2018-09-10 05:37:57 · 331 阅读 · 0 评论 -
synchronized的四种用法
一 修饰方法Synchronized修饰一个方法很简单,就是在方法的前面加synchronized,synchronized修饰方法和修饰一个代码块类似,只是作用范围不一样,修饰代码块是大括号括起来的范围,而修饰方法范围是整个函数。例如:方法一public synchronized void method(){ // todo}方法二public void ...转载 2018-09-10 05:48:49 · 3530 阅读 · 0 评论 -
java中产生死锁的原因及如何避免
死锁代码:* 多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁尽量不要嵌套使用public class helloworld { private static String s1 = "筷子左"; private static String s2 = "筷子右"; public static void main(String[] args) { n...原创 2018-09-10 05:55:00 · 369 阅读 · 0 评论 -
java线程生命周期和多线程间通信wait(),notify(),notifyAll()
JAVA基础知识之多线程——线程的生命周期(状态)线程有五个状态,分别是新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。新建和就绪程序使用new会新建一个线程,new出的对象跟普通对象一样,JVM会为其分配内存,初始化成员变量等,此时线程并没有运行,而是就是新建状态。当线程对象调用start后,线程将进入就绪状态。JVM会...转载 2018-09-10 06:08:28 · 528 阅读 · 0 评论 -
JVM和Dalvik VM的简要区别
Dalvik虚拟机与Java虚拟机的最显著区别是它们分别具有不同的类文件格式以及指令集。Dalvik虚拟机使用的是dex(Dalvik Executable)格式的类文件,而Java虚拟机使用的是class格式的类文件。一个dex文件可以包含若干个类,而一个class文件只包括一个类。由于一个dex文件可以包含若干个类,因此它就可以将各个类中重复的字符串和其它常数只保存一次,从而节省了空间,这样就...转载 2018-09-30 00:23:26 · 586 阅读 · 0 评论 -
java多态,方法重写和方法重载的区别
方法重写(方法覆盖)概念:子类继承父类中的方法,想在原有的基础上作一定的修改。格式特点:1.方法名、参数列表必须完全一致2.返回类型可以相同,也可以不同,不同必须是原来返回类型的子类型(可隐式转换即可)JAVA近期版本的新特性,在之前子类返回值类型必须和父类返回值类型保持一致2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)3.子类方法的访问级别不能低于...原创 2019-03-12 01:51:10 · 1348 阅读 · 0 评论 -
Java 多态
Java 多态多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现。现实中,比如我们按下 F1 键这个动作:如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档; 如果当前在 Word 下弹出的就是 ...转载 2019-03-28 04:10:06 · 274 阅读 · 0 评论 -
多线程环境中安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方法,没有一个是同步化的。集合本质上是非多线程安全的,当多个线程与集合交互时,为了使它多线程安全,必须采...转载 2018-09-15 22:25:12 · 453 阅读 · 0 评论 -
守护线程与阻塞线程的四种情况
Java中有两类线程:User Thread(用户线程)、Daemon Thread(守护线程)用户线程即运行在前台的线程,而守护线程是运行在后台的线程。 守护线程作用是为其他前台线程的运行提供便利服务,而且仅在普通、非守护线程仍然运行时才需要,比如垃圾回收线程就是一个守护线程。当VM检测仅剩一个守护线程,而用户线程都已经退出运行时,VM就会退出,因为如果没有了守护者,也就没有继续运行程序的必...转载 2018-09-15 22:22:32 · 642 阅读 · 0 评论 -
Webkit主资源加载流程(推荐)
原帖地址 :http://blog.youkuaiyun.com/luoxinwu123/article/details/82048241,Webkit加载的主要模块Loader的主要模块包括Frameloader、DocumentLoader以及MainResourceLoader,加载的命令是Frame传进来的。加载主要涉及的Webkit模块是page、loader与platform。主转载 2017-01-15 17:21:10 · 1587 阅读 · 0 评论 -
java实现文件的断点续传的下载
java的断点续传是基于之前java文件下载基础上的功能拓展首先设置一个以线程ID为名的下载进度文件,每一次下载的进度会保存在这个文件中,下一次下载的时候,会根据进度文件里面的内容来判断下载的进度。package com.ldw.multilthreaddownload;import java.io.BufferedReader;import java.io.File;原创 2017-01-22 02:08:21 · 7867 阅读 · 1 评论 -
java线程(线程同步)
【转载地址】"http://www.cnblogs.com/XHJT/p/3897440.html"为何要使用同步? java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证了该变量的唯一性和准确性。转载 2017-01-26 11:55:18 · 814 阅读 · 0 评论 -
java线程(开启线程)
【文章来源】http://www.cnblogs.com/lwbqqyumidi/p/3804883.html多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的。一.线程的生命周期及五种基本状态关于Java中线程的生命周期,首先看一下下面这张较为经典的图:上图中基本上囊括了Java中多线程各重要知识点。掌握了上图中的各知识点,Java中的多线程...转载 2017-01-26 11:13:38 · 2814 阅读 · 0 评论 -
java Timer定时器的简单实用
做项目很多时候会用到定时任务,比如在深夜,流量较小的时候,做一些统计工作。早上定时发送邮件,更新数据库等。这里可以用Java的Timer或线程池实现。Timer可以实现,不过Timer存在一些问题。他起一个单线程,如果有异常产生,线程将退出,整个定时任务就失败。下面是一个Timer实现的定时任务Demo,会向控制台每隔一秒输出Do work...import java.util.Date;imp...原创 2018-03-20 12:44:16 · 1287 阅读 · 0 评论 -
J2SE
基础八种基本数据类型的大小,以及他们的封装类。八种基本数据类型,int ,double ,long ,float, short,byte,character,boolean对应的封装类型是:Integer ,Double ,Long ,Float, Short,Byte,Character,BooleanSwitch能否用string做参数?在Java 5以前,switch(e...转载 2018-09-02 06:47:03 · 1053 阅读 · 0 评论 -
JVM类加载机制
虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被Java虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。类从被加载到虚拟内存中开始,到卸载内存为止,它的整个生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initializ...转载 2018-09-04 23:56:53 · 229 阅读 · 0 评论 -
Java中的内存泄漏
1.Java内存回收机制不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方法...转载 2018-09-03 01:29:32 · 269 阅读 · 0 评论 -
Java集合框架
Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。学习Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。一、集合框架图Java集合类的整体框架如下: ...转载 2018-09-03 01:58:51 · 3080 阅读 · 2 评论 -
ArrayList源码分析(基于JDK8)
ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList 继承了AbstractList,实现了List。它是一个数组队列,提供了相关的添加、删除...转载 2018-09-03 02:36:31 · 7267 阅读 · 8 评论 -
LinkedList源码分析(基于JDK8)
LinkedList简介LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。LinkedList 实现 List 接口,能对它进行队列操作。LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。LinkedList 实现了Cloneable接口,即覆盖了函数clone()...转载 2018-09-03 02:51:53 · 631 阅读 · 0 评论 -
HashMap源码分析(基于JDK8)
HashMap简介 HashMap基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过C...转载 2018-09-03 03:11:26 · 387 阅读 · 0 评论 -
JVM
内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。下面详细阐述各数据区所存储的数据类型。 程序计数器(Program Counter Register) ...转载 2018-09-03 03:58:14 · 339 阅读 · 0 评论 -
java内存区域与内存溢出异常
java虚拟机的基本结构 类加载子系统 类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)。程序计数器 程序计数器是...转载 2018-09-15 21:53:46 · 351 阅读 · 0 评论 -
垃圾回收算法
引用计数法:缺点是无法处理循环引用问题 标记-清除法:标记所有从根结点开始的可达对象,缺点是会造成内存空间不连续,不连续的内存空间的工作效率低于连续的内存空间,不容易分配内存 复制算法:将内存空间分成两块,每次将正在使用的内存中存活对象复制到未使用的内存块中,之后清除正在使用的内存块。算法效率高,但是代价是系统内存折半。适用于新生代(存活对象少,垃圾对象多) 标记-压缩算法:标记-清除的改进...转载 2018-09-15 22:13:30 · 451 阅读 · 0 评论 -
线程中断
使用interrupt()中断线程当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。演示休眠线程的中断public class SleepInterrupt extends...转载 2018-09-15 22:19:31 · 360 阅读 · 0 评论 -
java IO流
流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径如何判断是输入流、输出流?以内存为参照,如果数据流向内存流动,则是输入流;反之,则是输出流。java流分为两种流1、字节流:可以用于读写二进制文件及任何类型文件byte2、字符流:可以用于读写文本文件,不能操作二进制文件原创 2017-02-06 01:42:58 · 831 阅读 · 0 评论