字节数组

从Java对象布局markword看syncronized的本质

自作多情 提交于 2020-04-05 15:55:15
可以通过以下工具来查看Java对象的布局:JOL=Java Object Layout。 <!-- https://mvnrepository.com/artifact/org.openjdk.jol/jol-core --> <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.10</version> </dependency> 先看下在JVM中,一个引用的长度占用多少字节: import org.openjdk.jol.vm.VM; public class JavaObjectLayout { public static void main(String[] args) { System.out.println("------------VM details---------------"); System.out.println(VM.current().details()); } } 这个details()方法由JOL类库中的HotspotUnsafe类实现: 运行结果: 运行结果中可以看到: 1.JVM是64位的HotSpot 2.默认开启oop(Ordinary Object Pointer,普通对象指针)压缩,可设置JVM参数-XX:

C#结构体和字节数组的转换

岁酱吖の 提交于 2020-04-02 05:58:37
在写 C#TCP 通信程序时,发送数据时,只能发送 byte 数组,处理起来比较麻烦不说,如果是和 VC6.0 等写的程序通信的话,很多的都是传送结构体,在 VC6.0 中可以很方便的把一个 char[] 数组转换为一个结构体,而在 C# 却不能直接把 byte 数组转换为结构体,要在 C# 中发送结构体,可以按以下方法实现: ( 1 )定义结构体: // 命名空间 using System.Runtime.InteropServices; // 注意这个属性不能少 [StructLayoutAttribute(LayoutKind.Sequential,CharSet=CharSet.Ansi,Pack=1)] struct TestStruct { public int c; // 字符串, SizeConst 为字符串的最大长度 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string str; //int 数组, SizeConst 表示数组的个数,在转换成 //byte 数组前必须先初始化数组,再使用,初始化 // 的数组长度必须和 SizeConst 一致,例 test = new int[6]; [MarshalAs(UnmanagedType.ByValArray, SizeConst =

2、指针的算术运算

筅森魡賤 提交于 2020-04-01 03:18:51
指针可以加上或减去一个整数。 指针的这种运算的意义和通常的数值的加减 运算的意义是不一样的 ,以单元为单位。 例如: 例二: char a[20]; int *ptr=(int *)a; // 强制类型转换并不会改变 a 的类型 ptr++; 在上例中,指针 ptr 的类型是 int*, 它指向的类型是 int ,它被初始化 为指向整型变量 a 。接下来的第 3 句中, 指针 ptr 被加了 1 ,编译器是这样 处理的:它把指针 ptr 的值加上了 sizeof(int) ,在 32 位程序中,是被加上 了 4 ,因为在 32 位程序中, int 占 4 个字节。 由于地址是用字节做单位的, 故 ptr 所指向的地址由原来的变量 a 的地址向高地址方向增加了 4 个字节。 由于 char 类型的长度是一个字节,所以,原来 ptr 是指向数组 a 的第 0 号 单元开始的四个字节,此时指向了数组 a 中从第 4 号单元开始的四个字节。 我们可以用一个指针和一个循环来遍历一个数组,看例子: 例三: int array[20]={0}; int *ptr=array; for(i=0;i<20;i++) { (*ptr)++; ptr++ ; } 这个例子将整型数组中各个单元的值加 1 。由于每次循环都将指针 ptr 加 1 个单元 ,所以每次循环都能访问数组的下一个单元。 再看例子:

Java面试知识点总结

纵饮孤独 提交于 2020-03-30 16:09:29
Java面试知识点总结 本篇文章会对面试中常遇到的Java技术点进行全面深入的总结,帮助我们在面试中更加得心应手,不参加面试的同学也能够借此机会梳理一下自己的知识体系,进行查漏补缺(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大)。本文的问题列表来自于http://www.nowcoder.com/discuss/3043,在此感谢原作者的无私分享:) 1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么? (1)boolean boolean数据类型非true即false。这个数据类型表示1 bit的信息,但是它的大小并没有精确定义。 《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出 boolean类型单独使用是4个字节,在数组中又是1个字节。 那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗

Ehcache计算Java对象内存大小

最后都变了- 提交于 2020-03-24 06:25:00
在EHCache中,可以设置maxBytesLocalHeap、maxBytesLocalOffHeap、maxBytesLocalDisk值,以控制Cache占用的内存、磁盘的大小(注:这里Off Heap是指Element中的值已被序列化,但是还没写入磁盘的状态,貌似只有企业版的EHCache支持这种配置;而这里maxBytesLocalDisk是指在最大在磁盘中的数据大小,而不是磁盘文件大小,因为磁盘文中有一些数据是空闲区),因而EHCache需要有一种机制计算一个类在内存、磁盘中占用的字节数,其中在磁盘中占用的字节大小计算比较容易,只需要知道序列化后字节数组的大小,并且加上一些统计信息,如过期时间、磁盘位置、命中次数等信息即可,而要计算一个对象实例在内存中占用的大小则要复杂一些。 计算一个实例内存占用大小思路 在Java中,除了基本类型,其他所有通过字段包含其他实例的关系都是引用关系,因而我们不能直接计算该实例占用的内存大小,而是要递归的计算其所有字段占用的内存大小的和。在Java中,我们可以将所有这些通过字段引用简单的看成一种树状结构,这样就可以遍历这棵树,计算每个节点占用的内存大小,所有这些节点占用的内存大小的总和就当前实例占用的内存大小,遍历的算法有:先序遍历、中序遍历、后序遍历、层级遍历等。但是在实际情况中很容易出现环状引用(最简单的是两个实例之间的直接引用

字符流;字符输入流;字符输出流;字符流的拷贝;文件续写;字符高效输入缓冲流;字符高效输出缓冲流 (Java Day20)

♀尐吖头ヾ 提交于 2020-03-22 02:14:04
一,字符流 编码:把字符按照一定的方式转换为对应的数字,【就是把内存中的资源存放到磁盘文件的过程;磁盘文件中存放的都是数字【以字节的方式存储的】】 解码:把文件中的存储的数字按照一定的方式转换为对应的字符 编码使用的转换方式和解码使用的转换方式如果一致的看到的就是正常的内容 编码使用的转换方式和解码使用的转换方式如果不一致看到的就是非正常的内容【乱码】 使用字节流处理字符【字符串】的问题 使用字节流写字符【字符串】 可以使用,但是需要先把字符串【字符】转成字节数组,再存储到文件中,比较麻烦 ​ 字符--->字节数---->进行写出【写出到文件】 2. 使用字节流读取字符 如果是纯英文,可以一次读取一个字节或者读多个没有影响 如果是纯中文,可以一次读取两个字节(GBK)那就没有毛病,读取三个字节就会出 ​ 3. 现乱码的现象 如果是中英文混杂,每次不知道读取多少个字节,因此无论字节数组准备多大,都有可能会出现乱码【无法避免乱码的现象】导致字节流操作纯文本文件的时候会出现乱码的现象 代码示例 package com.ujiuye.demo; import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class Demo { public static void main

C语言总结2

廉价感情. 提交于 2020-03-19 08:42:36
12).预处理指令 1. 什么叫做预处理代码. 以#开头的代码就是预处理代码 #warning #import 2. 手写1个C程序的步骤.(面试题) 1>编写代码 2>编译 1)执行.c中的预处理代码 2)检查语法 3>链接 4>执行 3. 预处理指令的分类.(面试题) ****** 1>文件包含指令 #include 2>宏定义 #define (用来替换代码) 3>条件编译 #if (满足一定的条件才编译) 4. 预处理指令的特点. 1>都是以#开头 2>后面没有分号 3>在编译的时候,检查语法之前进行 "注意 以#开头的代码就是预处理代码 13).sizeof运算符 sizeof运算符的作用? 作用:计算常量,变量在当前系统上内存中所占的字节数 sizeof (数据类型) sizeof (变量)-----用的最多! sizeof (常量) 注意, char类型的变量在内存中占1个字节; char类型的常量在内存中占4个字节; 综上所述,为了安全起见,sizeof后面最好加上括号! 14).按位异或 ^ 异或运算 不同为1,相同为0 注意: 1 相同整数相^的结果是0; 2 一个整数^另一个整数2次结果不变 ; 3^2^2 = 3 3 整数相^跟顺序无关 3^2^3 = 2^3^3 = 2 15). 按位左移或者右移 1,按位左移运算. << 参与按位左移运算的二进制数据.

C语言笔记(十七)——sizeof()、strlen()与str.length()

╄→尐↘猪︶ㄣ 提交于 2020-03-10 12:20:22
求数组长度: 1、sizeof()关键字: 根据sizeof ()关键字可以获得参数(数组、指针、 数据类型、对象或者函数 )在内存中 所占的字节数 ,所以数组所占总的字节数除以一个元素所占的字节数就是数组的长度。如下代码所示,数组 a 是 int 型的,每个元素占 4 字节,所以长度为 10 的数组在内存中所占的字节数就是 40。而总的字节数除以一个元素所占的字节数就是数组的长度,如下面这个程序: # include <stdio.h> int main() { int a[10] = {0, 3, 5, 6, 9}; int cnt = sizeof(a) / sizeof(int); printf("cnt = %d\n", cnt); return 0; } 运行结果: 注意1 :在 给出数组大小 后,sizeof 求 出的是 数组的总长度 ,而不是数组中存放的 有意义的数据 的个数 。 可以采用 不给数组大小 的方法来避免这个问题,比如下例中的数组b: # include <stdio.h> int main() { int a[10] = {0, 3, 5, 6, 9}; int b[] = {1,3,5,4}; int cnt = sizeof(a) / sizeof(int); int cnt1 = sizeof(b) / sizeof(int); printf(

字节跳动面试官这样问我HashMap,我刚好都会!

↘锁芯ラ 提交于 2020-03-09 10:46:05
前言 作为一个在互联网公司面一次拿一次Offer的面霸,打败了无数竞争对手,每次都只能看到无数落寞的身影失望的离开,略感愧疚( 请允许我使用一下夸张的修辞手法 )。 于是在一个寂寞难耐的夜晚,我痛定思痛,决定开始写互联网技术栈面试相关的文章,希望能帮助各位读者以后面试势如破竹,对面试官进行360°的反击,吊打问你的面试官,让一同面试的同僚瞠目结舌,疯狂收割大厂Offer! 所有文章的名字只是我的噱头,我们应该有一颗谦逊的心,所以希望大家怀着空杯心态好好学,一起进步。 正文 一个婀娜多姿,穿着衬衣的小姐姐,拿着一个精致的小笔记本,径直走过来坐在我的面前。 看着眼前这个美丽的女人,心想这不会就是Java基础系列的面试官吧,真香。 不过看样子这么年轻应该问不出什么深度的吧,嘻嘻。(哦?是么😏) 小伙子,听前面的面试官说了,你Redis和消息队列都回答得不错,看来还是有点东西。 美丽迷人的面试官您好,您见笑了,全靠看了敖丙的《吊打面试官》系列,不然我还真的回答不上很多原本的知识盲区,他真的有点东西。 面试官心想:哦,吊打面试官是么,那今天我就让你知道,吊打这两个字怎么写的吧,年轻人啊,提前为你感到惋惜。 嗯嗯小帅比,虽然前面的技术栈没啥太大的瑕疵,不过未来很长的一段时间我会用一期期的基础教你做人的,你要准备好哟! 好了我们开始今天的面试吧,小伙子你了解数据结构中的HashMap么

C语言-怎么找115资源

眉间皱痕 提交于 2020-03-04 22:21:54
C 语言的起源与发展 C 语言的开发 Dennis M. Ritchie Bell Labs/Lucent Technologies Murray Hill, NJ 07974 USA 摘要 C 编程语言是在 1970 年代早期作为初创的 Unix 操作系统的系统实现语言而设计的。起源于无类型的 BCPL 语言,它发展出了类型结构;它建立在一个小机器上、作为改善其贫乏的编程环境的工具,它现在已经成为占主导地位的语言之一。本文研讨它的演变。   注意: *Copyright 1993 Association for Computing Machinery, Inc. This electronic reprint made available by the author as a courtesy. For further publication rights contact ACM or the author. This article was presented at Second History of Programming Languages conference, Cambridge, Mass., April, 1993. It was then collected in the conference proceedings: History of Programming