Java堆空间划分

鉴于之前多次面试题考察基本类型大小问题,今天来做个记录。
C++的基本类型有bool char short float double int long long long pointer(指针)
| 数据类型 | 32位系统字节数 | 32系统二进制位数 | 64位系统字节数 | 64位系统二进制位数 |
|---|---|---|---|---|
| bool | 1 | 8 | 1 | 8 |
| char | 1 | 8 | 1 | 8 |
| short | 2 | 16 | 2 | 16 |
| int | 4 | 32 | 4 | 32 |
| long | 4 | 32 | 8 | 64 |
| long long | 8 | 64 | 8 | 64 |
| float | 4 | 32 | 4 | 32 |
| double | 8 | 64 | 8 | 64 |
| pointer | 4 | 32 | 8 | 64 |
可以看出其中只有long pointer是不同的,32位平台32位,64位平台64位,其实pointer就是用long表示的
Don.t fear the filesystem
Kafka非常依赖文件系统来存储和缓存消息,但人们在这里总是有一个错觉disks are slow。事实上,disks可以很慢,也可以很快,这取决于人们怎么用它,一个设计合理的磁盘结构通常可以和网络一样快。
这里有一个事实:磁盘读取快慢主要取决于寻道延时。six 7200rpm SATA RAID-5 array的磁盘linear writes的读取速度大概为600MB/sec,但random writes的读取速度为100k/sec,正因为现在操作系统通常采用随机存储的方式,导致人们对磁盘速度产生了错觉。
持久化策略
当我们保持消息队列的时候,快用完内存空间时,并不采用操作系统的策略(尽可能保持内存中的数据,将不常用的数据块替换出去),而是将内存中的消息全部冲洗到文件系统中。个人理解Kafka能够高吞吐的原因在于Batching、larger network packets、larger sequential disk operations、contiguous memory block,所有的策略都为了保证Kafka将随机消息写转为线性写。
Redis安装后默认支持的持久化方式。在指定的时间间隔内将内存中的数据集快照写入到磁盘。在配置文件中,通常默认的配置是每900秒至少有一个key发生变化时会持久化一次; 每300秒至少有10个key发生变化时会持久化一次; 每60秒10000次变化时持久化一次
优点
Java Thread pool represents a group of worker threads that are waiting for the job and reuse many times.
Java中创建一个线程是一个相对耗时的操作,当程序中频繁的创建和使用线程时,会产生严重的内存管理开销(significant memory management overhead)。基于这个原因,Java有了线程池的概念,在使用线程之前,创建一个线程池。当一个任务需要一个线程去运行时,程序去线程池中选择一个空闲线程去运行。当任务结束后,线程又重新放进线程池中等待下一个任务,这样就避免了频繁的创建线程,大大节省了内存管理开销。
fixed thread pool : 固型线程池—-创建时指定创建的线程数,当任务使用完线程池中的空闲线程,则新任务将等待被占用的线程执行完任务。
固定长度线程池的优点 : 用Web服务器举例说明,Web服务器需要单独的线程去处理一个HTTP请求,当出现大量的HTTP请求,超过了系统能够承受的范围,那么这个Web服务器就会停止响应所有的请求。而如果使用固定长度线程池,虽然不能立刻服务请求,但系统会尽最大能力去处理。
JVM 的类加载是通过ClassLoader 及其子类完成的,加载分为三类加载
负责加载$JAVA_HOME中jre/lib/rt.jar里所有的class或者 -Xbootclasspath选项指定的jar包,rt.jar由C++实现,而不是ClassLoader子类
负责加载Java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包
负责加载classpath中指定的jar包及目录中的class
属于应用程序根据自身需要定义的ClassLoader,如Tomcat、jboss都会根据J2EE规范自行实现ClasLoader。
加载过程中会先检查类是否已加载,检查顺序是自Custom–>Bootstrap,只要某个Classloader已加载就视为已加载此类,保证此类只加载一次,而加载的顺序是自Bootstrap–>Custom
未完待续。。。。
Static
类名.方法名,不需要实例化一个对象。Final
c程序:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <stdio.h>
int main(int argc, char *argv[])
{
char src[100], dst[100], cmd[205] = "cp ";
printf("Please enter name of source file:");
gets(src);
strcat(cmd, src);
strcat(cmd, " ");
printf("Please enter name of destination file:");
gets(dst);
strcat(cmd, dst);
system(cmd);
return 0;
}