CodeGym University
学习
课程
任务
调查和小测验
游戏
帮助
提醒时间表
社区
用户
论坛
聊天
文章
成功故事
活动
评论
订阅服务
浅色主题
课程
评论
关于我们
开始
开始学习
立即开始学习
目标地图
课程
全部目标
全部级别
Java内存模型
模块 3
第 18 级,
课程 2
Java内存模型简介 Java 内存模型 (JMM)描述了线程在 Java 运行时环境中的行为。内存模型是 Java 语言语义的一部分,它描述了程序员在开发不是针对特定 Java 机器而是针对整个 Java 的软件时可以和不应该期望的内容。 1995 年开发的原始 Java 内存模型(特别是指“percolocal 内存”)被认为是失败的:许多优化无法在不失去代码安全保证的情况下进行。特别是,编写多线程“单”有几种选择: 访问单例的每个行为(即使对象是很久以前创建的,并且什么
Java 中的垃圾收集
模块 3
第 18 级,
课程 3
回想一下 Java 中的垃圾回收是什么 垃圾收集是通过销毁未使用的对象来回收完整的运行时内存的过程。 有时程序员可能会忘记销毁无用的对象,而分配给它们的内存并没有被释放。越来越多的系统内存被消耗,最终不再分配。此类应用程序遭受“内存泄漏”。 在某个点之后,不再有足够的内存来创建新对象,并且程序由于OutOfMemoryError异常终止。 Java 中的垃圾收集是 Java 程序自动管理内存的过程。Java 程序被编译成在 Java 虚拟机 (JVM) 上运行的字节码。 当
世代垃圾收集
模块 3
第 18 级,
课程 4
处理多代对象 Java 垃圾收集器实现了分代垃圾收集策略,可以按年龄对对象进行分类。 JVM 中的这种需要(标记和压缩所有对象)可以称为低效。由于分配了大量对象,因此它们的列表会增长,从而导致垃圾收集时间增加。对应用程序的实证分析表明,Java 中的大多数对象都是短暂的。 JVM中的堆内存区分为三部分: 年轻一代 新创建的对象从年轻一代开始。年轻一代进一步细分为两类。 Eden Space - 所有新对象都从这里开始,它们被分配初始内存。 幸存者空间(FromSpace 和
Java中垃圾收集器的类型
模块 3
第 18 级,
课程 5
串行GC 垃圾收集通过从堆中删除未引用的对象并为新创建的对象腾出空间来提高 Java 中的内存效率。 Java 虚拟机有八种类型的垃圾收集器。让我们详细考虑它们中的每一个。 Serial GC是最简单的 GC 实现。它适用于在单线程环境中运行的小型应用程序。所有垃圾收集事件都在同一线程上按顺序执行。压缩在每次垃圾收集后执行。 运行收集器会导致“world stop”事件,此时整个应用程序都会暂停。由于整个应用程序在垃圾收集期间被冻结,如果您想尽可能降低延迟,您不应该在现实生活
选择Java中的垃圾收集器
模块 3
第 18 级,
课程 6
7.1* 如何选择合适的垃圾收集器 如果您的应用程序没有严格的延迟要求,您应该只运行应用程序并让 JVM 自己选择正确的收集器。 在大多数情况下,默认设置工作正常。如有必要,您可以调整堆大小以提高性能。如果性能仍然不如预期,请尝试修改收集器以满足您的应用程序要求。 顺序的。如果应用程序有一个小数据集(最多约 100 MB)和/或它将在没有任何延迟要求的单个处理器上运行。 并行。如果优先级是应用程序的峰值性能并且没有延迟要求(或者一秒或更长时间的暂停是可以接受的)。 内容管理系
Java 中的垃圾链接
模块 3
第 18 级,
课程 7
8.1 Java 中的弱引用 Java 中有多种引用。 有StrongReference - 这些是我们每天创建的最常见的链接。 Object object = new Object();//создал обьект
Java 并发库
模块 3
第 19 级,
课程 0
如果字段被声明为或由在任何读写之前获取的唯一锁保护,则对该字段的读写是原子操作。但是如果仍然遇到错误,那么你会得到一个关于重新排序的错误(改变顺序,重新排序)。它在不正确同步的多线程程序中表现出来,其中一个线程可以观察到其他线程产生的效果。
Java 中的原子操作
模块 3
第 19 级,
课程 1
原子操作出现的先决条件 让我们看一下这个示例,以帮助您了解原子操作的工作原理: public class Counter {
并发集合
模块 3
第 19 级,
课程 2
CopyOnWriteArrayList 对给定集合的add、set、remove操作会导致创建内部数组的新副本。这确保我们不会捕获ConcurrentModificationException。 请记住,在复制数组时,只会复制对对象的引用,包括对非线程安全元素字段的访问。此类集合最适用于写入操作最少的情况。 CopyOnWriteArrayList是ArrayList 的线程安全模拟,基于 CopyOnWrite 算法实现。其他方法和构造函数如下所述: CopyOnW
并发队列
模块 3
第 19 级,
课程 3
非阻塞队列 链接节点上的线程安全和最重要的非阻塞队列实现。 ConcurrentLinkedQueue - 它使用适用于垃圾收集器的无等待算法。该算法非常高效且快速,因为它是基于 CAS 构建的。size()方法可以运行很长时间,所以最好不要一直拉。 ConcurrentLinkedDeque - Deque 代表双端队列。这意味着可以从两侧添加和提取数据。因此,该类支持两种操作模式:FIFO(先进先出)和 LIFO(后进先出)。 实际上,如果绝对需要 LIFO,
同步器:在 Java 中同步对资源的访问
模块 3
第 19 级,
课程 4
信号 当使用文件系统时需要限制线程数时,通常会使用信号量。通过计数器控制对文件或其他共享资源的访问。如果其值大于零,则允许访问,但同时计数器会减少。 在计数器归零的那一刻,当前线程将被阻塞,直到资源被另一个线程释放。必须通过构造函数设置权限参数的数量。 您需要单独选择此参数,具体取决于您的计算机或笔记本电脑的功率。 public class Main {
执行者:可执行对象
模块 3
第 19 级,
课程 5
6.1 可执行对象 所以我们得到了包裹的最大部分。它将描述用于运行异步任务并能够通过 Future 和 Callable 接口获取结果的接口,以及用于创建线程池的服务和工厂:ThreadPoolExecutor、ScheduledPoolExecutor、ForkJoinPool。 为了更好地理解,让我们对接口和类进行一些分解。 6.2 可执行对象的实现 Future是获取异步操作结果的绝佳接口。这里的关键方法是 get 方法,它会阻塞当前线程(有或没有超时),直到另一
显示更多
1
...
32
33
34
35
Please enable JavaScript to continue using this application.