对象实例化对象创建方式new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器Constructor的newInstance(XXX):反射的方式,可以调用空参的,或者带参的构造器使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接
执行引擎的概述执行引擎是Java虚拟机核心的组成部分之一,属于JVM的下层,里面包括 解释器、及时编译器、垃圾回收器。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式
本地方法本地方法:Native Method"A native method is a Java method whose implementation is provided by non-java code."(本地方法是一个非Java的方法,它的具体实现是非Java代码的实现)一个Native Method是一个Java调用非Java代码的接囗。该方法的实现由非Java语言实现,这个特征并非
概述Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法接口的调用。本地方法栈是线程私有的。溢出问题允许被实现成固定或者是可动态扩展的内存大小(和虚拟机栈有相同的溢出问题)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 栈溢出异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创
堆概述一个进程只有一个JVM,一个JVM实例只存在一个堆内存,一个进程有多个线程,共享同一个堆空间,堆是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓
栈帧栈帧的内部结构每个栈帧中存储着:局部变量表(Local Variables)操作数栈(operand Stack)(或表达式栈)动态链接(DynamicLinking)(或指向运行时常量池的方法引用)方法返回地址(Return Address)(或方法正常退出或者异常退出的定义)一些附加信息并行每个线程下的栈都是私有的,因此每个线程都有自己各自的栈,并且每个栈里面都有很多栈帧,栈帧的大小主要由
虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。栈是运行时的单位,堆是存储的单位。Java虚拟机栈Java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈,是线程私有的。每个线程在创建时都会创建一个虚拟机栈,
程序计数器概述JVM中的程序计数寄存器(Program Counter Register),或译为PC寄存器/PC计数器/指令计数器/程序钩子,是一块很小的内存空间,内存占用几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法。程序计数器会存储当前线程正
运行时数据区及线程运行时数据区概述当通过前面的:类的加载-> 链接(验证 -> 准备 -> 解析) -> 初始化 这几个阶段完成后,就会用到执行引擎对类进行使用,同时执行引擎将会使用到运行时数据区。内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效
类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(CAFE BABE)。ClassLoader只负责class文件的加载,至于它是否可以运行,则由执行引擎(Execution Engine)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常
虚拟机与Java虚拟机虚拟机虚拟机(Virtual Machine),是一台虚拟的计算机。是一款软件,用来执行一系列虚拟计算机指令。虚拟机大体可分为系统虚拟机和程序虚拟机。系统虚拟机:Visual Box,VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。程序虚拟机:程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Jav
ACL简介Redis ACL是Access Control List(访问控制列表)的缩写,该功能允许根据可以执行的命令和可以访问的键来限制某些连接。在Redis 5版本之前,Redis 安全规则只有密码控制还有通过rename 来调整高危命令。比如 flushdb , KEYS* , shutdown 等。Redis 6 则提供ACL的功能对用户进行更细粒度的权限控制;接入权限:用户名和密码可以
缓存穿透问题描述key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会压到数据源,从而可能压垮数据源。比如用一个不存在的用户id获取用户信息,不论缓存还是数据库都没有,若黑客利用此漏洞进行攻(attack)击可能压垮数据库。解决方案一个一定不存在缓存及查询不到的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据
什么是主从复制主机数据更新后根据配置和策略, 自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主。主从复制的作用读写分离,性能扩展容灾快速恢复配置主从复制拷贝多个redis.conf文件include(写绝对路径)开启daemonize yesPid文件名字pidfile指定端口portLog文件名字dump.rdb名字dbfilenameAppendonly
问题容量不够,redis如何进行扩容?并发写操作, redis如何分摊? 另外,主从模式,薪火相传模式,主机宕机,导致ip地址发生变化,应用程序中配置需要修改对应的主机地址、端口等信息。早前通过代理主机来解决,在redis3.0中提供了解决方案:无中心化集群配置。集群Redis 集群实现了对Redis的水平扩容,即启动N个redis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/
Redis 提供了2个不同形式的持久化方式。RDB(Redis DataBase)AOF(Append Of File)RDB(Redis DataBase) RDB,Redis DataBase是在指定的时间间隔内将内存中的数据集快照写入磁盘, 即Snapshot快照,恢复时将快照文件直接读到内存里。备份执行方式Redis会单独创建(fork)一个子进程来进行持久化,会先将数据写入到 一个临时文
Redis的事务定义Redis事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行。事务在执行的过程中,不会被其他客户端发送来的命令请求所打断。Redis的事务作用Redis事务的主要作用就是串联多个命令防止别的命令插队。Multi、Exec、discard从输入Multi命令开始,输入的命令都会依次进入命令队列中,但不会执行,直到输入Exec后,Redis会将之前的命令队列中的命令
Redis官方对Java 语言的封装框架推荐的有十多种,主要是Jedis 、Redisson。Jedis 和 Redisson 都是Java中对Redis操作的封装。Jedis 只是简单的封装了 Redis 的API库,可以看作是Redis客户端,它的方法和Redis 的命令很类似。Redisson 不仅封装了 redis ,还封装了对更多数据结构的支持,以及分布式锁等功能,相比于Jedis 更加
欧姆龙(OMRON)CS/CJ系列PLC多设备实战调试
Redis6新数据类型Bitmaps现代计算机用二进制(位)作为信息的基础单位, 1个字节等于8位,例如“abc”字符串是由3个字节组成,但实际在计算机存储时将其用二进制表示,“abc”分别对应的ASCII码分别是97、98、99,对应的二进制分别是01100001、 01100010和01100011,如下图合理地使用操作位能够有效地提高内存使用率和开发效率。Redis提供了Bitmaps这个“
Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。Redis的发布和订阅发布订阅图示客户端可以订阅频道,如下图给这个频道发布消息后,消息就会发送给订阅的客户端发布订阅命令行实现打开一个客户端订阅channel1 SUBSCRIBE channel1打开另一个客户端,给channel1发
redis数据类型操作命令速查Redis键(key)常用命令查看当前库所有key:keys * 判断某个key是否存在:exists key 查看key类型:type key 删除指定的key数据:del key 根据value选择非阻塞删除(仅将keys从keyspace元数据中删除,真正的删除会在后续异步操作。):unlink key设置key过期时间(秒):expire key
概述简介Redis是一个开源的key-value存储系统。Redis使用单线程+多路IO复用技术(执行命令是单线程)默认16个数据库,初始默认使用0号库,使用命令select <dbid>来切换数据库。如: select 8 。统一密码管理,所有库同样密码。dbsize查看当前数据库的key的数量flushdb清空当前库flushall通杀全部库与Memcached三点区别 Memca
Web1.0时代Web1.0的时代,数据访问量很有限,用一夫当关的高性能的单点服务器可以解决大部分问题。Web2.0时代随着Web2.0的时代的到来,用户访问量大幅度提升,同时产生了大量的用户数据。加上后来的智能移动设备的普及,所有的互联网平台都面临了巨大的性能挑战。解决CPU及内存压力解决IO压力NoSQL数据库概述NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号