JVM(二)JVM之垃圾收集
一、引言 在Java语言中,由于内存分配和回收由JVM自动进行管理,而不需要手动进行内存管理,这就避免了许多常见的内存管理问题,如内存泄漏、悬挂指针等问题。但是,随着程序运行过程中对象的不断创建和销毁,JVM所管理的内存也会不断产生垃圾。如果不及时清理这些垃圾,就会导致内存不足,甚至导致程序崩溃。因此,垃圾收集成为JVM必不可少的一部分,用于自动地回收无用对象所占用的内存空间,使得可用内存得到最大的利用,从而保证程序的正常运行。
二、垃圾标记既然想要清理垃圾,那么首先要能够找到垃圾,那么有哪些方法可确定一个对象是否是垃圾呢?
1.引用计数法引用计数法是一种垃圾收集算法,其核心思想是通过维护每个对象的引用计数器来判断对象是否还有被引用的可能,从而决定是否回收该对象
具体来说,每当一个对象被引用时,该对象的引用计数器就会加1;当一个对象的引用失效时,该对象的引用计数器就会减1。当某个对象的引用计数器为0时,表示该对象没有任何引用指向它,即无法再被访问,因此可以被回收
弊端:如果两个对象相互引用,它们的引用计数器都不为0,但是它们已经不再被程序所使用,因此这两个对象将永远不会被回收
2. ...
华为od机试题
具体题的内容站内自行搜索-华为od机试真题2023
这里不贴链接了,防止侵权什么的
除了最后3个经过验证,其他的不保证全通过率
只是自己随便写了些题目的答案,有些是在不足100%的基础上优化的,自行斟酌吧
1.统一限载货物数最小值1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677private static void minGoods() { Scanner sc = new Scanner(System.in); int len = sc.nextInt(); int[] arr = new int[len]; for (int i = 0; i < len; i++) { arr[i] = sc.nextInt(); } List<Integer> ...
无题
一、引言1.什么是JVMJVM(Java Virtual Machine)是Java平台的核心组件之一,它是一个在计算机上运行Java字节码的虚拟机。JVM是Java语言的核心特性之一,它提供了Java程序的跨平台能力,因为Java代码可以在任何能够运行JVM的操作系统上运行。
JVM负责将Java源代码编译成字节码,然后在运行时解释执行这些字节码。JVM还负责内存管理、垃圾回收、安全性、异常处理等方面的任务。
2.JVM、JRE和JDKJRE(Java Runtime Environment)、JVM(Java Virtual Machine)和JDK(Java Development Kit)是三个Java平台中不同的组件。
JVM是Java平台的核心组件之一,它是一个在计算机上运行Java字节码的虚拟机。JVM负责将Java源代码编译成字节码,然后在运行时解释执行这些字节码。JVM还负责内存管理、垃圾回收、安全性、异常处理等方面的任务。
JRE是Java平台的一部分,包含了Java应用程序所需要的运行时环境,包括JVM以及Java标准库中的类和资源文件。JRE可以用于在计算机上运 ...
MySql(二)MySql事务与锁
一、事务1.引言什么是事务?
在数据库中,事务(Transaction)是指一系列数据库操作序列,这些操作要么全部执行成功,要么全部执行失败回滚,是保证数据库一致性、完整性和隔离性的基本单位。
为什么要有事务?
事务是为了保证数据的一致性、可靠性和隔离性而引入的概念。
在一个复杂的业务逻辑中,可能包含多个操作,如果这些操作不能保证同时成功或同时失败,就会导致数据的不一致性和不可靠性,甚至会损害数据的完整性。而通过引入事务机制,可以将多个操作视为一个整体,要么全部成功,要么全部失败,保证了数据的一致性和可靠性。
经典的转账问题,扣款成功了,但是另一个账户因为宕机没转成功,怎么办?
事务适用场景有哪些?
要求数据的完整性和一致性的场景,例如银行转账、股票交易等,这些操作都需要在一个事务内完成,保证数据的完整性和一致性。
高并发场景,例如电商网站的订单处理,会有大量的订单并发写入数据库,使用事务可以保证并发操作的正确性和效率。
多表操作场景,例如多表关联查询、插入、更新和删除操作,这些操作涉及到多个表的数据,使用事务可以保证数据的一致性,避免出现脏数据。
2.哪些存储引擎支持事务?在My ...
MySql(一)Mysql基础
一、基础架构1.整体架构先看看mysql的整体架构图,如下
即主要分为三层,最上面的连接层,中间的服务层与最底层的存储引擎层
2.连接层MySQL的连接层是指位于MySQL架构中的一个组件,负责管理客户端与MySQL服务器之间的连接,它主要负责以下职责:
1)管理连接:连接层管理客户端与MySQL服务器之间的连接,包括建立、维护和断开连接。连接层能够管理连接池,使得MySQL服务器可以更有效地处理连接请求。
2)安全性:连接层可以提供安全性功能,如SSL/TLS协议和数据加密,以确保连接的安全性。这是特别重要的,因为MySQL通常用于存储敏感信息,如用户密码和财务数据。
3)协议处理:连接层能够处理多种协议,如TCP/IP、Unix套接字等,以适应不同的操作系统和网络环境。
3.服务层缓存mysql的服务层缓存主要包括三个部分:查询缓存、InnoDB缓存和键值缓存
1)查询缓存
最早的缓存机制,只能匹配完全匹配的sql查询语句,语句稍变就无法匹配
而且存在表更新操作会清除查询缓存,缓存占用内存过大等问题
因此在MySQL8.0版本中,已经废弃了查询缓存
2)In ...
Java进阶之并发编程(七)ThreadPoolExecutor
一、引言1.思考先来考虑下,假如没有线程池,每次使用多线程都要创建并销毁,可能存在什么问题?
资源消耗:线程的创建和销毁是一项昂贵的操作,会消耗大量的 CPU 和内存资源。频繁地创建和销毁线程可能会导致资源的浪费和系统性能的下降。
稳定性:在创建和销毁线程的过程中,线程状态的切换可能会导致程序不稳定。例如,在线程销毁之前,可能存在一段时间的竞态条件,导致程序出现不一致的行为。
并发性能:在高并发场景下,频繁地创建和销毁线程会导致线程数的不稳定,进而影响程序的并发性能。过多的线程数会导致 CPU 和内存的浪费,而过少的线程数则会导致任务执行的延迟和并发性能的下降。
因此,使用线程池可以避免频繁地创建和销毁线程,从而节省资源、提高程序的稳定性和并发性能。
2.设计既然想要利用池化技术解决线程频繁创建和销毁的问题,那么该如何设计呢?
如何实现线程的复用?
能实现线程复用的唯一方式,就是让线程不结束
那么如何让线程能够执行新的任务呢?
共享内存—>List.add()
那么线程无任务时,就一直空转吗?
有任务来时,执行任务;无任务时,阻塞
结论:
使用阻塞队列的方式,来实现线程池技术 ...






