微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

深入理解Java虚拟机笔记-1、2章

第一章 走进Java

虚拟机一般指虚拟出来的电脑,Java虚拟机指虚拟出来的Java环境,也叫Java运行是占据的空间。

Java虚拟机家族:

虚拟机始祖:Sun Classic/Exact VM

武林盟主:HotSpot VM

小家碧玉:Mobile/Embedded VM

天下第二:BEA JRockit/IBM J9 VM

软硬合璧:BEA Liquid VM/Azul VM

挑战者:Apache Harmony/Google Android Dalvik

没有成功,但并非失败:Microsoft JVM及其他

新一代即时编译器:

自JDK 10起,HotSpot中又加入了一个全新的即时编译器:Graal编译器。

Graal编译器是以C2编译器替代者的身份登场的。

Graal编译器本身就是由Java语言写成,实现时又刻意与C2采用了同一种名为“Sea-of-Nodes”的高级中间表示(High IR)形式,使其能够更容易借鉴C2的优点。开发效率和扩展性上都要显著优于C2编译器。

自己编译JDK:

文件本质是比特数组(比特流),识别字符编码翻译成底层的C语言,并判断语言的正确性。

第二章 java内存区域与内存溢出异常

2.2 运行时数据区域

方法区:类第一次使用从磁盘加载到内存先进入方法去。

虚拟机栈:方法执行是在栈中创建线程栈,把方法压栈,变量的句柄也在栈中。

每个线程压入方法就是栈帧,java虚拟机栈也是线程私有的,它的生命周期

与线程相同。

        单个线程栈空间不够:抛出StackOverflowError异常

        整个栈、堆空间不够:抛出OutOfMemoryError异常

堆:在堆中创建对象。

对象实例在这里分配内存。//缓冲区:先申请足够大空间

本地方法栈:不管什么语言都要翻译成操作系统识别的语言,调用操作系统内核的方法

程序计数器:虚拟机线程什么时候入栈,什么时候出栈,需要它来记录。

辅助线程栈,记录正在执行的指令的地址。

----------------------------------------------------

线程隔离:某一信息只属于一个线程。

线程共享:多线程可以修改访问同一个变量或方法

*分为方法区、堆、虚拟机栈、本地方法栈、程序计数器五个部分,其中方法区和堆是线程共享的,其他是线程隔离的。

基本类型存在哪里?

方法中声明的存在栈中,类中(方法外)声明的存在堆中,静态的基本类型存放在方法区。

 

原文地址:https://www.jb51.cc/wenti/3287054.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐