Java 为什么使用 UTF-16 而不是更节省内存的 UTF-8?

因为当时 Java 选择的是 UCS-2,是一个定长的编码,在当时以单个码元能表示所有字符,以下标获取字符的开销基本等同于在数组中索引一个字符,用起来是最方便的,多占用的内存大小也是可以接受的。到了后来 UCS-2 无法表示所有 Unicode 字符的时候,过渡到了兼容它的 UTF-16 上也是最自然以及迁移成本最低的选择,这很好理解。至于 UTF-16 浪费内存的问题,在 JEP 254 Compact Strings 中优化了这个问题,Java 9 已经实现了这个 JEP。翻翻源码就能看到,...阅读全文

Unicode与UTF-8/UTF-16/UTF-32的区别 - 刘宝成

Unicode与UTF-8/UTF-16/UTF-32的区别 Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题 (implantation head-ache's),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。 因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符 是以8位序列来编码的,...阅读全文

Thrift源码分析(TThreadedSelectorServer)

前言 再通过对THsHaServer的源码学习后,我们知道THsHaServer缺点为主线程仍然需要完成所有socket的监听接收(accept)、数据读取和数据写入操作(read/write)。当并发请求数较大时,且发送数据量较多时,负责监听的主线程就只有一个。监听socket上新连接请求不能被及时接受。 ##TThreadedSelectorServer TThreadedSelectorServer是对THsHaServer的一种扩充与完善,它将selector中的读写IO事件(read/...阅读全文

掘金 2020-02-26 00:00 掘金

漫谈gRPC - 云+社区

本文概括性的介绍gRPC,包括gRPC的起源,核心特性,生态体系,以及一些知名开源软件对gRPC的使用,最后总结gRPC与netty、dubbo等框架的区别,目的是让读者从整体上对gRPC有一个相对全面的认知。1 gRPC起源十多年来,Google一直在使用一个名为Stubby的通用RPC基础架构来连接在数据中心内部和跨越数据中心运行的大量微服务,其内部系统长期以来一直接受微服务架构的普及。拥有统一的跨平台RPC基础架构,可以在整个系统范围内推广效率,安全性,可靠性和行为分析,这对于支持Goog...阅读全文

腾讯云 2019-06-29 00:00 腾讯云

如何从C端产品经理成功转型到B端

最近和很多之前做互联网产品的小伙伴交流:在如今消费互联网红利减少,产业互联网逐渐兴起的时候,想从事B端产品经理,不知道是否可以?说实话,从C端到B端并非完全不可能,我本人也是这样转型经历。只是二者的侧重点不同,所以对于想从事B端产品经理的同学来说,择业时不妨从以下几方面考量。一、选择感兴趣的行业沉淀1. 行业属性起初做产品的时候,往往觉得不受行业限制。因为做产品的方法论是通用的。这种情况在C端的时候可能还相对适用。因为受众群体直接是普通大众,懂人心、知人性,或许就能做出个好产品。但如今,产业互联...阅读全文

java技术圈 2020-06-10 15:33:21 CORNERSTONE

用户进程缓冲区和内核缓冲区

用户进程缓冲区和内核缓冲区 发表于 2017-02-01   |   分类于 操作系统   |   常常听到有程序员会跟你讨论:“我们在读写文件的时候,系统是有缓存的”。但实际上有一部分人把用户进程缓冲区和系统空间的缓冲区的概念混淆了,包括这两种缓冲区的用法和所要解决的问题,还有其它类似的概念。这篇博客就来区分一下不同的缓冲区概念。 这篇博客指针对类unix平台,windows的我并不熟悉,但我觉得应该差不多。 用户进程与操作系统的关系首先我用一张图来解释“用户进程和操作系统的关系” 这是一个计...阅读全文

Pulpcode 2017-02-01 00:00 Pulpcode

一次系统调用开销到底有多大?

首先说说系统调用是什么,当你的代码需要做IO操作(open、read、write)、或者是进行内存操作(mmpa、sbrk)、甚至是说要获取一个系统时间(gettimeofday),就需要通过系统调用来和内核进行交互。无论你的用户程序是用什么语言实现的,是php、c、java还是go,只要你是建立在Linux内核之上的,你就绕不开系统调用。图1 系统调用在计算机系统中的位置大家可以通过strace命令来查看到你的程序正在执行哪些系统调用。比如我查看了一个正在生产环境上运行的nginx当前所执行的...阅读全文

知乎 2019-10-23 00:00 知乎

linux是怎样分配内存的

我们常说的内存容量,比方说我的笔记本电脑内存就是8GB,其实指的是物理内存。物理内存也称为主存,大多数计算机用的主存都是动态随机访问内存(DRAM)。只有内核才可以直接访问物理内存。 linux内核给每个进程都提供了一个独立的虚拟地址空间,并且这个地址空间是连续的,这样,进程就可以很方便地访问内存,更确切地说是访问虚拟内存。 虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长(也就是单个CPU指令可以处理数据的最大长度)的处理器,地址空间的范围也不同。比如最常见的32位和64位系统。如...阅读全文

JAVA8 之 Lambda 表达式与方法引用(二) - 当年明月123

在上一章我们介绍了函数式编程的概念和函数式接口。Lambda 表达式就是函数式编程的具体体现,它需要借助函数式接口才能应用在 Java 语言中。 定义 在编程语言中,lambda 表达式是一种用于指定匿名函数或者闭包的运算符。Lambda 可以很清晰地表达一个匿名函数,可以被传递。有了 Lambda 表达式之后,Lambda 表达式为 Java 添加了缺失的函数式编程特性,使我们能将函数当作一等公民看待。 在将函数作为一等公民的语言中,Lambda 表达式的类型是函数。但在 Java 中,Lam...阅读全文

博客园 2020-01-01 13:20 博客园

JAVA反序列化 - 反射机制

推荐阅读时间:30min 全文字数:1w 前言 真正反序列化漏洞的利用,肯定需要了解java反射原理。因为java反序列化的payload大多与反射机制密切相关。 那么这篇文章就是主要讲述反射机制,算是基础知识。 除了反射机制之外,后续还基于commons-collections链最后的反射机制触发点,进行了详细的反射机制特性的绕过说明。由于它与反射机制密切相关,就放在这边进行统一归纳理解。 可以配合本人的另一篇文章commons-collections食用 java反射机制 在Java中的反射...阅读全文

先知社区 2020-01-03 09:21 先知社区

JVM运行时内存数据区域

JVM运行时内存数据区域 2018-01-20 Tommy.Tesla JVM 虚拟机栈  方法区  Java堆  运行时常量池 1 讨论背景 周志明老师写的《深入理解Java虚拟机》应该很多程序员都读过,第二章中阐述了Java虚拟机在执行Java程序的过程中是如何管理内存的,以及这些内存是如何被划分成更细的逻辑区域的。如下图所示,按照书中的论述JVM运行时数据区域包含以下几个数据区[1]。 按照《Java虚拟机规范(Java SE 7版)》,各区域的功能简要介绍如下: 程序计数器:各线程私有。...阅读全文

tbwork.org 2018-01-20 00:00 tbwork.org

11. iostat 监视I/O子系统 — Linux Tools Quick Tutorial

实例4:查看设备使用率(%util)和响应时间(await)¶ /root$iostat -d -x -k 1 1 Linux 2.6.32-279.el6.x86_64 (colin) 07/16/2014 _x86_64_ (4 CPU) Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util sda 0.02 7.25 0.04 1.90 0.74 35.47 37.15 0.04 19.1...阅读全文

linuxtools-rst.readthedocs.io 2020-06-03 21:11 linuxtools-rst. 等

产品从0到1的六个关键要素

怎么提高软件研发项目的成功率?影响项目成功的因素有很多方面,不同角色定义项目成功的标准也有所不同。 在IT行业,软件产品研发超出计划时间或成本的情况非常普遍,但是如果最终项目得以技术实现,而且被客户接受,也算成功。 不过,企业还是应该根据自己的实际情况制定有利于企业发展的项目成败标准,比如项目延期不超过20%进度算达标这样的指标。 以下从项目目标、项目计划、项目监控、项目沟通等几个方面总结获得软件研发项目成功的6个关键要素。 ![image.png](https://im...阅读全文

java技术圈 2020-06-02 15:59:21 CORNERSTONE

为什么你的项目总是延期?

随着项目管理在企业中的广泛应用,它对于企业内部效率以及经济效益的提升扮演着越来越重要的角色。 有调查分析显示,使用软件辅助管理项目的企业中,项目可以顺利验收的比率是92.5%,而不使用软件管理的,项目成功率只有72.7%。 保质保量按时完成项目是每个项目管理者最基本的目标,但在实际项目开展工作中,类似以下情况导致工期延时的例子比比皆是。企业应该怎样做才能使项目如期按质按量完成? 小王是某小公司的项目经理,前段时间公司在筹备一个内部项目,项目正式实施后被公司任命为项目经理。 ...阅读全文

java技术圈 2020-06-01 15:50:17 CORNERSTONE

Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖? - 江南一点雨

前两天被人问到这样一个问题: “松哥,为什么我的 Spring Boot 项目打包成的 jar ,被其他项目依赖之后,总是报找不到类的错误?” 大伙有这样的疑问,就是因为还没搞清楚可执行 jar 和普通 jar 到底有什么区别?今天松哥就和大家来聊一聊这个问题。 多了一个插件 Spring Boot 中默认打包成的 jar 叫做 可执行 jar,这种 jar 不同于普通的 jar,普通的 jar 不可以通过 java -jar xxx.jar 命令执行,普通的 jar 主要是被其他应用依赖,Sp...阅读全文

博客园 2019-07-09 11:44 博客园

深入对比TOML,JSON和YAML-云栖社区

Kubernetes集群安装文档-v1.6版本 店家小二 2018-12-15 18:16:55 浏览906 kubernetes使用traefik的https方式访问web应用 店家小二 2018-12-16 14:26:32 浏览1783 hugo-最好用的静态网站生成器 bt联盟 2016-01-27 19:56:02 浏览6336 CICD联动阿里云容器服务Kubernetes实践之GitLab CI篇(一) 流生 2018-11-23 10:51:01 浏览8420 ASP.NET C...阅读全文

阿里云 2018-06-21 14:22 阿里云

聊聊 maven 的 snapshot 和 metadata

Maven jar / pom download 分析。 碰上这个问题背景是:maven 中,snapshot 包是允许发布时覆盖的。那么有个问题就是,当: 依赖了 snapshot 版本的 jar 在环境执行某些操作,需要使用前面的 jar 这种情况下,maven 是如何判断是否更新本地 repository 中的 jar 呢? 基本流程按照 jar 的 version 类型不同,可以分为: SNAPSHOT RELEASE RELEASE 很简单,看 local 有就不会尝试去获取 remo...阅读全文

头头带你飞 2017-10-25 00:00 头头带你飞

Maven的Mirror和Repository 的详细讲解 —技术博客

1 Repository(仓库)1.1 Maven仓库主要有2种:remote repository:相当于公共的仓库,大家都能访问到,一般可以用URL的形式访问local repository:存放在本地磁盘的一个文件夹,例如,windows上默认是C:\Users\{用户名}\.m2\repository目录1.2 Remote Repository主要有3种:中央仓库:http://repo1.maven.org/maven2/ 私服:内网自建的maven repository,其URL是...阅读全文

www.sojson.com 2017-12-20 22:39 www.sojson.com

Maven仓库理解和优先级

5 Seven 2017 前言使用 maven 也有一段时间了,有时候在配置 repository,mirror,profile的时候,总会导致 jar 拉取不到。所以认真的分析了 maven 获取 jar 包时候的优先级。 Maven 仓库的分类仓库分类:本地仓库和远程仓库。Maven根据坐标寻找构件的时候,它先会查看本地仓库,如果本地仓库存在构件,则直接使用;如果没有,则从远程仓库查找,找到后,下载到本地。 1)本地仓库默认情况下,每个用户在自己的用户目录下都有一个路径名为.m2/repos...阅读全文

ShenWenFang 2018-06-03 00:00 ShenWenFang