《深入理解java虚拟机》学习笔记(一)

1、java虚拟机的作用

java语言通过虚拟机在千差万别的物理机器上建立了统一的运行平台,在任意一台虚拟机上编译的程序可以在任意一台虚拟机上正常运行。

2、jdk与jre

jdk(java development kit)是指java程序语言、java虚拟机和javaAPI类库。
jre(java runtime environment)是指javaAPI类库中的java SE API子集和java虚拟机

3、java技术体系

java技术体系分为:
java程序语言
javaAPI类库
Class文件格式
各平台上的虚拟机
第三方java类库

4、java虚拟机运行时数据区

线程私有:程序计数器、虚拟机栈
共享:java堆、工作区

程序计数器:当前线程执行的字节码行号指示器,通过计数器值的变换来选取下条需要执行的语句,每条线程有独自的计数器互不影响,独立存储。(Native方法中,计数器的值为空)(Native方法为java调用非java代码的方法)
java堆:用于存放对象实例,线程共享,垃圾回收机制的主要工作区域,也被成为“GC”堆。可划分出不同线程的私有缓冲区,划分目的为了更好的回收,更快的分配内存。
虚拟机栈:其生命周期和线程共存,每个方法执行的时都会创建一个栈帧,用于存储局部变量表,操作数栈等,每一个方法的执行到完成对应着一个栈帧的入栈出栈。局部变量表所需内存控件是在编译期就确定的,所以其大小完全确定。线程请求栈深度超出会抛出StackOverflowError。如果栈扩展时无法申请足够内存会抛出OutOfMemoryError。
本地栈: 为虚拟机使用到的Native方法服务
方法区:存储虚拟机加载的类信息,常量,静态常量等,垃圾回收机制也应用于此,不过效益并不明显。

5 、常量池的作用

可以有效避免对象被反复创建、销毁而影响系统性能,实现对象的共享,例如字符串中s,t都是‘hello’,s==t为true(比对s和t对象的内存地址),因为他们指向常量池的同一块内存。(java编译器会自动拼接字符串例如s=‘1’+‘2’,java自动理解为s=‘12’)

6、常量池与运行时常量池

常量池指编译期间的静态的class文件常量池,存放字面量和符号引用。运行时常量池是jvm在完成类加载之后,将class文件中的常量池放入内存中,保存在方法区,其具备动态性,由各个运行时的class文件的常量池组成,并且也可以是静态常量池中没有的,新加入的常量,例如String中的intern方法,它会检测常量池中是否存在该字符串,有则返回,没有则自己添加字符串到常量池。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值