# Java 持久代实现详解
Java 是一种广泛使用的编程语言,在其运行时环境中存在一个重要的概念——持久代(PermGen)。持久代主要用于存储类的元数据、常量池、静态变量等信息。虽然在 Java 8 之后被元空间(Metaspace)所替代,但理解持久代的实现仍然具有重要的学习意义。
本篇文章将深入探讨 Java 持久代的实现机制,并通过示例代码帮助读者理解其工作原理。
## 持久代的
应用程序通过new语句创建了一个对象,这个对象的生命周期就开始了,当不再有任何引用变量引用它,这个对象就结束生命周期,它占用的内存就可以被JVM的垃圾回收器回收。对于需要被持久化的Java对象,在它的生命周期中,可处于以下三个状态之一: (1) 临时状态(transient):刚刚用new语句创建,还没有被持久化,不处于Session的缓存中。处于临时状态的Java对象被称为临时对象。 (2) 持
转载
2023-11-01 18:52:37
41阅读
介绍高性能数据访问层需要大量有关数据库内部,JDBC,JPA,Hibernate的知识,本文总结了一些可用于优化企业应用程序的最重要技术。
1. SQL语句记录 如果您使用的是代表您生成语句的框架,则应始终验证每个语句的有效性和效率。测试时断言机制甚至更好,因为即使在提交代码之前,您也可以捕获N + 1个查询问题。
2.连接管理 数据库连接很昂贵,因此您应始终使用连接池机制
转载
2023-09-12 10:43:59
58阅读
最近开始学习springboot,通过上网找资料和看视频学会了许多,下面就是博主的学习过程。。。开发环境:jdk1.8、开发工具IDEA2016、Tomcat9.0.8,MySQL版本5.1.2 首先来说一下关于JPA,百度是这么说的:JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并
A.概念 持久化:将内存中的对象持久化(存储)到数据库的过程。Hibernate就是持久化的框架。 持久化类:一个普通java对象与数据库的表建立了映射关系,那么这个类在Hiberna中被称为持久化类。(通俗一点就是java类+映射文件) B.持久化类的编写规则 1.对持久化类提供一个无参构造方法。 当然,如果你什么构造都不写,默认还是有无参的。提供无参构造是为了Hibern
转载
2023-07-19 00:45:16
89阅读
堆栈空间配置JVM 中最重要的一部分就是堆空间了,基本上大多数的线上 JVM 问题都是因为堆空间造成的 OutOfMemoryError。因此掌握 JVM 关于堆空间的参数配置对于排查线上问题非常重要。tips:本文所有配置,如无特别说明,均基于JDK1.8。堆配置我们使用 -Xms 设置堆的初始空间大小,使用 -Xmx 设置堆的最大空间大小。java -Xms20m -Xmx30m GCDemo
转载
2023-07-21 06:51:14
7阅读
jvm中的年轻代 老年代 持久代 gc 虚拟机中的共划分为三个代:年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的
转载
2016-11-11 17:44:00
106阅读
虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。 年轻代:
转载
2017-09-07 15:20:00
132阅读
2评论
您好,我是湘王 ,欢迎您来,欢迎您再来~ 大部分在代码里创建的对象,存活周期都是极短的,只有少数对象是长期存活的,如静态类和静态变量。采用不同方式创建和使用对象,其生存周期也不同。因此,JVM将堆内存划分为年轻代、老年代两个区域。1、年轻代:将创建和使用完之后马上就要回收的对象放在里面;2、老年代:将创建之后需要长期存在的对象放在里面。 &n
转载
2023-08-11 21:42:37
54阅读
Hotspot jvm的实现中,将堆内存分为了两部:新生代,老年代。在堆内存之外,还有永久代,其中永久代实现了规范中规定的方法区。栈溢出:出现此种情况是因为方法运行的时候,栈的深度超过了虚拟机容许的最大深度所致。死递归:import java.util.*;
import java.lang.*;
public class OOMTest{
public void
转载
2023-08-10 11:37:17
66阅读
线上应用故障排查之二:高内存占用前一篇介绍了线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。(友情提示:本
转载
2023-07-20 07:18:46
95阅读
http://blog.csdn.net/u014351782/article/details/53098291 虚拟机中的共划分为三个代:年轻代(Young Generation)、年老点(Old Generation)和持久代(Permanent Generation)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大
转载
2017-06-30 11:49:29
606阅读
虚拟机中的共划分为三个代:年轻代(YoungGeneration)、老年代(OldGeneration)和持久代(PermanentGeneration)。其中持久代主要存放的是Java类的类信息,与垃圾收集要收集的Java对象关系不大。年轻代和年老代的划分是对垃圾收集影响比较大的。年轻代:所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区
原创
2018-04-20 10:05:11
867阅读
点赞
1评论
JVM中的堆,一般分为三大部分:新生代、老年代、永久代:1 新生代主要是用来存放新生的对象。一般占据堆的1/3空间。由于频繁创建对象,所以新生代会频繁触发MinorGC进行垃圾回收。新生代又分为 Eden区、ServivorFrom、ServivorTo三个区。Eden区:Java新对象的出生地(如果新创建的对象占用内存很大,则直接分配到老年代)。当Eden区内存不够的时候就会触发MinorGC,
转载
2023-11-17 22:36:58
59阅读
10. RDD持久化
Spark其中一个重要的功能是持久化(或缓存)数据到内存。当持久化一个RDD时,每一个节点会把计算后的分区数据保存在内存里面,然后后续的操作可以直接重用内存里的数据。这样可以提高后续操作的计算速度(通常是10倍以上)。缓存是迭代算法和快速交互式使用的关键工具。
RDD的持久化可以使用persist()或者cache()方法,数
转载
2024-04-18 09:24:30
45阅读
1、内存模型的概述Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变量都存
转载
2023-07-16 10:47:34
56阅读
JVM一、jvm运行流程二、jvm结构1.jvm基本结构类加载器,执行引擎,运行时数据区,本地接口Class Files -> ClassLoader -> 运行时数据区 -> 执行引擎,本地库接口 -> 本地方法库其中对于方法区,很多人更愿意称为:“永久代(Permanent Generation)”,不过本质上两者并不等价,仅仅是因为习惯使用HotSpot虚拟机的设计团
转载
2023-11-27 11:04:22
56阅读
关键字约定Young generation –>新生代Tenured / Old Generation –>老年代Perm Area –>永久代年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Survivor区(一般而言)。大部分对象在Eden区中生成。当Eden区满时,还存活的对象将
转载
2018-08-18 17:27:00
125阅读
2评论
jvm基本介绍
原创
2021-07-20 16:15:04
982阅读
关键字约定 Young generation –>新生代 Tenured / Old Generation –>老年代 Perm Area –>永久代 年轻代: 所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。年轻代分三个区。一个Eden区,两个 Sur
转载
2018-09-12 14:31:00
125阅读
2评论