![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 81
勤言不勤语
走走看看,停停想想。
展开
-
java容器源码分析--HashMap(JDK1.8)
本篇结构:前言HashMap的数据结构常用方法及遍历选择HashMap中的重要参数源码分析疑问解答一、前言HashMap在日常软件开发中用得很多,它很方便,使用也简单,这样一个经常陪在我们身边的容器对象,当然应该好好研究一下啦,毕竟了解了本质,才能更好的相处。这和日常处朋友是一样的。二、HashMap的数据结构2.1、基本数据结构数据结构的知识是薄弱环...原创 2018-03-27 11:28:55 · 377 阅读 · 1 评论 -
java 8(二)--函数式数据处理Stream
一、前言有一个池塘,池塘里面有各种各样的鱼虾,假如我想找到所有大于2斤小于3斤的草鱼的名字(假如鱼有名字)。这个需求很简单,映射到数据库中可以这样查询:SELECT name FROM tbl_fishes WHERE kind = 'grass carp' AND weight 2这条SQL语句简单明了,剩下的就交给数据库搞定了,那用java如何实现呢?原创 2017-07-11 14:24:39 · 1577 阅读 · 0 评论 -
java 8(三)--用Optional取代null
一、引言先假设有三个类,Student, Bag, Book:class Student{ private Bag bag; public Student(Bag bag) { this.bag = bag; } public Bag getBag() { return bag; } public void setBa原创 2017-07-14 17:15:05 · 8562 阅读 · 2 评论 -
java调用本地方法--jni简介
本篇结构:简介JNI实现步骤JNI实例–简单调用故障排除CUDA 生成动态链接库 指令参考博文一、简介JAVA以其跨平台的特性深受人们喜爱,而又正由于它的跨平台的目的,使得它和本地机器的各种内部联系变得很少,约束了它的功能。有时可能存在需要访问的系统特性和设备通过java平台无法实现,又或者某个部分需要非常高的性能,这时可能就要牺牲跨平台的优势,一种解决方法就是寻求系...原创 2018-05-11 16:29:19 · 5175 阅读 · 0 评论 -
java调用本地方法--jni访问实例域和静态域
本篇结构:简介实例一、简介接JNI简介的基础上,新增访问实例域和静态域的例子。访问和修改实例变量操作步聚: 调用 GetObjectClass 函数获取实例对象的 Class 引用 调用 GetFieldID 函数获取 Class 引用中某个实例变量的 ID 调用 GetXXXField 函数获取变量的值,需要传入实例变量所属对象和变量 ID 调用 SetXXXFi...原创 2018-05-11 16:30:02 · 283 阅读 · 0 评论 -
java调用本地方法--JNI字符串参数传递与返回
本篇结构:简介实例一、简介补充JNI字符串参数传递与返回调用实例。二、实例2.1、编写Java类public class Sample { public native static String sayHello(String text); public static void main(String[] args) { ...原创 2018-05-11 16:30:59 · 5042 阅读 · 0 评论 -
java调用本地方法--JNI访问基本类型数组
本篇结构:简介实例一、简介补充JNI基本类型数组访问实例。对于基本数据类型数组,JNI 都有和 Java 相对应的结构,在使用起来和基本数据类型的使用类似。JNI 提供了对应的转换函数:GetArrayElements、ReleaseArrayElements。 intArray = env->GetIntArrayElements(intArray_...原创 2018-05-11 16:31:38 · 1308 阅读 · 0 评论 -
java调用本地方法--JNI访问对象型数组
本篇结构:简介实例一、简介补充JNI对象数组访问实例。JNI 中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是 JNI 的基本数据类型,可以直接访问。而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问 Java 传递给 JNI 层的数组,必须选择合适的 JNI 函数来访问和设置 Java 层的数组对象...原创 2018-05-11 16:32:39 · 1614 阅读 · 0 评论 -
java调用本地方法--javacpp简介
本篇结构:简介必备软件使用示例一、简介javacpp 是一种替换 JNI、JNA 的开源技术。它提供了在 Java 中高效访问本地 C++ 的方法。JavaCPP 提供了一系列的 Annotation 将 Java 代码映射到C++代码,并使用一个可执行的 jar 包将 C++ 代码转化为可以从JVM内调用的动态链接库文件。github地址是:https://github....原创 2018-05-11 16:33:22 · 2928 阅读 · 0 评论 -
【Jvm】运行时数据区域
内容来自《深入理解Java虚拟机》。本篇结构:程序计数器Java 虚拟机栈本地方法栈Java 堆(Java Heap)方法区运行时常量池直接内存一、程序计数器程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需...原创 2019-06-11 21:04:52 · 140 阅读 · 0 评论 -
【Jvm】垃圾回收
本篇结构:判断对象已死java 四种引用堆内存划分垃圾收集算法对象在堆中的分配垃圾收集器参考资料一、判断对象已死1.1、引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计数器为0的对象就是不可能再被使用的。这个方法实现简单,效率高,但是目前主流的虚拟机中并没有选择这个算法来管理内存,其最主要的原因是它很难解决对象...原创 2019-06-25 14:52:39 · 196 阅读 · 0 评论 -
java 8(一)--Lambda表达式
一、什么是Lambda表达式?可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。匿名——它不像普通的方法那样有一个明确的名称函数——和方法一样,Lambda有参数列表、函数主体、返回类型,还可能有可以抛出的异常列表传递——Lambda表达式可以作原创 2017-07-10 10:06:50 · 550 阅读 · 0 评论 -
java容器源码分析--ArrayList(JDK1.8)
本篇结构:前言ArrayList的数据结构ArrayList中的重要参数常用方法源码分析疑问解答ArrayList分析总结一、前言同HashMap一样,ArrayList是很常用的集合类了,其源码相对来说简单一些,下面简单分析一下。二、ArrayList数据结构ArrayList的底层数据结构就是一个Object数组,一个可变的数组,对于其的所有操作都是通过...原创 2018-03-27 16:15:05 · 532 阅读 · 0 评论 -
java容器源码分析--LinkedList(JDK1.8)
本篇结构:前言数据结构重要参数常用方法源码分析疑问解答分析总结一、前言ArrayList和LinkedList都是很常用的容器,它们适合不同的场景。对于随机访问和设置频繁的场景,应该选用ArrayList,因为ArrayList是基于一个动态数组的容器;而对于插入和删除频繁的场景,应该选用LinkedList,ArrayList插入和删除都需要复制数组,会消耗一定的...原创 2018-03-28 14:36:33 · 311 阅读 · 0 评论 -
java容器源码分析--HashSet(JDK1.8)
本篇结构:前言数据结构重要参数常用方法源码分析疑问解答分析总结一、前言HashSet也是常用的数据结构,是一个没有重复元素的集合,也不能保证元素的顺序,可以有null值,但最多只能有一个。HashSet的实现是基于HashMap的,在了解过HashMap的源码(java容器源码分析–HashMap(JDK1.8))后,再看HashSet的源码,会简单很多,所以本...原创 2018-03-29 11:22:59 · 348 阅读 · 0 评论 -
java调用本地方法--JNI访问List集合
本篇结构:简介实例一、简介因为对C/C++不算了解,所以JNI系列的博文更多是在实战操作方面,这里接上面的文章,补充下JNI访问List集合实例。二、实例2.1、编写java类import java.util.ArrayList;import java.util.List;/** * @Author: w1992wishes * @Date: 2...原创 2018-05-12 11:10:23 · 3798 阅读 · 2 评论 -
java并发编程(一)--并发编程的优缺点与挑战
一. 介绍在过去单CPU时代,单任务在一个时间点只能执行单一程序。之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程。虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个CPU,并交由操作系统来完成多任务间对CPU的运行切换,以使得每个任务都有机会获得一定的时间片运行。再后来发展到多线程技术,使得在一个程序内部能拥有多个线程并行执行。一个线程的执行可以被认为是一个原创 2017-05-23 14:42:34 · 440 阅读 · 0 评论 -
java并发编程(二)--volatile关键字解析
volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。 volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。由于volatile关键字是与Java的内存模型有关的,因此在讲述volatile关键之前,我们转载 2017-05-23 16:13:03 · 484 阅读 · 0 评论 -
java并发编程(三)--java中的锁(Lock接口和队列同步器AQS)
一.Synchronized关键字在Java中,每一个对象都拥有一个锁标记(monitor),也称为监视器,多线程同时访问某个对象时,线程只有获取了该对象的锁才能访问。在Java中,可以使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时,这个线程便获得了该对象的锁,其他线程暂时无法访问这个方原创 2017-06-01 17:07:52 · 1630 阅读 · 1 评论 -
java并发编程(四)--java中的锁(可重入锁ReentrantLock)
一、 概述本文首先介绍Lock接口、ReentrantLock的类层次结构以及锁功能模板类AbstractQueuedSynchronizer的简单原理,然后通过分析ReentrantLock的lock方法和unlock方法,来解释ReentrantLock的内部原理,最后做一个总结。本文不涉及ReentrantLock中的条件变量。1.1、Lock接口Lock接口,是对控原创 2017-06-01 18:42:17 · 635 阅读 · 0 评论 -
java并发编程(五)--Java中的锁(读写锁ReentrantReadWriteLock)
一.读写锁介绍在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时刻可以允许多个读线程访问,但是在写线程访问时,所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性相比一般的排他锁有了很大提升。二.读写锁的特性ReentrantReadWrit原创 2017-06-02 14:25:40 · 1113 阅读 · 1 评论 -
java nio(一)--Buffer基础
一、什么是缓冲区Java的NIO中Buffer至关重要:buffer是读写的中介,主要和NIO的通道交互。数据是通过通道读入缓冲区和从缓冲区写入通道的。缓冲区buffer的本质就是一块可以读写的内存块(buffer类内部是一个基本数据类型的数组)。这块内存块被包装成NIO的Buffer对象,并提供了一组方法方便读写。对于每个非布尔原始数据类型都有原创 2017-06-19 09:52:13 · 361 阅读 · 0 评论 -
【Java 并发】Java 并发包基石-AQS详解
文章目录一、AQS 介绍二、AQS 使用2.1、使用方式2.2、使用实例2.3、使用测试三、AQS 实现3.1、Node 结点3.2、独占式获取同步状态--acquire()3.3、独占式释放同步状态--release()3.4、共享式获取同步状态--acquireShared3.5、共享式释放同步状态--releaseShared四、总结一、AQS 介绍队列同步器 AbstractQueue...转载 2019-12-09 11:34:23 · 370 阅读 · 0 评论