Java知识总结(一)编码、内存五大区域

这一周做了一些Java的一些练习题,将一些琐碎的知识点拿出来与大家分享一下,希望大家积极提出批评指导意见。

(一)在Java语言中,每个中文字符占用2个字节,每个英文字符占用1个字节
你觉得对不对呢?Java一律采用Unicode编码方式,所以每个字符无论中文还是英文字符都会占用2个字节。那又有人会问了,啥?我之前怎么听说过中文字符占用两个字节,英文字符占用一个字节这样的说法呢?嘿嘿嘿,其实小编也被悠了,那是记混了。编码有还多种体系,其实咱们现实生活中遇到的编码基本都是Unicode的,因为Unicode兼容了大多数老版本的编码规范例如 ASCII,Java语言一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节,而Java的class文件有所不同,class文件编码采用的是UTF-8,而虚拟机JVM编码为UTF-16。UTF-8编码下,一个中文占3个字节,一个英文占1个字节。Java中的char默认采用Unicode编码,所以Java中char占2个字节。1(byte)字节=8(bit)位。我认为目前先掌握这几种编码方式,先知道他们在java中文字符和英文字符在不同的编码方式中所占用的字节字数即可,至于具体的编码方式详解,以后的博客应该会涉及到,希望小可爱你呀可以持续关注我哟!

(二)JVM内存五大区域
JVM代表Java虚拟机,内存包括五大区域,为了便于理解,直接上图说明:
在这里插入图片描述
这样是不是更加容易理解一些了呀,对于小白来说,深入消化理解这幅图片是很重要的,java共分为五大内存区域,分别是堆区、栈区(又分为虚拟机栈和本地方法栈)、方法区、PC寄存器。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。 年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收。永久代:存储的是final常量,static变量,常量池,方法区物理上还是在堆中,是在堆里面。栈区存放的是需要执行的一些方法,遵循先入后出的原则,内存是随着线程而释放的。寄存器是程序计数器,PC中存放下一次访存的地址(不能很好的理解的话也不要钻牛角尖哦)。

完后小知识:
Hashtable的方法都是synchrnized修饰的线程安全。
ConcurrentHashMap并发容器,Connections工具类提供了一个方法synchrnizedMap可以把Map同步,本质就是给每一个方法加上synchrnized关键字进行同步,线程安全。
这些内容,你get到了吗!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值