jvm
文章平均质量分 82
zhangyingchengqi
学无止境。
展开
-
xmind文件大,导致运行缓慢且无法保存
我的一个xmind文件体积十分大.如下:在打开此文件后,对它编辑时,出现以下问题:1.编辑十分的慢,表现在选定一个编辑框后,要输入文字十分困难,卡顿.2.保存文件慢,而且会出现保存时内存溢出的问题.用任务管理器查看此xmind进程占用了接近1G的内存. 考虑是软件内存配置的问题。到xmind的安装目录中查看配置文件 ,发现xmind是用java语言开发的软件,它的配置文件 xmind.ini中有关于虚拟机内存配置的选项.xmind.ini它的配置项中原配...原创 2021-10-12 10:46:13 · 10339 阅读 · 6 评论 -
并发编程(三) - 重排序,happens-before原则,顺序一致性
重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。上一篇文章中已经介绍了从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序:1属于编译器重排序,2和3属于处理器重排序。 这些重排序可能会导致多线程程序出现内存可见性问题。在单线程程序中,对存在控制依赖的操作重排序,不会改变执行结果(这也是as-if-serial语义允许对存在控制依赖的操作做重排序的原因);但在多线程程序中,对存在控制依赖的操作重排序,可能会改变程序的执行结果。1.数据依...原创 2021-02-08 18:30:13 · 805 阅读 · 0 评论 -
并发编程(二) - JMM(java内存模型)
java线程间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员.1. 并发编程的关键问题在并发编程中,需要处理两个关键问题: 线程之间如何通信及线程之间如何同步? 线程之间通信机制有两种: 共享内存、消息传递。1.1.通信是指线程之间以何种机制来交换信息1.1.1共享内存的通信机制在共享内存的并发模型里, 线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。1.1.2 消息传递的通信机制在消息传递的并发模型里,线程之间没用公共状态,线程之间...原创 2021-01-17 13:06:57 · 515 阅读 · 1 评论 -
JVM(四) Java虚拟机中的方法区或永久区
和java堆一样,方法区是一块所有线程共享的内存区域。它用于保存系统的类信息(字段,方法,常量池等). 方法区的大小决定系统可保存多少个类.原创 2021-01-07 11:51:55 · 467 阅读 · 0 评论 -
JVM(三) Java虚拟机堆
1、堆结构分代的意义 Java虚拟机根据对象存活的周期不同,把堆内存划分为几块,一般分为新生代、老年代和永久代(对HotSpot虚拟机而言),这就是JVM的内存分代策略。 堆内存是虚拟机管理的内存中最大的一块,也是垃圾回收最频繁的一块区域,程序中所有的对象实例都存放在堆内存中。给堆内存分代是为了提高对象内存分配和垃圾回收的效率。试想一下,如果堆内存没有区域划分,所有的新创建的对象和生命周期很长的对象放在一起,随着程序的执行,堆内存需要频繁进行垃圾收集,而每次回收都要遍历所有的对象,遍历这些对象所花原创 2021-01-05 14:12:15 · 211 阅读 · 0 评论 -
JVM(二) Java虚拟机运行时参数设置
官方文档: https://www.oracle.com/java/technologies/javase/vmoptions-jsp.htmlJVM可以在java程序运行时设置JVM的参数,语法如下:用法: java [-options] class [args...] (执行类) 或 java [-options] -jar jarfile [args...] (执行 jar 文件)-options: JVM的启动参数clas...原创 2021-01-04 19:54:15 · 1207 阅读 · 0 评论 -
JVM(一) Java虚拟机基本结构概述
java虚拟机的基本结构:1. 类加载子系统: 它主要负责从文件系统或网络中加载Class信息,加载的类信息都存放在方法区的内存空间中。 除了类信息外,方法区中可能还存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是class文件常量池部分的内存映射). 当JVM使用类加载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例2.方法区...原创 2021-01-04 18:58:57 · 283 阅读 · 2 评论 -
java中浮点数表示方式
java虚拟机中的浮点数分为float和double两种,分别为32位和64位.它参考了IEEE 754的规范对浮点数进行处理。下面以float为例 ,分析一下float数的表示方法.float的32位分成三个部分来表示一个浮点数:浮点数的取值计算公式为:解析: 1) 当符号位s的取值为0时,sflag为1, 当s为1时,sflag为-1. 所以有: 2)e 为指数位,用 8 位表示 3) m 为尾数值,占用空间为23位,但是根据 e 的取...原创 2020-12-27 15:38:29 · 2733 阅读 · 2 评论 -
java中整数表示方式补码
在java虚拟机规范中定义的整数类型有byte(8位),short(16位),int(32位),long(64位),它们都是有符号整数,即最高位为符号位。这些整数JVM中使用补码来表示. 那么我们首先来了解一下原码,反码和补码.1. 原码符号位+二进制值,符号位在最左边. 例如:32位的整型原码: 10的原码: 00000000 00000000 00000000 00001010 // 最左边的0表示正数-10的原码: 10000000 00000000 00000000 000..原创 2020-12-27 15:03:24 · 904 阅读 · 1 评论