java中不同数据类型的内存分配方式

点击量:305

首先,在java中一共有两种数据类型,基本类型(primitive types)和引用类型(reference types)。

基本类型
java中的基本类型一共有八种,即byte, int, short, long, float, double, boolean, char。这些类型所申明的变量都是字面值,比如int a = 1,也就是说变量a指向的是1这个值,并没有对象和引用。值得注意的是,为了提高存储的速度,基本类型的变量内存都是存储在栈中的,而栈中的数据是是可以共享的。因此当我们同时声明两个同样字面值的变量时,编译器只会分配同一块内存。这个过程就是先在栈中查找是否存在这样的字面值,如果有则指向那块内存,如果没有就新分配一块内存。因此如果两个变量同时指向一个值,比如:int a = 1;int b = 2;当a的值被改变的时候,b的值并不会被改变,正如前面所说,a的值被改变时会重新去分配一块内存。
引用类型
主要包括一些对基本类型进行封装的类(又称为包装类),比如String,Integer,Double等,还有一些自定义的类。自定义类一般是显式的使用new关键字来告[……]

继续阅读

linux命令行usage格式解释

点击量:1049

经常要在Linux下面敲指令,但指令太多很多是忘了记,记了又忘。其实这些指令不用一个一个去记,每一个命令都会有帮助和提示。之前我一看到这些提示就头大,什么方括号,尖括号,省略号,杠之类的,今天静下心来专门学习这个东西,了解完之后发现还是比较简单的,这样遇到新的命令自己学习一下就知道如何使用了,不用再去一个一个查询和记忆了。

帮助的格式一般分以下几种:

方括号[]:表示可选参数,也就是说可以忽略,使用时没有方括号。

尖括号<>:表示必选参数,不能忽略,且尖括号里的输入只能是指定的option,使用时没有尖括号。

省略号…:表示重复多次的参数。

接下来我们以jstat为例,学习如何通过以上几个格式的含义一步步来学习使用一个新的指令。jstat是JDK下面一个用于监控JVM内存使用情况的轻量级工具,我们在命令行下面输入jstat时会输出以下信息,我们一行一行看。

[astd@VM_139_5_tlinux ~]$ jstat
invalid argument count【1】
Usage: jstat -help|-options【2】[……]

继续阅读

Java位操作符的一种简单应用

点击量:223

几乎每种语言都会有位操作符,左移右移、“与”“非”、“或”、“异或”等,这些操作符的意义大家肯定都知道,但是你可曾想过这些位操作符有什么实际的使用价值吗?今天来说下位操作符的一种简单应用。

在游戏开发工作中最常遇到的是对玩家状态的记录,比如奖励是否已经领取过,页面是否是否打开过等等。如果有连续的状态需要记录则他的形式大致是这样的:0100011,0表示没有,1表示有。最常见的做法是DB里使用一个varchar字段用来存储这样的状态:0100011。每次变更的时候找到那一位的状态,然后改下就好了,很直观。但其实我们也可以使用int类型来存储这种连续的状态,一个整数怎么能表示那么多的状态呢?答案是把十进制整数转换为二进制,然后通过位操作符去变更每一位二进制的状态。

问题:给定一个整数a,我们要改变她所表示的二进制的第n位的值为1。

首先构造一个特殊的二进制数,这个数第n位为1,其余都是0。代码表示就是:

int base= (int)Math.pow(2, n-1);

那如果我要改变第n位的值为1,只要将a|base即可。因为base的第n位是1,而其他位都是0,所以“或”之后第n位只能是1,而其他[……]

继续阅读

AWK统计不同列的数据

点击量:271

今天QA妹子在做数据查询的时候向我抱怨,说我们开发打的日志太不规范,导致她查询数据时相当麻烦,数据的原始格式是这样的:

1844#雄霸四方#freePhantomNum:89,armyGold:280,num:1,gold:2800,type:1
1844#雄霸四方#freePhantomNum:88,armyGold:280,num:1,gold:2800,type:1
1844#雄霸四方#freePhantomNum:87,armyGold:280,num:1,gold:2800,type:1
92673#汔丶淚。#freePhantomNum:101,armyGold:280,num:1,gold:2800,type:1
4391#曹操之后#freePhantomNum:81,num:1,armyGold:280,gold:2800,type:1
4391#曹操之后#freePhantomNum:80,num:1,armyGold:280,gold:2800,type:1
4391#曹操之后#freePhantomNum:79,num:1,armyGold:280,gold:2800,type[……]

继续阅读

乐观锁和悲观锁

点击量:501

这两个概念是非常宏观的,只是两种不同的设计思想。

一、基本概念

悲观锁:假设线程在竞争资源时肯定会发生冲突,这时就需要把这个资源锁住,只有一个线程能同时操作这些竞争资源,其他线程只能等待拥有这个锁的线程完成操作。

乐观锁:顾名思义就是假设线程在竞争资源不会发生冲突,或者说概率很小,大家都可以同时访问这个资源,只有在最终修改的那一瞬间才会去检查是否能够修改。但如果发现冲突了怎么办?回滚。

这样很明显,乐观锁加锁的时间短,在多读少写,并发的可能性较低的情况下,可以减少事务之间的锁等待和事务对锁的管理开销,能够在一定程度上提高效率。但如果在资源竞争很激烈的情况下,乐观锁就会因为频繁的回滚导致性能的下降。

乐观锁的最初概念其实是Optimistic concurrency control,最初由华人科学家H. T. Kung在1981年提出,wikipedia给出的定义非常准确:

Optimistic concurrency control (OCC) is a concurrency control method applied to transactional systems such as rela[……]

继续阅读