第一,解决启动卡的问题 只要修改两个Java虚拟机参数,就彻底解决了卡的问题了。 操作步骤如下: 找到C:\Program Files\JetBrains\PhpStorm 2018.2.2\bin 安装目录下 1.找到phpstorm64.exe.vmoptions文件和phpstorm.exe. ...
分类:
Web程序 时间:
2018-09-10 00:58:18
阅读次数:
265
一、运行时内存分配 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 这些区域都有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而建立和销毁。 线程私有区域(生命周期与线程相同) a) 虚拟机栈 虚拟机栈 ...
分类:
编程语言 时间:
2018-09-09 16:49:31
阅读次数:
160
一、垃圾收集的概念 在Java虚拟机运行时数据区中程序计数器、虚拟机栈和本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作,每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,因为方法结束或线程 ...
分类:
其他好文 时间:
2018-09-09 14:57:45
阅读次数:
184
1.执行引擎 所有Java虚拟机的执行引擎都是一致的: 输入的是字节码文件,处理过程就是解析过程,最后输出执行结果。 在整个过程不同的数据在不同的结构中进行处理。 2.栈帧 jvm进行方法调用和方法执行的数据结构,是虚拟机栈的元素。 (图片来自网络) 2.1 局部变量表 存放方法参数和方法内部定义的 ...
分类:
其他好文 时间:
2018-09-09 14:52:41
阅读次数:
176
第一部分:What Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程。 那么为什么需要序列化呢? 第一种情况是:一般情况下Java对象的声明周期都比Java虚拟机的要短,实际应用中我们希望在JVM停止运行之后能够持久化指定的对象,这 ...
分类:
编程语言 时间:
2018-09-09 14:43:54
阅读次数:
182
一、 运行时数据区域 一、 运行时数据区域 1.1 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是本地方法则为空)。 1.2 Java 虚拟机栈 每个 Java 方法在执行的同时会创建一个栈帧用于存储局部变量表、操作数栈、常量池引用等信息。从方法调用直至执行完成的过程,就对应着一 ...
分类:
编程语言 时间:
2018-09-09 11:54:58
阅读次数:
132
垃圾收集算法 1. 标记 - 清除 将存活的对象进行标记,然后清理掉未被标记的对象。 不足: 标记和清除过程效率都不高; 会产生大量不连续的内存碎片,导致无法给大对象分配内存。 2. 标记 - 整理 让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。 3. 复制 将内存划分为大小相等的两 ...
分类:
编程语言 时间:
2018-09-09 11:46:24
阅读次数:
162
类加载机制 类是在运行期间第一次使用时动态加载的,而不是编译时期一次性加载。因为如果在编译时期一次性加载,那么会占用很多的内存。 1.1 类的生命周期 包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始 ...
分类:
编程语言 时间:
2018-09-09 11:37:36
阅读次数:
183
三、内存分配与回收策略 三、内存分配与回收策略 1.1 Minor GC 和 Full GC 1.1 Minor GC 和 Full GC Minor GC:发生在新生代上,因为新生代对象存活时间很短,因此 Minor GC 会频繁执行,执行的速度一般也会比较快。 Full GC:发生在老年代上,老 ...
分类:
编程语言 时间:
2018-09-09 11:37:27
阅读次数:
164
1.类的生命周期 2.初始化被触发的情况 初始化前自然要完成加载、验证、准备这三个动作。 3.类加载过程 类加载全过程分为:加载、验证、准备、解析、初始化这5个阶段所执行的具体操作。 所以不触发初始化就不会进行类加载,懒加载也由此而来。 如 类文件中有个 a.f() 加载时把a放入方法区的常量池中, ...
分类:
其他好文 时间:
2018-09-08 22:45:28
阅读次数:
205