对象存储

JVM

北城余情 提交于 2020-01-16 20:04:22
JVM 主要流程图 Java源码编译由以下三个过程组成: 分析和输入到符号表 注解处理 语义分析和生成class文件 编译时期-语法糖 语法糖可以看做是编译器实现的一些“小把戏”,这些“小把戏”可能使得效率大大提升 其中最值得说的就是泛型了,这个语法糖可以说被我们经常使用的 泛型只会在Java源码中存在,编译过后会被替换为原来的原生类型(Row Type,也称为裸类型)。这个过程叫做:泛型擦除 有了泛型这个语法糖后 代码更加简洁【不用强制类型转换】 程序更加强壮【只要编译时期没有警告,那么运行时期就不会出现ClassCastException】 可读性和稳定性【在编写集合的时候,就限定了类型】 JVM实现跨平台 至此,我们通过javac.exe编译器来编译我们的.java文件生成出.class文件 这些.class文件很明显是不能直接运行的,它不像C语音(编译cpp后生成exe文件直接运行) 这些.class文件是交由JVM来解析运行的 JVM是运行在操作系统之上的,每个操作系统的指令是不同,而JDK是区分操作系统的,只要你的本地系统装了JDK,这个JDK就是能够和当前系统兼容的。(jdk是区分平台的,class文件会被翻译成不同的平台的机器编码) class字节码运行在JVM之上,所以不用关系class字节码是在哪个操作系统编译的,只要符合JVM规范,那么

JavaScript变量存储浅析(二)

和自甴很熟 提交于 2020-01-15 06:50:35
Hello,上一篇( http://www.cnblogs.com/souvenir/p/4969399.html )我们简单的分享了JS中的变量存储原理,但是并未结束,我们漏掉了什么。 对了,就是关于对象的存储。   大家都知道,JavaScript中的变量类型分为两种,一种是基本数据类型,包括:undefined,null,Number,String,Boolean,另外一种就是对象。   两种数据类型的存储方式在JS中也有所不同。   另外, 内存分为栈区(stack)和堆区(heap),然后在JS中开发人员并不能直接操作堆区,堆区数据由JS引擎操作完成 ,那这二者在存储数据上到底有什么区别呢?   我们简单的通过下面这张图来分析:      JS中变量的定义在内存中包括三个部分:    变量标示   (比如上图中的Str,变量标示存储在内存的栈区)    变量值    (比如上面中的Str的值souvenir或者是obj1对象的指向堆区地址,这个值也是存储在栈区) 对象    (比如上图中的对象1或者对象2,对象存储在堆区)   也就是说,对于基本数据类型来说,只使用了内存的栈区。   对于上一篇中提到的问题来说, 1 var a = 100; 2 3 func(); 4 5 function func(){ 6 console.log(a); 7 var a=200; 8

jvm栈和堆详解

不想你离开。 提交于 2020-01-15 06:32:55
Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的 一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配 。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。 堆内存用于存放由new创建的对象和数组 。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。 引用变量是普通变量,定义时在栈中分配内存,引用变量在程序运行到作用域外释放。而数组&对象本身在堆中分配,即使程序运行到使用new产生数组和对象的语句所在地代码块之外,数组和对象本身占用的堆内存也不会被释放, 数组和对象在没有引用变量指向它的时候,才变成垃圾,不能再被使用,但是仍然占着内存,在随后的一个不确定的时间被垃圾回收器释放掉。这个也是java比较占内存的主要原因, 实际上,栈中的变量指向堆内存中的变量,这就是 Java 中的指针! java中内存分配策略及堆和栈的比较   1 内存分配策略  

学习openstack(八)

心不动则不痛 提交于 2020-01-15 03:48:36
一、OpenStack初探 1.1 OpenStack简介  OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立、运行自己的云计算和存储设施。Rackspace与NASA是最初重要的两个贡献者,前者提供了“云文件”平台代码,该平台增强了OpenStack对象存储部分的功能,而后者带来了“Nebula”平台形成了OpenStack其余的部分。而今,OpenStack基金会已经有150多个会员,包括很多知名公司如“Canonical、DELL、Citrix”等。 1.2 OpenStack的几大组件 1.2.1 图解各大组件之间关系 <img src="http://cdn.oldboyedu.com/wp-content/uploads/2016/02/wpid-631325ba70ea05d245906c576f3ef421_d1e1d1377e8365faa73252adddf150d2.png" alt="" title=""></p> 1.2.2 谈谈openstack的组件 OpenStack 认证(keystone)   Keystone为所有的OpenStack组件提供认证和访问策略服务,它依赖自身REST(基于Identity API)系统进行工作,主要对(但不限于)Swift、Glance、Nova等进行认证与授权。事实上

Java set接口之HashSet集合原理讲解

試著忘記壹切 提交于 2020-01-15 01:56:15
Set接口 java.util.set接口继承自Collection接口,它与Collection接口中的方法基本一致, 并没有对 Collection接口进行功能上的扩充,只是比collection接口更加严格了。 set接口中元素是无序的,并且都会以某种规则保证存入的元素不出现重复。 简述其特点就是: 不允许存储重复的元素 没有索引,也没有带索引的方法,不能使用普通的for循环遍历 Set接口有多个实现类,java.util.HashSet是其常用的子类 下面介绍一下set接口的实现类HashSet HashSet集合的介绍 java.util.HashSet是set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的(即存取顺序不一致)。 java.util.HashSet底层的实现其实是一个java.util.HashMap支持 HashSet是根据对象的哈希值来确定元素在集合中的存储位置的,因此具有良好的存取和查找性能。 保证元素唯一性的方式依赖于:hashCode与 equals方法。 代码简单理解 import java.util.HashSet; import java.util.Iterator; public class DemoHashSet { public static void main(String[] args) { // 创建set集合

Ceph日常运维管理和排错 -- <7>

孤街浪徒 提交于 2020-01-14 12:36:06
Ceph日常运维管理 集群监控管理 集群整体运行状态 [root@cephnode01 ~]# ceph -s cluster: id: 8230a918-a0de-4784-9ab8-cd2a2b8671d0 health: HEALTH_WARN application not enabled on 1 pool(s) services: mon: 3 daemons, quorum cephnode01,cephnode02,cephnode03 (age 27h) mgr: cephnode01(active, since 53m), standbys: cephnode03, cephnode02 osd: 4 osds: 4 up (since 27h), 4 in (since 19h) rgw: 1 daemon active (cephnode01) data: pools: 6 pools, 96 pgs objects: 235 objects, 3.6 KiB usage: 4.0 GiB used, 56 GiB / 60 GiB avail pgs: 96 active+clean id:集群ID health:集群运行状态,这里有一个警告,说明是有问题,意思是pg数大于pgp数,通常此数值相等。 mon:Monitors运行状态。 osd

c++ 线程局部变量thread_local

僤鯓⒐⒋嵵緔 提交于 2020-01-14 10:53:13
Linux 中的线程局部存储(一)   本章节转自: https://blog.csdn.net/cywosp/article/details/26469435   在Linux系统中使用C/C++进行多线程编程时,我们遇到最多的就是对同一变量的多线程读写问题,大多情况下遇到这类问题都是通过锁机制来处理,但这对程序的性能带来了很大的影响,当然对于那些系统原生支持原子操作的数据类型来说,我们可以使用原子操作来处理,这能对程序的性能会得到一定的提高。   那么对于那些系统不支持原子操作的自定义数据类型,在不使用锁的情况下如何做到线程安全呢?本文将从线程局部存储方面,简单讲解处理这一类线程安全问题的方法。 一、数据类型   在C/C++程序中常存在全局变量、函数内定义的静态变量以及局部变量,对于局部变量来说,其不存在线程安全问题,因此不在本文讨论的范围之内。全局变量和函数内定义的静态变量,是同一进程中各个线程都可以访问的共享变量,因此它们存在多线程读写问题。   在一个线程中修改了变量中的内容,其他线程都能感知并且能读取已更改过的内容,这对数据交换来说是非常快捷的,但是由于多线程的存在,对于同一个变量可能存在两个或两个以上的线程同时修改变量所在的内存内容,同时又存在多个线程在变量在修改的时去读取该内存值,如果没有使用相应的同步机制来保护该内存的话,那么所读取到的数据将是不可预知的

【JVM】内存管理-HotSpot虚拟机

房东的猫 提交于 2020-01-13 22:09:35
HotSpot虚拟机在Java堆中对象分配。布局和访问的全过程。 对象的创建 在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢? 当Java虚拟机遇到一条字节码new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。 如何划分空间 假设Java堆中内存是 绝对规整 的,所有被使用过的内存都被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为**“指针碰撞” (Bump ThePointer)。但如果Java堆中的内存并 不是规整 的,已被使用的内存和空闲的内存相互交错在一起,那就没有办法简单地进行指针碰撞了,虚拟机就必须维护一个列表,记录上哪些内存块是可用的,在分配的时候从列表中找到一块足够大的空间划分给对象实例,并更新列表上的记录

redis

坚强是说给别人听的谎言 提交于 2020-01-13 18:57:28
目录 概念 什么是NOSQL NOSQL和关系型数据库比较 非关系型数据库的优势 关系型数据库的优势 总结 主流的NOSQL产品 什么是Redis 下载安装 命令操作 redis的数据结构 字符串类型:string 哈希类型:hash(map格式) 列表类型:list(linkedlist格式) 集合类型:set 有序集合类型:sortedset 通用命令 持久化 Java客户端:Jedis 概述 Jedis操作redis中的数据结构 字符串类型 string 哈希类型 hash(map格式) 列表类型 list(linkedlist格式) 集合类型 set 有序集合 sortedset jedis连接池: jedisPool jedis连接池工具类 案例 概念 简介: ​ 随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。 概念: redis是一款高性能的NOSQL系列的非关系型数据库 什么是NOSQL NoSQL(NoSQL = Not Only SQL) ,意即“不仅仅是SQL”,是一项全新的数据库理念

四级数据库

流过昼夜 提交于 2020-01-13 08:22:00
一、 1.关系模型中数据的逻辑结构是一张二维表。 2.关系演算比关系代数具有更强的表达能力。 3.DBMS不可以直接处理基于非结构化复杂对象的值的选择条件及其他操作。 4.模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,即模式实际上是数据库数据的逻辑视图,逻辑模式的基础是数据模型。 5.SQL语言提供预定义的数据类型,除此之外,用户可以自行定义自己专用的数据类型。 6.数据仓库特点:面向主题的、数据是集成的、数据是相对稳定对的、数据是反映历史变化的。 二、 1.动态SQL语句的执行方式包括:立即执行方式和先准备后执行方式。 2.Armstrong公里的基本推理规则:自反律、增广律、传递率。 3.系统发生错误,进入一种不良状态(例如死锁),导致事务无法正常执行,但该事务可以在以后的某个时间重新执行。这种故障属于事务故障。 4.NOSQL数据库便于大量数据的写入处理、对简单查询可以快速返回结果、可方便处理表模式的变更,很多NOSQL系统不支持JOIN(连接)操作,Join操作需要再应用程序中实现。 5.逻辑数据模型有:层次模型、网状模型、关系模型、面向对象模型和对象关系模型。 6.SQL预定义数据类型包括:数值型、字符串型、位串型、时间型和布尔型。 7.记录的聚簇存放是指将不同类型的记录存放到相同的物理区域。 8.索引是数据库中一种非常重要的数据存取路径。 9