在OopMap的协助下,HotSpot可以快速且准确地完成GC Roots枚举,但一个很现实的问题随之而来:可能导致引用关系变化,或者说OopMap内容变化的指令非常多,如果为每一条指令都生成对应的OopMap,那将会需要大量的额外空间,这样GC的空间成本将会变得很高。
实际上,HotSpot也的确没有为每条指令都生成OopMap,前面已经提到,只是在“特定的位置”记录了这些信息,这些位置称为安全点(Safepoint),即程序执行时并非在所有地方都能停顿下来开始GC,只有在到达安全点时才能暂停。Safepoint的选定既不能太少以致于让GC等待时间太长,也不能过于频繁以致于过分增大运行时的负荷。所以,安全点的选定基本上是以程序“是否具有让程序长时间执行的特征”为标准进行选定的——因为每条指令执行的时间都非常短暂,程序不太可能因为指令流长度太长这个原因而过长时间运行,“长时间执行”的最明显特征就是指令序列复用,例如方法调用、循环跳转、异常跳转等,所以具有这些功能的指令才会产生Safepoint。
对于Sefepoint,另一个需要考虑的问题是如何在GC发生时让所有线程(这里不包括执行JNI调用的线程)都“跑”到最近的安全点上再停顿下来。这里有两种方案可供选择:抢先式中断(Preemptive Suspension)和主动式中断(Voluntary Suspension),其中抢先式中断不需要线程的执行代码主动去配合,在GC发生时,首先把所有线程全部中断,如果发现有线程中断的地方不在安全点上,就恢复线程,让它“跑”到安全点上。现在几乎没有虚拟机实现采用抢先式中断来暂停线程从而响应GC事件。
而主动式中断的思想是当GC需要中断线程的时候,不直接对线程操作,仅仅简单地设置一个标志,各个线程执行时主动去轮询这个标志,发现中断标志为真时就自己中断挂起。轮询标志的地方和安全点是重合的,另外再加上创建对象需要分配内存的地方。下面代码清单3-4中的test指令是HotSpot生成的轮询指令,当需要暂停线程时,虚拟机把0x160100的内存页设置为不可读,线程执行到test指令时就会产生一个自陷异常信号,在预先注册的异常处理器中暂停线程实现等待(通过异常跳转相应的指令产生的Savepoint,实现只要线程轮询到了轮询标志,就会相当于代码执行到了安全点),这样一条汇编指令便完成安全点轮询和触发线程中断。
相关推荐
而SavePoint则是事务管理中的一个重要概念,用于在事务中设置恢复点。这篇12页的PDF文档,"JDBC事务管理及SavePoint示例Java开发Java经验技巧",很可能是详细讲解了这两个主题,并提供了一些实际的编程示例。 首先...
这个实验报告主要涉及了数据库管理和事务处理的相关知识,具体包括SQL查询语句的使用、事务的保存点(Savepoint)操作以及并发控制下的事务处理。以下是详细的知识点解析: 1. **SQL查询语句**:实验中用到了`...
Oracle中的保留点(还原点)使用关键字savepoint,使用方法为savepoint 名称,可以进行保留点回滚,例如rollback to mark。 五、Oracle中的函数 Oracle中的函数可以分为系统预定义函数和用户定义函数。函数必须有...
`SAVEPOINT`允许你在事务中设置一个点,如果需要,你可以回滚到这个点,但不会影响在此之前的操作。 ```sql COMMIT; // 提交事务,保存所有更改 SAVEPOINT my_savepoint; // 设置保存点 ROLLBACK TO SAVEPOINT my_...
在Oracle数据库系统中,事务(Transaction)是数据库操作的基本单元,它封装了一组数据库操作,这些操作要么全部成功,要么...在日常数据库操作中,应合理使用COMMIT、ROLLBACK和保存点,以实现高效且安全的数据管理。
保存点级别 (OLD SAVEPOINT LEVEL | NEW SAVEPOINT LEVEL) - 该选项用于指定存储过程在执行过程中对事务的保存点级别的控制。 - `OLD SAVEPOINT LEVEL`: 表示存储过程使用旧的保存点级别。 - `NEW SAVEPOINT LEVEL`...
- Savepoint允许在事务中设置保存点,以便部分回滚事务。 - 示例代码: ```sql SAVEPOINT my_savepoint; ROLLBACK TO SAVEPOINT my_savepoint; ``` 2. **一致性和事务** - 事务的一致性保证了数据的完整性和...
3. 设置保存点(Save Point):在事务中,可以通过`SAVEPOINT`创建一个保存点,允许事务在特定点回滚,而不影响之前的操作。例如: ```sql SAVEPOINT before_update; UPDATE SCOTT.GOODS SET g_DESCRIPTION = '新...
例如,`SAVEPOINT s1`创建一个保存点`s1`,之后可以使用`ROLLBACK TO s1`来撤销`s1`之后的所有操作。 **redo日志**是MySQL用来确保事务持久性的关键机制。当事务修改数据页时,改动首先被保存到内存的Buffer Pool,...
- `SAVEPOINT`:设置一个保存点,可以在事务中回滚到这个点,而不是回滚整个事务。 - `RELEASE SAVEPOINT`:删除一个保存点。 - `ROLLBACK TO SAVEPOINT`:回滚到指定的保存点。 5. **InnoDB存储引擎与事务** ...
- **savepoint, rollback to savepoint, release savepoint**: 这些回滚点操作虽然可用,但也需明确声明。 - **SET变量操作**: 支持,但需要用户明确说明使用情况。 此外,对于MySQL的系统函数,`dbproxy`提供了一...
BEGIN开始一个事务,COMMIT提交事务并保存所有更改,ROLLBACK则回滚事务,撤销所有更改,而SAVEPOINT允许在事务中设置一个恢复点,以便在出现问题时部分回滚。 `db - Copy.php`可能是实现这个数据库类的源代码文件...
- **restore(savepoint、checkpoint、none)**:当作业失败或需要重新启动时,可以通过之前生成的保存点(savepoint)或检查点(checkpoint)来恢复作业的状态。 - **作业快照的使用**:Flink支持对作业的状态进行...
- ROLLBACK TO SAVEPOINT:通过指定保存点回滚表到某一状态。 - FLASHBACK TABLE:直接恢复表到先前的版本,无需先创建保存点。 - DROP TABLE RESTORE:即使不小心删除了表,也能恢复。 3. **闪回丢弃** - ...
数据库是信息技术中的核心组成部分,它...以上就是对《数据库系统概论》一书中主要知识点的总结,涵盖了数据库的基本概念、数据模型、SQL语言、数据操作以及安全性等方面。这些知识对于理解和操作数据库系统至关重要。
- **保存点**:通过`conn.setSavepoint("SavePoint1")`设置保存点,可以使用`conn.rollback(savepoint)`回滚到指定保存点。 **4. 结果集处理** - **ResultSet**:执行SQL查询后返回的结果集,可以使用`next()`方法...
SAVEPOINT允许在事务中设置一个恢复点,如果需要,可以回滚到该点而不影响整个事务;SET TRANSACTION语句用来配置事务的隔离级别,影响并发操作时可能出现的脏读、不可重复读和幻读问题。 【并发控制】在多用户环境...
COMMIT提交事务,ROLLBACK回滚事务,SAVEPOINT设置保存点。 9. **并发控制**:Oracle使用行级锁定和多版本并发控制(MVCC)来处理多个用户同时访问数据库的情况,以避免死锁和提高性能。 10. **备份与恢复**:...
【数据库实验六——Oracle操作详解】 在数据库管理中,Oracle是一种广泛应用的关系型数据库管理系统,以其高效、稳定和强大...在实际工作中,对数据的精确控制和事务的合理管理至关重要,确保了数据的安全性和一致性。