jvm
文章平均质量分 83
java虚拟机的基本概念
isTrueLoveColour
这个作者很懒,什么都没留下…
展开
-
java虚拟机垃圾回收基本概念
在c/c++的时代,垃圾回收是手动进行的,使用new关键字申请,使用delete关键字进行内存的释放,这样会很灵活,但是管理内存会很繁琐,如果忘记释放,会导致内存泄漏,随着时间的增加,内存的使用会越来越高,有可能造成内存溢出,进而导致程序的崩溃。分代收集算法基于:不同的对象的生命周期不同,因此不同生命周期的对象采取不同的收集方式,以便提高回收效率,一般是把对分为新生代、老年代,不同的年代采用不同的算法,提高垃圾回收的效率。这中方式清理出来的内存不是连续的,容易产生内存碎片,还需要维护一个空闲列表。...原创 2022-08-14 21:39:18 · 176 阅读 · 0 评论 -
java虚拟机字符串常量池
String 是final的,jdk1.8的时候,底层是一个char[ ] , jdk1.9的时候用的是 byte[ ],原因是堆空间中有大量的字符串,实际使用时发现大部分字符串都是拉丁文,1个字节就可以存放,而char 需要2个字节,所以为了节约空间,和减少GC的次数,就把char[ ] 改成了 byte[ ] ,在我们创建字符串的时候,会尝试压缩字符串,如果有大量的重复字符串,使用intern 可以节约内存空间,(虽然也会创建很多对象,但是会及时回收掉,直接从常量池中使用,而不是直接使用堆中的对象)..原创 2022-08-13 16:06:00 · 255 阅读 · 0 评论 -
java虚拟机堆空间
运行时数据区堆空间原创 2022-08-01 22:46:02 · 490 阅读 · 0 评论 -
双亲委派机制
jvm双亲委派机制原创 2022-07-23 21:24:57 · 128 阅读 · 0 评论 -
jvm类加载子系统
jvm类加载子系统原创 2022-07-23 21:22:19 · 247 阅读 · 0 评论 -
java虚拟机垃圾回收器
垃圾回收器是java的招牌能力,极大的提高了开发效率7款经典的垃圾回收器:串行回收器:Serial、 Serial old (垃圾回收时,只有一个线程进行垃圾回收)并行回收器:ParNew 、Parallel Scavenge 、 Parallel old (垃圾回收时,有多个垃圾回收线程)并发回收器:CMS、G1 (垃圾回收线程和工作线程交替执行)不同的垃圾回收器可以回收的不同区域不同的jdk版本,垃圾收集器的组合方式。...原创 2022-08-28 21:31:07 · 884 阅读 · 1 评论 -
java虚拟机栈
java虚拟机栈空间原创 2022-07-30 16:28:23 · 903 阅读 · 0 评论 -
java虚拟机垃圾回收相关概念
软引用是来描述一些还有用,但是非必须的对象,只被软引用关联的对象,在系统将要发生内存溢出异常前,会把这些对象列进回收范围之中进行第二次回收,如果这次回收没有足够的内存,才会抛出内存溢出异常,所以软引用是不会造成内存溢出的(内存溢出和强引用以外的引用无关)一个对象是否有虚引用,完全不会决定对象的生命周期,如果一个对象只有虚引用,那么几乎和没有引用是一样的,随时都能被垃圾回收器回收掉,唯一的作用就是跟踪垃圾回收的过程,能在对象被收集器回收时起到一个系统通知。原创 2022-08-22 22:34:29 · 188 阅读 · 0 评论 -
java创建对象的几种方式
实例数据:对象真正有效的信息,包括父类和自身拥有的字段,其中,父类中定义的变量会出现在子类之前;句柄访问,需要专门维护一个句柄池,空间开销较大,而且相对于直接指针来说效率较低,但是如果对象的位置方法变化(比如发生了GC),句柄访问就只需要维护句柄池,不需要区修改栈中的数据。直接指针,hotspot采用所谓方式,栈帧里的,局部变量表记录了 堆中对象的直接引用地址,堆中对象又有方法区中类的引用。句柄访问,维护了一个句柄池,句柄池在堆中,记录了对象的引用和类的引用,栈帧需要通过句柄池才能访问对象以及类。...原创 2022-08-08 21:11:02 · 598 阅读 · 0 评论 -
java虚拟机执行引擎
所以,hotspot在虚拟机启动时,解释器首先发挥作用,不必等到即时编译器全部编译完成在执行,这样可以省去很多不必要的等待时间,并且随着程序运行时间的推移,即时编译器逐渐发挥作用,根据热点探测功能把有价值的字节码编译为本地机器指令,以换取更高的执行效率,另外解释器还可以作为备选方案。如下图,如果只是为了跨平台,那么直接把代码翻译成汇编语言,再把汇编语言翻译为机器指令也是可以实现跨平台,但是这样堆虚拟机的要求会非常高,而引入字节码文件,可以降低虚拟机的要求,且能防止源代码泄露,且字节码可以跨语言。......原创 2022-08-08 21:17:14 · 643 阅读 · 0 评论 -
java虚拟机方法区
方法区和堆一样是多个线程共享的,《java虚拟机规范》中声明,所有的方法区在逻辑上可以看作是堆的一部分,但是一些简单的实现可能不会选择区进行垃圾收集或者压缩,而对于hotSpot而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是要和堆分开,所以,方法区可以看作是一块独立与堆的内存空间,而且堆的主要目的是存放创建出来的各种对象,方法区里则会有类的信息,从内容来说,也不相同方法区在jvm启动时被创建,它的实际物理内存空间和java堆区一样都是可以不连续的方法区的大小和堆空间一样,可以固定大小也可以扩原创 2022-08-08 21:08:37 · 323 阅读 · 0 评论