![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深入理解java虚拟机
文章平均质量分 87
repator
这个作者很懒,什么都没留下…
展开
-
java字符串常量池和String:intern()方法
在虚拟机规范中,运行时常量池(包含字符串常量池)是方法区的一部分。在HotSpot虚拟机中,JDK1.6以及之前,使用永久代来实现方法区,所以字符串常量池是在永久代中,在JDK1.7及其以后,字符串常量池被放在堆中实现,String:intern()方法是一个本地方法。当执行字符串的intern()方法后,对不同的字符串赋值方式会有不同的效果,主要有以下两种方式:第一种:String s1= new String(“我是new出来的对象”); Stirng s2=s1.intern()...原创 2021-08-29 14:05:43 · 194 阅读 · 0 评论 -
理解虚拟机规范和HotSpot对其的实现
引言之前写过一篇JVM’内存区域的博文,最近重新学习并理解JVM内存区域,看了相关的官方文档和《深入理解java虚拟机》,发现之前对此的理解和认识有些误区,比如JDK1.8和1.7以及之前内存区域划分的区别,相信大部分人都会认为是从MethodArea(方法区)到Meta-Space(元空间)的转变,但是其实虚拟机规范中对内存区域的划分和不同虚拟机对虚拟机规范中内存区域划分的实现是两个概念和完全不同的事情,他们不是相等的关系,如果非要给两者下一个定义:两者属于规范和具体实现的关系,类似于类和对象的关系,原创 2021-08-21 15:46:51 · 265 阅读 · 2 评论 -
深入理解java虚拟机之——类的加载过程
深入理解JVM之——类加载过程 在理解类加载之前先了解一下类加载器。顾名思义,类加载器就是将java字节码文件加载到JVM中,在虚拟机中,不同类加载器加载的类一定是不相同的,即使这两个类是一模一样的。举个例子,针对同一个类A,加载器1和加载器2加载A。在虚拟机的世界里,这两个加载器加载的“...原创 2019-11-28 22:20:13 · 173 阅读 · 0 评论 -
深入理解java虚拟机之——垃圾回收(垃圾判断,垃圾收集算法,垃圾收集器)
java与C++之间有一道动态内存分配和垃圾收集的“墙”,墙里面的人想出来,墙外边的人想进去,或许只有骑在墙上才能清楚的了解,墙内墙外都是牢笼。 上面一句出自《深入理解java虚拟机》,我做了适当的修改,因为之前是C++出身,虽然C++具有高效 ,快速等特点,威力也大,但C++的内存手动分配和手动回收也令人懊恼,所以一般事物威力越大的同时爆发起的脾气也是越大,...原创 2019-11-25 20:23:15 · 511 阅读 · 0 评论 -
深入理解java虚拟机之——java对象创建过程
在Java常规对象(不包括数组和Class对象)创建过程,JVM所做的工作为:先进行类的加载,之后执行类检查。然后在堆中为对象分配空间,初始化0值,紧接着进行对象头的设置。然后执行java的Init初始化方法,详细过程若下图所示:...原创 2019-11-20 21:46:17 · 207 阅读 · 0 评论 -
深入理解JAVA虚拟机之———JVM内存结构
Java从1.7到1.8,虚拟机管理的内存结构方面发生了一些变化,下面主要介绍jdk1.7,1.8的虚拟机运行时内存结构划分。下面介绍每一部分:程序计数器:线程私有,该部分不会抛出OOM,生命周期和线程相同。虚拟机中唯一一个不会抛出OOM错误的区域。当前线程所执行的字节码的行号指示器。字节码解释器工作时根据程序计数器来选取要执行的下一条字节码指令,分支,循环,跳转,异常处理,线程恢...原创 2019-11-18 23:04:35 · 241 阅读 · 0 评论