Java基础之数组队列及Java堆外内存学习笔记[图]

Wesley13
• 阅读 415

Java基础之数组队列及Java堆外内存学习笔记[图]
1.数组
1.1 数组基本概念:
数组是一个容器,可以存储同一数据类型的N个数据;数组是一个数据结构,是数据结构中访问速度最快的;
数组是直接通过下标进行定位;
数组是属于引用数据类型(数组名中存储的是内存首地址);数组本身只有有length属性(获取数组能存储的数据个数),但是有从Objuect父类继承的属性和方法。
1.2数组在内存中的存储:
数组在内存中是一个连续的存储空间;一维数组、二维数组....
1.3数组排序:堆排序
2.数组队列
利用数组这个数据结构,来实现多个数据的类。数组在定义的时候要定义类型和大小,定义完后不能修改(不能动态改变大小和数据类型)。
存储数据的个数是会根据实际情况进行变化,但是数组大小无法改变。
不确定要存储的个数:
数组定义大了,数据小了,浪费空间;数组定义小了,数据多了,越界、存储不下。要满足上述两种要求,利用数组名中存储的是数组对象在堆内存中的首地址。存储数据类型,在单独某一个程序使用中是不会存在太大问题。

Java基础之数组队列及Java堆外内存学习笔记[图]

数组队列是否能够通用,数据类型。Object是所有类的父类:Java中所有基本数据类型都由对应一个类,其父类为Object。
如果要求数组中只能存储某一种数据类型;如果要求数组中可以存储任何数据类型。要满足上述两种要求,只能使用Java泛型。
泛型不是数据类型,是一种特殊的符号,用于泛指Java中任意一种引用类型。在编写数组队列(提供的插件类),不确定之后要存储的数据类型,则只能使用泛型的表示。泛型在此处只是一个占位符,之后在使用中。
Java堆外内存:
1. 首先了解堆内内存on-heap memory
这里写图片描述
2. 定义:off-heap memory
堆外内存就是把内存对象分配在Java虚拟机的堆以外的内存。这些内存直接受操作系统管理(而不是虚拟机),我们仨读后感心得体会及感悟,这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。
3. 特点
1、减少了垃圾回收
因为垃圾回收会暂停其他的工作。
2、加快了复制的速度
堆内在flush到远程时,会先复制到直接内存(非堆内存),然后在发送;而堆外内存相当于省略掉了这个工作。
4. 堆外内存的管理:DirectByteBuffer
DirectByteBuffer类是在Java Heap外分配内存,对堆外内存的申请主要是通过成员变量unsafe来操作;
ByteBuffer bb = ByteBuffer.allocateDirect(1024*1024*128);
5. 其他
System.gc使用-XX:+DisableExplicitGC可以禁掉;
通过-XX:+ExplicitGCInvokesConcurrent也可以做并行gc;
最常见的场景是RMI/NIO下的堆外内存分配等;

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
java的内存机制
Java把内存划分成两种:一种是栈内存,另一种是堆内存。 Heap(堆)Stack(栈)JVM中的功能内存数据区内存指令区存储数据对象实例基本数据类型,指令代码,常量,对象的引用地址堆中存储数据堆内存用来存放由new创建的对象和数组。 保存对象实例,实际上是保存对象实例的属性值,属性的类型和
Wesley13 Wesley13
2年前
PTA1
11数组定义中,数组名后是用方括号括起来的常量表达式,不能用圆括号。(1分)\T\F12在C语言中能逐个地使用下标变量,也能一次引用整个数组。(1分)T\F\因为它有首地址13同一个数组中的每个元素都具有相同的数据类型,有统一的标识符即数组名,用不同的序号即下标来区分数组中的各元素。(1分)\T\F14数
Wesley13 Wesley13
2年前
Java基础面试题(三) (2020持续更新)
前言全套面试题请直接转到文章末尾1.Java中能创建volatile数组吗?能,Java中可以创建volatile类型数组,不过只是一个指向数组的引用,而不是整个数组。我的意思是,如果改变引用指向的数组,将会受到volatile的保护,
Wesley13 Wesley13
2年前
Java开发者容易犯的十个错误
!(https://oscimg.oschina.net/oscnet/c9f00cc918684fbe8a865119d104090b.gif)Top1.数组转换为数组列表将数组转换为数组列表,开发者经常会这样做:\java\List<StringlistArrays.asList(arr);Arr
Wesley13 Wesley13
2年前
JAVA 基础3
一.数组的概念数组可以看成是多个数据类型的集合,是对这些数据进行统一的管理;数组的变量是引用类型,数组本身是对象,数组中的每个元素相当于该对象的成员变量;数组的元素可以是任何数据类型,包括基础数据类型和引用类型;二.数组的声明方式数据类型\\数组名称new数据类型
Stella981 Stella981
2年前
HashMap 的底层实现原理
HashMap是一个用于存储KeyValue键值对的集合,每一个键值对也叫做Entry。这些个Entry分散存储在一个数组当中,这个数组就是HashMap的主干。HashMap数组每一个元素的初始值都是Null。 !(https://oscimg.oschina.net/oscnet/8495d30fe00a2865dd74088d2
Wesley13 Wesley13
2年前
ES6 新增的数组的方法
给定一个数组letlist\//wu:武力zhi:智力{id:1,name:'张飞',wu:97,zhi:10},{id:2,name:'诸葛亮',wu:55,zhi:99},{id:3,name:'赵云',wu:97,zhi:66},{id:4,na
Wesley13 Wesley13
2年前
Java集合笔记
1.1集合概述在前面基础班我们已经学习过并使用过集合ArrayList<E,那么集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类
Wesley13 Wesley13
2年前
Java基础学习总结(21)——数组
一.数组的基本概念数组可以看成是多个相同类型数据组合,对这些数据的统一管理。数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组的元素可以是任何数据类型,包括基本类型和引用类型。C和C中的数组都可以分配在栈上面,而JAVA中的数组是只能分配在堆
达里尔 达里尔
4个月前
给数组添加新数据,判断数据是否重复
多选要进行数组拼接,希望判断往原数组里添的新数据是否重复,封装个简易方法languageconstdataArrayname:'aaa',id:1,name:'bbb',id:2;constnewDataname:'ccc',id:2;//要添加的新数