对象存储

2019-05-26 Java学习日记之Set集合

百般思念 提交于 2020-03-21 08:18:48
HashSet存储字符串并遍历: package com.set; import java.util.HashSet; public class Demo1 { /** * Set集合,无索引,不可以重复,无序(存取不一致) */ public static void main(String[] args) { HashSet<String> hs = new HashSet<>(); //创建HashSet对象 boolean b1 = hs.add("a"); boolean b2 = hs.add("a"); //当向set集合中存储重复元素时返回的是false hs.add("b"); hs.add("e"); hs.add("d"); System.out.println(hs); //HashSet的继承体系中有重写toString方法 System.out.println(b1); System.out.println(b2); for (String string : hs) { //只要能用迭代器的,就可以使用增强for循环 System.out.println(string); } } } HashSet存储自定义对象保证元素唯一性: public static void demo2() { HashSet<Person> hs = new HashSet<>(

计算Java对象内存大小

这一生的挚爱 提交于 2020-03-21 07:05:18
摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型、锁原理、分代GC、OOP-Klass模型等内容。最后推荐JDK自带的Hotspot Debug工具——HSDB,来查看对象在内存中的具体存在形式,以论证文中所述内容。 背景 目前我们系统的业务代码中大量使用了LocalCache的方式做本地缓存,而且cache的maxSize通常设的比较大,比如10000。我们的业务系统中就使用了size为10000的15个本地缓存,所以最坏情况下将可缓存15万个对象。这会消耗掉不菲的本地堆内存,而至于实际上到底应该设多大容量的缓存、运行时这大量的本地缓存会给堆内存带来多少压力,实际占用多少内存大小,会不会有较高的缓存穿透风险,目前并不方便知悉。考虑到对缓存实际占用内存的大小能有个更直观和量化的参考,需要对运行时指定对象的内存占用进行评估和计算。 要计算Java对象占用内存的大小,首先需要了解Java对象在内存中的实际存储方式和存储格式。 另一方面,大家都了解Java对象的存储总得来说会占用JVM内存的堆内存、栈内存及方法区,但由于栈内存中存放的数据可以看做是运行时的临时数据,主要表现为本地变量、操作数、对象引用地址等。这些数据会在方法执行结束后立即回收掉

day14_集合框架1(ArrayList,LinkedList,HashSet)

我的梦境 提交于 2020-03-21 04:15:34
1.集合框架大致示意图: 2.集合概述: /* 数据 -封装在-> 对象 -存储在-> 集合 集合类: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对 多个对象的操作,就对 对象进行存储,集合就是存储对象最常用的 一种方式 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的,只能存储同一类型对象 集合长度是可变的. 数组中可以存储基本数据类型,集合只能存储对象 集合类的特点: 集合只用于存储对象 集合长度是可变的 集合可以存储不同类型的对象 关于数组: 例如: Person p=new int[3]; p[0]=new Person("zhangsan"); ... 为什么有这么多容器?(集合) 因为每一个容器对数据的存储方式都有不同 这个存储方式称为数据结构. */ 3.Collection中的一些方法: /* 1.add方法的参数类型是Object,以便于接收任意类型的对象 2.集合中存储的都是对象的地址(引用) */ import java.util.*; class CollectionDemo { public static void sop(Object obj) { System.out.println(obj); } public static void base_method() { ArrayList

java中常用的数据结构--Collection接口及其子类

青春壹個敷衍的年華 提交于 2020-03-21 03:49:29
   java中有几种常用的数据结构,主要分为Collection和map两个主要接口 (接口只提供方法,并不提供实现),而程序中最终使用的数据结构是继承自这些接口的数据结构类。  一、集合和数组的区别 二、Collection集合和Map集合 三、Collection接口 1、定义 public interface Collection<E> extends Iterable<E> {} 它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。 Collection接口的所有子类(直接子类和间接子类)都必须实现2种构造函数:不带参数的构造函数 和 参数为Collection的构造函数。带参数的构造函数,可以用来转换Collection的类型。 2、Collection集合的API 四、List 1、定义:    List是一个继承于Collection的接口,即List是集合中的一种。List是有序的队列,List中的每一个元素都有一个索引;第一个元素的索引值是0,往后的元素的索引值依次+1。和Set不同,List中允许有重复的元素。 public interface List<E> extends Collection<E> {} 2、List接口的实现类 (1)ArrayList:底层数据结构是 数组

iOS数据存储

一笑奈何 提交于 2020-03-18 05:06:53
【reference】http://www.infoq.com/cn/articles/data-storage-in-ios 谈到数据储存,首先要明确区分两个概念,数据结构和储存方式。所谓数据结构就是数据存在的形式。除了基本的NSDictionary、NSArray和NSSet这些对象,还有更复杂的如:关系模型、对象图和属性列表多种结构。而存储方式则简单的分为两种:内存与闪存。内存存储是临时的,运行时有效的,但效率高,而闪存则是一种持久化存储,但产生I/O消耗,效率相对低。把内存数据转移到闪存中进行持久化的操作称成为归档。 二者结合起来才是完整的数据存储方案,我们最常谈起的那些:SQLite、CoreData、NSUserDefaults等都是数据存储方案。当然在这些框架提供的方案之外,我们自己也可以按照个性化需求订制方案。这些存储方案侧重不同,支持的形式和方式也各不相同,在不同的使用场景下表现也是各有优劣。但万变不离其宗,无论什么方案都可以用下图来解释。 图1,存储方案示意图 以下将对四种存储方式进行详细的介绍: NSUserDefaults,用于存储配置信息 SQLite,用于存储查询需求较多的数据 CoreData,用于规划应用中的对象 使用基本对象类型定制的个性化缓存方案 用NSUserDefaults存储配置信息

Java内存模型

非 Y 不嫁゛ 提交于 2020-03-17 08:59:43
Java内存模型 原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文 档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多。一个开发Java的开发者,一旦了解了 JVM内存模型就能够更加深入地了解该语言的语言特性,可能这个章节更多的是概念,没有太多代码实例,所以希望读者谅解,有什么笔误来Email告知: silentbalanceyh@126.com , 本文尽量涵盖所有Java语言可以碰到的和内存相关的内容,同样也会提到一些和内存相关的计算机语言的一些知识,为草案。因为平时开发的时候没有特殊情况 不会进行内存管理,所以有可能有笔误的地方比较多,我用的是Windows平台,所以本文涉及到的与操作系统相关的只是仅仅局限于Windows平台。不 仅仅如此,这一个章节牵涉到的多线程和另外一些内容并没有讲到,这里主要是结合JVM内部特性把本章节作为核心的概念性章节来讲解,这样方便初学者深入以 及彻底理解Java语言) 本文章节: 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介    i.内存模型概述   Java平台自动集成了 线程 以及 多处理器技术 ,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对 多种异构平台的平台独立性

ceph对象存储

 ̄綄美尐妖づ 提交于 2020-03-17 07:38:30
https://edu.51cto.com/center/course/lesson/index?id=333061 https://www.cnblogs.com/xd502djj/p/3604783.html 1、配置,主要是 Access Key ID 和 Secret Access Key 1 s3cmd --configure 2、列举所有 Buckets。(bucket 相当于根文件夹) 1 s3cmd ls 3、创建 bucket,且 bucket 名称是唯一的,不能重复。 1 s3cmd mb s3://my-bucket-name 4、删除空 bucket 1 s3cmd rb s3://my-bucket-name 5、列举 Bucket 中的内容 1 s3cmd ls s3://my-bucket-name 6、上传 file.txt 到某个 bucket, 1 s3cmd put file.txt s3://my-bucket-name/file.txt 7、上传并将权限设置为所有人可读 1 s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt 8、批量上传文件 1 s3cmd put ./* s3://my-bucket-name/ 9、下载文件 1 s3cmd get s3://my

09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet

馋奶兔 提交于 2020-03-16 20:38:28
09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSetimport com.fly.bean.Student; public class Demo1_Array { public static void main(String[] args) { Student[] arr = new Student[5]; //创建引用类型数组 arr[0] = new Student("张三", 23); arr[1] = new Student("李四", 24); arr[2] = new Student("王五", 25); for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); /*Student [name=张三, age=23] Student [name=李四, age=24] Student [name=王五, age=25] null null*/ } } } 集合框架: 集合的由来 * 数组长度是固定,当添加的元素超过了数组的长度时需要对数组重新定义,太麻烦,java内部给 我们提供了集合类,能存储任意对象,长度是可以改变的

java集合类

天涯浪子 提交于 2020-03-16 20:10:55
Java集合类 1.简介: java集合类包含在java.util包下 集合类存放的是对象的引用,而非对象本身。 集合类型主要分为Set(集),List(列表),Map(映射)。 1.1 java集合类图 从上述类图,自己整理出主要内容是如下: 2.集合详解 2.1 HashSet HashSet是Set接口的一个子类 主要的特点是: 里面不能存放重复元素,元素的插入顺序与输出顺序不一致 采用散列的存储方法,所以没有顺序。 代码实例:HashSetTest package cn.swum; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; public class HashSetTest { public static void main(String[] args) { Set set = new HashSet(); set.add("a"); set.add("b"); set.add("c"); set.add("d"); set.add("f"); //插入重复元素,测试set是否可以存放重复元素 set.add("a"); set.add(null); //插入重复null,看结果是否可以存放两个null

java堆内存与栈内存区别

╄→尐↘猪︶ㄣ 提交于 2020-03-16 14:04:26
栈(stack): 是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域). 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的。所以栈内存中存放的都是方法运行中声明的基本数据类型,如short,int,long等,他们的长度都是一定的,并且生存期都是随着方法的结束而结束。 堆(heap): 堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢,C中的malloc语句所产生的内存空间就在堆中. 在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象 .所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用.堆内存中数据的生存期是由java的回收机制确定的,当栈中没有引用指向堆中的内存的时候,内存就会被回收。 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆