![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
jvm
拿了桔子跑啊1
美人鱼的眼泪是一个连伤心都透明的世界
展开
-
java高频考点-再总结
文章目录反射概念场景动态代理重定向与转发的区别hashmap拉链法导致的链表过深问题为什么不用二叉查找树代替,而选择红黑树?为什么不一直使用红黑树?链表树化条件为什么是这样?解决hash冲突的方法红黑树红黑树和平衡二叉查找树的区别红黑树与B树的区别table 数组长度永远为 2 的幂次方1.7中的4次位运算,5次异或运算(9次扰动),在1.8中,只进行了1次位运算和1次异或运算(2次扰动)Hash冲突?put步骤扩容步骤HashTable与HashMap最简单但是却讲不出来java8新特性集合存null值重原创 2020-10-31 13:52:09 · 284 阅读 · 2 评论 -
垃圾回收器总结、G1回收器详解
文章目录导论Serial回收器:串行回收ParNew回收器:并行回收Parallel Scavenge回收器:吞吐量优先CMS回收器:低延迟G1回收器:区域化分代式特点使用场景分区Region:化整为零回收过程导论7个经典收集器与垃圾分代之间的关系图垃圾收集器的组合关系最新图(jdk14之前),(虚线是jdk8不包括jdk8之前的关系,实线是jdk8之后的关系)Serial回收器:串行回收Serial收集器是最基本、历史最悠久的垃圾收集器了。JDK1.3之前回收新生代唯一的选择。Seria原创 2020-06-15 11:35:40 · 969 阅读 · 0 评论 -
垃圾回收器相关概念
文章目录GC分类与性能指标GC分类与性能指标垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。...原创 2020-06-14 11:43:37 · 163 阅读 · 1 评论 -
垃圾回收的相关概念
System.gc()在默认情况下,通过system.gc ()或者Runtime. getRuntime() .gc()的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。其底层是调用了System.getRuntion().gc();然而System. gc ()调用附带一个免责声明,无法保证对垃圾收集器的调用(不一定执行或者说不一定及时执行,这个方法仅仅只是提醒jvm希望jvm去调用gc)。与System.runFinalization();相反的是,S原创 2020-06-12 16:15:44 · 319 阅读 · 0 评论 -
常见的垃圾回收算法详解
什么是垃圾➢ 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。➢ 外文: An object is considered garbage when it can no longer be reached from any pointer in the running progr am.如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。随着应用程序所应付的业务越来越庞大、复杂,用户越原创 2020-06-11 17:37:11 · 1369 阅读 · 1 评论 -
String特性再探究、intern()方法详解
String基本特性String:字符串,使用一对""引起来表示。|String声明为final的,不可被继承String实现了Serializable接口:表示字符串是支持序列化的。实现了Comparable接口:表示String可以比较大小String在jdk8及以前内部定义了final char[] value用于存储字符串数据。jdk9时改为byte[]String:代表不可变的字符序列。简称:不可变性当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋原创 2020-06-10 11:49:30 · 247 阅读 · 0 评论 -
对象的创建、对象的内存布局、对象访问定位
对象实例化的几种方式创建对象的步骤虚拟机遇到一.条new指令,首先去检查这个指令的参数能否在Metaspar e的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化。( 即判断类元信息是否存在)。如果没有,那么在双亲委派模式下,使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件,则抛出ClassNotF oundException异常,如果找到,则进行类加载(加载、解析和初始化),并生成对应的Clas原创 2020-06-08 10:13:53 · 181 阅读 · 0 评论 -
java方法区
文章目录栈、堆、方法区的交互关系方法区理解设置方法区大小OutOfMemoryError栈、堆、方法区的交互关系方法区理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。”但对于HotSpotJVM而言,方法区还有一个别名叫做Non- Heap (非堆),目的就是要和堆分开。所以,方法区看作是一块独立于Java堆的内存空间。方法区(Method Area) 与Java堆一样,是各个线程共享的内存区域方法区原创 2020-06-05 15:54:35 · 2265 阅读 · 0 评论 -
了解逃逸分析
堆是分配对象存储的唯一选择吗?否,在《深入理解Java虚拟机》中关于Java堆内存有这样一段描述: .随着JIT编译期的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化,所有的对象都分配到堆上也渐渐变得不那么“绝对”了。在Java虚拟机中,对象是在Java堆中分配内存的,这是一个普遍的常识。但是,有一种特殊情况,那就是**如果经过逃逸分析(Escape Analysis)后发现,一个对象并没有逃逸出方法的话,那么就可能被优化成栈上分配。**这样就无需在堆上分配内存,也无须进原创 2020-06-04 13:51:18 · 1525 阅读 · 0 评论 -
java堆内存(Heap)
文章目录堆的核心概述内部细分堆空间大小设置年轻代和老年代对象分配过程堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大1块内存空间。堆内存的大小是可以调节的。-Xms、-Xmx表示初识堆空间大小和最大堆空间大小。《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local原创 2020-06-03 23:04:41 · 1213 阅读 · 1 评论 -
双亲委派机制
文章目录双亲委派机制工作原理举例优势沙箱安全机制双亲委派机制Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的class文件加载到内存生成class对象。而且加载某个类的class文件时,Java虚拟机采用的是双亲委派模式,即把请求交由父类处理,它是一“种任务委派模式。工作原理1)如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行;|2)如果父类加载器还存在其父类加)载器,则进一步向上委托,依次递归,请求最终将到达项原创 2020-05-31 16:56:47 · 288 阅读 · 0 评论 -
类加载器分类
类加载器分类JVM支持两种类型的类加载器,分别为引导类加载器( Bootstrap ClassLoader它不是java语言编写)和自定义类加载器(User- Defined ClassLoader)从概念上来讲,自定义类加载器一般指的是程序中由开发人员自定义的一类类加载器,但是Java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器无论类加载器的类型如何划分,在程序中我们最常见的类加载器始终只有3个,如下所示:ExtClassLoader和原创 2020-05-31 12:34:24 · 264 阅读 · 0 评论 -
类加载子系统详解
类加载子系统类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine(执行引擎)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常最池信息,可能还包括字符串字而量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)例子class file存在于本地硬盘上,可以理解为设计师画在纸上的模板,而原创 2020-05-31 11:22:24 · 1835 阅读 · 0 评论 -
java内存区域
文章目录概述StackOverflowError&OutOfMemoryError运行时数据区程序计数器java虚拟机栈本地方法栈方法区java堆运行时常量池直接内存参考书籍:[(深入理解JAVA虚拟机)]概述在内存管理领域,对C和C++程序开发人员来说,他们拥有每个对象的所有权,但是也担负着每个对象生命从开始到销毁的维护责任。对于java程序员来说,在jvm自动内存管理机制的帮助下,不在需要为每个new操作去管理,不容易出现内存泄漏和内存溢出的问题,但是正因为如此一旦出现了内存泄漏和内存溢原创 2020-05-20 14:34:07 · 435 阅读 · 1 评论