JVM 内存模型JVM 内存模型 Heap Method Area Runtime Constant Pool Thread Thread Thread PC Register JVM Stack Native Method Stack PC Register JVM Stack Native Method Stack PC Register JVM Stack Native Method0 码力 | 1 页 | 48.42 KB | 1 年前3
Java 应用与开发 - Java 内存模型与分配机制大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 应用与开发 Java 内存模型与分配机制 王晓东 wangxiaodong@ouc.edu.cn 中国海洋大学 September 30, 2018 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 学习目标 1. 理解 JVM 内存模型,掌握 JVM 内存构成 2. 理解 程序的运行过程,学会通过调试模式观察内存的 变化 3. 了解 Java 内存管理,认识垃圾回收 4. 建立编程时高效利用内存、避免内存溢出的理念 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 ���� Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 虚拟机(Java Virtual Machine, JVM) ▶ Java 程序运行在 JVM 上,JVM 是程序与操作系统之间的桥梁。 ▶ JVM 实现了 Java 的平台无关性。 ▶ JVM 是内存分配的前提。 类装载子系统 Class文件0 码力 | 44 页 | 818.30 KB | 1 年前3
《Java 应用与开发》课程讲义 - 王晓东3 二维数组 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.1 二维数组的声明和内存分配 . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2 二维数组定义的含义 . . . . . . . . . . . . . . . . . . . 53 5.3.1 static 属性和方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.2 初始化块 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 5.3.3 静态导入 . . . . . . . . . 6 Java 内存模型与分配机制 58 6.1 Java 内存模型 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 6.1.1 Java 虚拟机(Java Virtual Machine, JVM) . . . . . . . . . . . . . . 59 6.1.2 JVM 内存模型 . .0 码力 | 330 页 | 6.54 MB | 1 年前3
Java 对象的创建过程的加载操作(详细过程可参考"类的加载流程" )。 分配内存 当类加载检查通过后,接下来虚拟机需要为新生对象分配内存,为对象分配空间的任务等同于把一块 定大小的内存从 Java 堆中划分出来。分配内存的方式主要有两种:指针碰撞和空闲列表。 具体选择哪种方式取决于Java堆是否规整。而Java堆是否规整取决于垃圾收集器所采用的垃圾回收算 是否具有空间压缩整理的能力。 具体来说,指针碰撞分配内存空间的过程如下: 在Jav 在Java堆规整的情况下,所有被使用过的内存放到一边,所有未被使用过的内存放置到另一边,中间 置一个指针作为分界点的指示器,当需要分配内存空间时,只需要将空闲指针向空闲内存方向移动对 内存大小的位置即可。 原文链接:Java 对象的创建过程 该算法能够使用的前提必须是空间是规整的,因为如果空间是碎片化的,很明显该算法就会失效。 另一种算法是空闲列表,其分配内存的过程如下: 虚拟机会维护一个列表,该列表中会记录那些内存块是可用的,在分配内存时,会在空闲列表中找到 用的,在分配内存时,会在空闲列表中找到 块足够大的内存块来给对象实例,最后更新列表记录。 当然该算法也有不足,由于需要时刻维护一个空闲列表,因而会增加空间和时间开销,但优点就是它 以用来对离散的空间进行内存分配。 最后在分配内存时,可能也会存在并发安全的问题,为了解决该问题,虚拟机采用两种方式来解决: ● CAS+失败重试: CAS 是乐观锁的一种实现方式。所谓乐观锁就是,每次不加锁而是假设没有冲突0 码力 | 4 页 | 389.87 KB | 1 年前3
Hello 算法 1.1.0 Java版4.3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观 到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版4.3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观 到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 � 如果你对数据结构、算法、数组和二分查找等概念仍感到一知半解,请继续往下阅读,本书将0 码力 | 376 页 | 17.59 MB | 1 年前3
Linux Docker Messfrom Scratch. 阴险的笑 Architecture Shell Kernel File System Applications Architecture Kernel n 内存管理 n 进程管理 n 文件系统(虚拟文件系统 VFS) n 设备驱动 n 网络接口 建议阅读Linux内核源代码,可以从Linux-0.11入手,推荐Linux内核完全注释 (赵炯著) Architecture 普通文件:C语言元代码、SHELL脚本、二进制的可执行文件等,分为 纯文本和二进制 目录文件:目录,存储文件的唯一地方 链接文件:指向同一个文件或目录的的文件 n 设备文件:与系统外设相关的,通常在/dev下面,分为块设备和字符 设备 n 管道(FIFO)文件 : 提供进程建通信的一种方式 套接字(socket) 文件: 该文件类型与网络通信有关 Architecture File System 标准化的目录结构 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地 方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和 使用,系统或程序通过 inode 号寻找正确的文件数据块。 Architecture0 码力 | 77 页 | 7.40 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版4.3 列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 4.4 内存与缓存 * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.5 小结 . . . 所示,对于顶部标有文件名称的代码块,我们可以在仓库的 codes 文件夹内 找到对应的源代码文件。源代码文件可一键运行,将帮助你节省不必要的调试时间,让你能够专注于学习内 容。 图 0‑5 代码块与对应的源代码文件 除了本地运行代码,网页版还支持 Python 代码的可视化运行(基于 pythontutor 实现)。如图 0‑6 所示,你 可以点击代码块下方的“可视化运行”来展开视图,观 到了可行的找零方 案。从数据结构与算法的角度看,这种方法本质上是“贪心”算法。 小到烹饪一道菜,大到星际航行,几乎所有问题的解决都离不开算法。计算机的出现使得我们能够通过编程 将数据结构存储在内存中,同时编写代码调用 CPU 和 GPU 执行算法。这样一来,我们就能把生活中的问题 转移到计算机上,以更高效的方式解决各种复杂问题。 Tip 如果你对数据结构、算法、数组和二分查找等概念仍感0 码力 | 379 页 | 18.48 MB | 10 月前3
Apache Shiro 1.2.x Reference Manual 中文翻译的程序在同一个 JVM 中运 行时,各程序有自己独立的实例会更好些,而不是共同引用一块静态内存。 改变配置就需要重新编译你的程序。 然而,尽管有这些不足,在程序中定制的这种方法在限制内存(memory-constrained )的环 境中还是很有价值的,像智能电话程序。如果你的程序不是运行在一个限制内存的环境中, 你会发现基于文本的配置会更易读易用。 INI Configuration 访问系统次数过多而被锁 定将会怎样呢? Shiro拥有丰富的运行期异常AuthenticationException可以精确标明为何验证失败,你可以将 login 放入到 try/catch 块中并捕获所有你想捕获的异常并对它们做出处理。例如: try { currentUser.login(token); } catch ( UnknownAccountException uae 上面的例子展示了一种以冒号分割的特殊形式的字符串,定义于Shiro的 org.apache.shiro.authz.permission.WildcardPermission中,它适合大多数用户的需求。 上面的代码块基本上是下面这段代码的缩写: Subject currentUser = SecurityUtils.getSubject(); Permission p = new WildcardPermis0 码力 | 196 页 | 2.34 MB | 1 年前3
Apache Shiro参考手册中文版Shiro 的应用程序在同一个 JVM 中运 行。如果该实例是一个应用程序单例,而不是一个静态内存引用就再好不过了。 每当你想改变 Shiro 配置时,它需要你重新编译你的应用程序。 然而,即使有这么多警告,直接的编程操作方法在内存受限的环境中仍然是有价值的,如智能手机应用。若你的应 用程序不在一个内存受限的环境下运行,你会发现基于文本的配置要更容易使用和阅读。 INI Configuration 的次数太多, 亦或是他们的帐户被锁定? Shiro 拥有丰富的运行时 AuthenticationException 层次结构,可以指出尝试失败的确切原因。你可以用一个 try/catch 块将 login 方法包围起来,然后捕捉任何你期望的异常并进行相应的反应。例如: try { currentUser.login(token); } catch ( UnknownAccountException Authorizing Subjects(授权的 Subjects) 在 Shiro 中执行授权可以有 3 种方式: 编写代码——你可以在你的 Java 代码中用像 if 和 else 块的结构执行授权检查。 JDK 的注解——你可以添加授权注解给你的 Java 方法。 JSP/GSP 标签库——你可以控制基于角色和权限的 JSP 或者 GSP 页面输出。 Programmatic0 码力 | 92 页 | 1.16 MB | 1 年前3
共 32 条
- 1
- 2
- 3
- 4













