jvm
man_zuo
这个作者很懒,什么都没留下…
展开
-
java虚拟机笔记 String相关概念及其面试题
String相关 String的基本特征 String被声明为final,不可被继承。 String实现了Serializable接口,表明String支持序列化;实现了Comparable接口,表明String是可以比较大小 jdk8及其以前底层用char数组实现;jdk9以后用byte数组加编码标记(因为比如中文需要用两个byte存储)实现,StringBuilder和StringBuffer也做了相应的更新。 字符串常量池不会存储相同内容的字符(底层实现是一个固定长度的hashtable,长度可由-原创 2020-11-28 22:26:00 · 503 阅读 · 1 评论 -
java虚拟机笔记 运行时内存区域划分
前言 java虚拟机在执行java程序的过程中会把它所管理的内存划分成若干个不同的数据区域。jdk8以后,大体的内存划分如下。 程序计数器 一块很小的内存空间,线程私有,存储当前线程下一条要运行的字节码指令的行号 执行引擎通过行程序计数器中的行号找到对应的字节码指令,然后将字节码翻译成对应的机器语言,交给cpu执行 程序运行的分支、分支、循环、跳转、异常处理、线程切换等功能都需要程序计数器实现 此内存区域是唯一一个java虚拟机规范中没有规定任何OOM(OutOfMemoryError情况的区域),因为原创 2020-11-27 21:42:31 · 461 阅读 · 0 评论 -
java虚拟机笔记 逃逸分析
逃逸分析 背景:在Java虚拟机中,对象都是在java堆中分配内存的,这是一个普遍的常识,但是有一种特殊情况,那就是如果经过逃逸分析后发现,一个对象并没有逃逸出方法的话,那么该对象就可能被优化成栈上分配。 逃逸分析并不是直接的优化手段,而是一个代码分析;为其它优化手段如栈上分配、标量替换和同步消除等提供依据 为什么要将堆上的对象分配到栈上(逃逸分析技术的目的) 减少堆分配的压力,因为堆是共享区域,堆上分配需要进行同步操作 主要是为了减少gc次数,提高gc效率。因为gc只会清理堆区和方法区,而不用清理虚拟原创 2020-11-24 21:48:15 · 465 阅读 · 0 评论 -
java虚拟机笔记 类加载器与类的加载顺序
虚拟机的启动 启动 java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建的一个初始类来完成的,这个类是由虚拟机的具体实现指定的 类加载器的分类 启动类加载器(引导类加载器,Bootstrap ClassLoader) 这个类加载器通过 C/C++语言实现,嵌套在JVM实现中 它用来加载Java的核心类库(JAVA_HOME/jre/lib/rt.jar、resources.jar等),用于加载JVM自身运行所需要的内容 并不继承java.lang.Class原创 2020-11-16 11:42:51 · 351 阅读 · 0 评论