- 博客(73)
- 收藏
- 关注
原创 三十五、垃圾回收器
有了虚拟机,就一定需要收集垃圾的机制,这就是Garbage Collection,对应的产品我们称为Garbage Collector。1.1999年随JDK1.3.1一起来的串行方式的Serial GC,它是第一款GC。ParNew垃圾收集器是Serial收集器的u哦线程版本。2.2002年02月26日,Parallel GC和Concurrent Mark Sweap GC跟随JDK1.4.2一起发布。3.Parallel GC在JDK6之后成为HotSpot默认GC。
2023-04-27 11:39:56 606
原创 三十四、java中的引用
在系统GC时,只要发现弱引用,不管系统堆空间使用是否充足,都会回收掉只被弱引用关联的对象。弱引用对象与软引用对象的最大不同就在于,当GC在进行回收时,需要通过算法检查是否回收软引用对象,而对于弱引用对象,GC总时进行回收,弱引用对象更容易、更快被GC回收。9.相对的,软引用、弱引用和虚引用的对象是软可触及的、弱可触及的和虚可触及的,在一定条件下,都是可以被回收的。弱引用和软引用一样,在构造弱引用时,也可以指定一个引用队列,当弱引用对象被回收时,就会加入指定的引用队列,通过这个队列可以跟踪对象的回收情况。
2023-04-06 14:27:46 1917
原创 三十三、垃圾回收的并行与并发
2.并发不是正真意义上的”同时进行“,只是CPU把一个时间段划分成几个时间片段(时间区间),然后再这几个时间区间之间来回切换,由于CPU处理的速度非常快,只要时间间隔处理得当,即可让用户感觉是多个应用程序同时再进行。安全区域是指在一段代码片段中,对象的引用关系不会发生变化,在这个区域中的任何位置开始GC都是安全的。3.当系统有一个以上CPU时,当一个CPU执行一个进程时,另一个CPU可以执行另一个进程,两个进程互不抢占CPU资源,可以同时进行,我们称之为并行。否则,看似同时发生的事情,其实都是并发执行的。
2023-04-04 17:48:55 583
原创 STW(Stop The World)
1.Stop-the-world,简称STW,指的是GC事件发生过程中,会产生应用程序的停顿。停顿产生时整个应用程序线程都会被暂停,没有任何下你响应,有点像卡死的感觉。这个停顿称为STW。4.哪怕是G1也不能完全避免Stop-the-worl情况发生,只能说垃圾回收器越来越优秀,回收效率越来越高,尽可能地缩暂停时间。2.被STW中断的应用程序线程会再完成GC之后恢复,频繁中断会让用户感觉是网速不块造成卡带,所以我们需要减少STW的发生。3.STW事件和采用哪款GC无关,所有的GC都有这个事件。
2023-04-04 14:57:17 783
原创 三十二、内存溢出(OOM)、内存泄漏(Memory Leak)
(2)代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)对于来版本的Oracle JDK,因为永久代的大小是有限的,并且JVM 对永久代垃圾回收非常不积极,所以当我们不断添加新类型的时候,永久代出现OutOfMemoryError也非常多见,尤其是在运行时存在大量动态类型生成的场合;类似intern字符串缓存占用太多空间,也会导致OOM的问题。单例的声明周期和应用程序是一样长的,所以单例程序中,如果持有对外部对象的引用的话,那么这个外部对象是不能被回收的,则会导致内存泄漏的产生。
2023-04-04 14:27:11 591
原创 三十一、System gc()的理解
3.JVM实现者可以通过System.gc()调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触发,否则就太过于麻烦了。在一些特殊情况下,如我们正在编写一个性能基准,我们可以在运行之间调用System.gc()。1.在默认情况下,通过System.gc或者Runtime.getRuntime().gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。2.然而System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用。
2023-04-04 11:10:15 123
原创 三十、java虚拟机垃圾回收
1.垃圾收集,不是Java语言的半生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。2.关于垃圾收集有三个经典问题。1)哪些内存需要回收?2)什么时候回收?3)如何回收?3.垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即时经过如此长时间的发展,Java的垃圾收集机制任然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。1什么是垃圾呢?
2023-04-03 17:49:13 377
原创 二十九、String的不可变性
1.String:字符串,使用一对“”引起来表示//字面量的定义方式2)String 说 = new String(“hello”)’2.String声明为final的,不可被继承。3.String实现了Serialzable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小。4.String在jdk8及以前内部定义了final char[] vaule用于存储字符串数据。jdk9时改为bytr[]。5.String:代表不可变的字符序列。
2023-03-30 11:15:00 1131
原创 二十八、java虚拟机执行引擎
1.执行引擎是Java虚拟机核心的组成部分之一。2.“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是戒指建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎是由软件自行实现的,因此可以不受物理条件制约定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。
2023-03-22 16:55:59 325
原创 二十七、直接内存
6.由于直接内存在Java堆外,因此它的大小不会直接受限于-Xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。1.不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。2)Java的NIO库允许Java程序使用直接内存,用于数据缓冲区。4.通常,访问直接内存的速度会优于Java堆。1)因此处于性能考虑,读写频繁的场合可能会考虑使用直接内存。2.直接内存时在Java堆外的、直接向系统申请的内存区间。
2023-03-22 11:20:29 67
原创 二十六、对象的实例化内存布局与访问定位
1.判断对象对用的类是否加载、链接、初始化。2.为对象分配内存。3.处理并发安全问题。4.初始化分配到的空间。5.设置对象的对象头。6.执行init方法进行初始化。1.虚拟机遇到一条new指令,首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、和初始化。(即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为key进行查找对应的class文件。
2023-03-22 10:24:08 180
原创 python自动化测试selenium浏览器驱动webdriver常见方法
python 设置浏览器缩放大小、浏览器的前进和后退、浏览器的刷新、元素的点击、文本内容的清除、输入、鼠标事件、键盘事件、获取断言信息、设置元素等待、多窗口切换、表单切换、
2022-12-01 17:08:04 8278
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人