摘要: 在JVM规范的描述中,除了程序计数器外,JVM内存的其他几个运行时数据区都有发生OutOfMemoryError异常的可能。 Java堆溢出导致OOM: Java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么在对象数量到达最大 阅读全文
posted @ 2025-04-17 20:47 Ohana+ 阅读(17) 评论(0) 推荐(0)
摘要: Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中的对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。 主流的访问方式有使用句柄和直接指针两种: 阅读全文
posted @ 2025-04-14 15:21 Ohana+ 阅读(9) 评论(0) 推荐(0)
摘要: 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。 对象头包括两部分信息: 对象头信息 描述 对象自身的运行时数据 如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线 阅读全文
posted @ 2025-04-14 14:33 Ohana+ 阅读(10) 评论(0) 推荐(0)
摘要: JVM内存区域 JVM在执行Java程序的过程中,会将JVM管理的内存划分为若干不同的数据区域,这些区域被称为运行时数据区。 运行时数据区 运行时数据区就是JVM在运行Java程序时管理的内存区域: 分类标准 数据区域 线程共享 方法区 线程共享 堆 线程独享 程序计数器 线程独享 虚拟机栈 线程独 阅读全文
posted @ 2025-04-14 10:19 Ohana+ 阅读(10) 评论(0) 推荐(0)
摘要: Java是一门面向对象的编程语言,在Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象(例如克隆、反序列化)通常仅仅是一个new关键字而已。 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、 阅读全文
posted @ 2025-04-13 18:17 Ohana+ 阅读(15) 评论(0) 推荐(0)
摘要: stream是java8引入的新特性,用于对集合(Collection)对象进行各种非常便利、强大的复杂查询、过滤和映射操作。 stream的好处: 可读性高; 因为不需要特别指定操作顺序,stream可以对计算进行优化; stream与集合之间的区别: stream不存储元素; stream的操作 阅读全文
posted @ 2025-04-09 19:17 Ohana+ 阅读(40) 评论(0) 推荐(0)