Java
文章平均质量分 96
VincentWei95
这个作者很懒,什么都没留下…
展开
-
JVM Hotspot 虚拟机与 Dalvik&ART 虚拟机堆栈的区别
文章目录Hotspot 虚拟机与 Dalvik 虚拟机的区别Dalvik&ART 内存管理模型JVM 与 Dalvik&ART 在栈的区别AOT(Ahead Of Time)预先编译机制JVM 与 Dalvik&ART 在堆的区别ART 的 GC 策略分配对象时执行 GC 的三个阶段强引用、软引用、弱引用、虚引用该篇内容会基于 JVM 运行时数据区(栈和堆) 和 JVM GC 两篇文章的理论知识上讲解,所以建议看完理解后再学习该篇文章会对知识的学习比较有帮助。Hotspot 虚拟原创 2022-04-09 17:35:58 · 5029 阅读 · 0 评论 -
JVM GC
文章目录GC 核心概述Java 自动化内存管理什么是垃圾?内存碎片的概念为什么需要 GC?GC 相关算法对比垃圾回收相关算法引用计数算法可达性分析算法标记-清除算法复制算法标记-压缩/整理算法算法性能指标对比分代收集算法增量收集算法分区算法常用的垃圾回收器常用的 7 种垃圾回收器垃圾回收的并行与串行垃圾回收的并行与并发常用 GC 垃圾回收器对比CMS 回收器评估 GC 的性能指标MAT 及 Profiler 应用及程序调优MAT内存抖动与内存泄漏GC 核心概述Java 自动化内存管理什么是垃圾?内存原创 2022-04-07 23:05:10 · 1193 阅读 · 0 评论 -
JVM 运行时数据区(栈和堆)
文章目录JVM 是一种规范什么是 JVM?为什么 JVM 是一种规范?Java 程序的执行过程JVM 与字节码文件栈指令集架构和寄存器指令集架构Hotspot 虚拟机及 Dalvik&ART 虚拟机JVM 的组成部分及架构运行时数据区方法调用过程虚拟机栈基本信息程序计数器/PC寄存器栈帧内部结构解析局部变量表操作数栈动态链接方法返回地址异常表对象分配过程线程共享区域方法区直接内存深入辨析堆栈内存溢出JVM 是一种规范什么是 JVM?为什么 JVM 是一种规范?很多时候我们提到 JVM,都会默认原创 2022-04-04 18:40:54 · 2826 阅读 · 0 评论 -
JMM 内存并发模型及 volatile 原理
volatile 是java的一个关键字,volatile具有可见性、有序性,不具备原子性。那什么是可见性、有序性和原子性?1 原子性原子性是不可打断的操作,要么成功要么失败。// 基本数据类型的读写操作都是属于原子性// 即可以看成当一个线程执行int a = 10这句代码时其他线程是处于等待获取cpu资源的状态// 因为线程并发是通过cpu调度交替执行,并不是真正的并行执行int..................原创 2019-12-19 13:42:19 · 365 阅读 · 1 评论 -
Java synchronized 与 CAS(Compare And Swap)
文章目录线程安全性分析synchronized对象中的 mark word 对并发的支持重量级锁偏向锁轻量级锁锁膨胀CAS 原理总结线程安全性分析在系统处理过程中,最为常见的问题是多个线程对于相同资源进行访问所造成的数据处理异常问题。看下面的例子:public static int counter;public static void main(String[] args) { Thread t1 = new Thread(() -> { for (int i = 0; i <原创 2022-03-19 21:21:09 · 833 阅读 · 0 评论 -
Java四种引用类型的区别
1 四种引用类型的背景1 四种引用类型在面试当中有遇到内存泄漏、内存溢出的问题,少不了肯定会提到Java的四种引用类型。我们知道,Java提供了四种引用类型分别为:强引用(Strong Reference)软引用(Soft Reference)弱引用(Weak Reference)虚引用(Phantom Reference)我们都知道四种引用的强度在内存中依次减...转载 2020-01-01 22:58:02 · 1153 阅读 · 0 评论 -
hashcode和equas的区别
http://blog.csdn.net/tiantiandjava/article/details/46988461转载 2019-06-21 23:52:11 · 125 阅读 · 0 评论 -
Java IO流
1 InputStream类型类功能构造器参数ByteArrayInputStream允许将内存的缓冲区当作InputStream使用缓冲区,字节将从中取出FileInputStream用于从文件中读取信息字符串,表示文件名、文件或FileDescriptor对象2 OutputStream类型类功能构造器参数ByteArrayO...原创 2019-06-21 23:52:49 · 64 阅读 · 0 评论 -
构造方法的执行顺序
1 代码加载的优先级静态代码块、静态成员变量->非静态代码块、非静态成员变量->new其他对象调用对应对象构造方法(在本地对象的方法外包括构造方法)->new本地对象调用构造方法注意:若new对象时,该对象中有静态代码块和非静态代码块,每new一次对象,非静态代码块都会执行一次,但静态代码块只会执行一次往后new对象都不会再执行。new的对象在堆和栈都分配内存空间,在...原创 2019-06-21 23:53:36 · 1042 阅读 · 0 评论 -
Java 泛型
1、泛型类:当类中操作的引用数据类型不确定的时候,将类定义为泛型来完成扩展class Worker{}class Student{}//要传入的对象不确定,用泛型类定义就可以传入任何对象引用该工具类class Utils<T>{ private T t; public void setObject(T t){ this.t =...原创 2020-01-03 18:02:36 · 401 阅读 · 0 评论 -
Java类加载机制和反射机制
1 什么是java反射机制java反射是java被视为动态(或准动态)语言的一个关键性质。反射机制允许程序在运行时(不是编译时)透过Reflection APIs取得任何一个已知名称的class内部信息,包括modifiers(权限修饰符如public、static等)、superclass(例如Object)、实现的interfaces(如Cloneable)、fields(属性)、meth...原创 2019-06-21 23:51:55 · 627 阅读 · 0 评论 -
Java 线程池
根据上面线程池的继承图,我们如果需要自定义线程池时可以扩展ThreadPoolExecutor。扩展线程工厂创建类实现ThreadFactory,threadPoolExecutor.setThreadFactory(factory)。Executors 类时线程池封装工具类,提供四种线程池。1 ThreadPoolExecutor构造方法:public TheadPoolExecut...原创 2019-06-21 23:50:42 · 451 阅读 · 1 评论 -
Java8技术系列:Lambda
函数式接口函数式接口(Functional Interfaces):如果一个接口定义了唯一的一个方法,那么这个接口就是函数式接口。同时,引入了注解 @FunctionalInterface,可以使用它注解接口表示是函数式接口。这个注解是非必需的,只要接口只包含一个方法,虚拟机会自动判断为函数式接口,不过最好在接口上使用注解 @FunctionalInterface 声明。lambda表达式...原创 2019-06-21 23:48:01 · 112 阅读 · 0 评论 -
Java7技术系列:Java并发
1 传统并发(Java5之前)1.1 同步与锁synchronized既可以用在代码块上也可以用在方法上。它表明在执行整个代码块或方法之前线程必须取得合适的锁。对于方法而言,这意味着要取得对象实例锁(对于静态方法而言则是类锁)。对于代码块,则应该指明要取得哪个对象的锁。java中的同步和锁相关知识:只能锁定对象,不能锁定原始类型。被锁定的对象数组中的单个对象不会被锁定。...原创 2019-06-21 23:48:15 · 209 阅读 · 0 评论 -
Java7技术系列:NIO.2异步IO
文章目录1 NIO.2相关API介绍1.1 NIO.2关键基础类1.2 文件处理的基础类2 Path2.1 获取Path2.2 从Path中获取信息2.3 去除冗余项2.4 转换Path2.5 java7的Path与java7之前的File之间转换2.6 文件属性3 文件操作3.1 创建文件3.2 删除文件3.3 复制文件3.4 移动文件4 文件读写数据4.1 读文件4.2 写文件4.3 读写文...原创 2019-06-21 23:48:36 · 227 阅读 · 0 评论 -
Java7技术系列:DI依赖注入
1 依赖注入介绍javax.inject:这个包指明了获取对象的一种方式,与传统的构造方法、工厂模式和服务器定位模式等相比,这种方式的可重用性、可测试性和可维护性都得到了极大提升。这种方式称为依赖注入,对于大多数非小型应用程序都很有帮助。javax.inject 包里包括一个 Provider<T> 接口和5个注解类型(@Inject、@Qualifier、@Named、@Scop...原创 2019-06-21 23:48:50 · 155 阅读 · 0 评论 -
Java7技术系列:Queue
BlockingQueue 是Queue的简单扩展,它有两个特性:向队列中put()时,如果队列已满,它会让放入线程等待队列腾出空间。从队列中take()时,如果队列为空,它会导致取出线程阻塞。这两个特性非常有用,因为如果一个线程(或线程池)的能力超过了其他线程,比较快的线程就会被强制等待,可以对整个系统起到调节作用。BlockingQueue也提供了offer(E obj, ...原创 2019-06-21 23:49:04 · 229 阅读 · 0 评论 -
Java7技术系列:try-with-resource
/** * Java7以前对IO流的处理除了语法复杂,即使使用了try catch但仍有可能流并没有正常关闭 */private static void tryCatchBeforeJava7(String targetUrl) { InputStream is = null; OutputStream os = null; try { File fi...原创 2019-06-21 23:49:17 · 120 阅读 · 0 评论 -
Java7技术系列:int与二进制的转换优化
long anotherLong = 2_147_483_648L;int oldBitPattern = Integer.parseInt("1100110", 2); // 将二进制转换成intint bitPattern = 0b1100110; // java7新特性,直接使用二进制,编译器会自动处理System.out.println(anotherLong); // 运行时编...原创 2019-06-21 23:49:42 · 146 阅读 · 0 评论 -
Java7技术系列:MultiCatchException
/** * 该方法会遇到几种异常: * ①配置文件不存在 * ②配置文件正要读取时消失了 * ③配置文件中有语法错误 * ④配置文件中可能包含无效信息 * * 这些异常可以分为两大类: * 一类是文件以某种方式丢失或损坏,另一类是文件存在,却无法读取 * 通过使用Java7特性将同一类的异常放在一个catch语句中处理会更好 */private static void get...原创 2019-06-21 23:50:03 · 162 阅读 · 0 评论 -
Java8技术系列:Java8提供的函数式接口和集合流
PredicatePredicate接口用于处理逻辑判断,返回 boolean 类型,内置了许多用于逻辑判断的默认方法,也可以自定义判断。// 传统写法Predicate<String> predicate = new Predicate<String>() { @Override public boolean test(String s) { ...原创 2019-06-21 23:47:47 · 110 阅读 · 0 评论