要弄懂JVM的垃圾回收,首先要知道我们要回收什么,在哪回收,什么时候回收。 一、JVM内存模型 java虚拟机把内存模型分为了这么几部分 (1)程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器。 (2 ...
分类:
其他好文 时间:
2019-02-06 21:20:21
阅读次数:
181
程序中包含着运行环境,运行环境是操作系统和计算机的主机两者的综合,也就是说,操作系统和硬件决定了程序的运行环境。我们都知道应用程序,也都用过,应用程序向操作系统传递指令的途径称为API。 我们可以利用虚拟机获得其他操作系统环境,通过利用虚拟机,可以运行应用。而Java虚拟机也能提供相同运行环境,不同 ...
分类:
其他好文 时间:
2019-02-05 20:53:07
阅读次数:
192
Java 的自动内存管理主要是针对对象内存的回收和对象内存的分配。同时,Java 自动内存管理最核心的功能是 堆 内存中对象的分配与回收。 JDK1.8之前的堆内存示意图: 从上图可以看出堆内存分为新生代、老年代和永久代。新生代又被进一步分为:Eden 区+Survivor1 区+Survivor2 ...
分类:
编程语言 时间:
2019-02-04 12:52:25
阅读次数:
261
无关性 无关性的体现有两个方面: 1、平台无关性:可在不同的操作系统和机器指令集上执行,可在不同厂商的虚拟机平台上执行。 2、语言无关性:用不同编程语言写出的代码编译生成的文件都可以运行。 实现思想: 面向接口,定义虚拟机和编译器之间的接口规范。也就是编译后文件的存储格式——字节码(ByteCode ...
分类:
编程语言 时间:
2019-02-02 19:21:55
阅读次数:
194
高性能硬件上的程序部署策略 在高性能硬件上部署程序,目前主要有两种方式: 通过64位JDK来使用大内存。 -- 缺点:GC停顿时间长 使用若干个32位虚拟机建立逻辑集群来利用硬件资源。 -- 思想: 分治,汇总。 缺点:分布式/多实例的缺点,如数据共享,数据一致性,一致性hash等。 堆外内存导致的 ...
分类:
编程语言 时间:
2019-02-02 12:48:50
阅读次数:
211
问题及答案来源自《Java程序员面试笔试宝典》第四章 Java基础知识 4.8Java平台与内存管理 1、为什么说Java是平台独立性语言? 平台独立性是指可以在一个平台上编写和编译程序,然后在其他平台上运行 保证Java具有平台独立性的机制为中间码和JVM(Java虚拟机),Java程序编译后不是 ...
分类:
编程语言 时间:
2019-02-01 19:43:20
阅读次数:
215
一.JVM启动流程 二.JVM基本结构 三.java并发基础 在并发编程中存在两个关键问题①线程之间如何通信 ②线程之间如何同步。 通信 通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,线程之间 ...
分类:
编程语言 时间:
2019-02-01 13:06:05
阅读次数:
240
1、学习目的 当需要排查各种内存溢出、 内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对这些“自动化”的技术实施必要的监控和调节。 Java内存运行时区域的各个部分,其中程序计数器、 虚拟机栈、 本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊 ...
分类:
编程语言 时间:
2019-02-01 10:13:45
阅读次数:
216
2、HotSpot虚拟机对象探秘 对象的创建过程 1、加载类 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、 解析和初始化过。 如果没有,那必须先执行相应的类加载过程。 2、分配内存 在类加载检查通过后,接下来 ...
分类:
编程语言 时间:
2019-02-01 10:13:12
阅读次数:
221
一.需要回收的内存区域 程序计数器、虚拟机栈、本地方法栈 3 个区域随线程生灭(因为是线程私有),栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。而 Java 堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处 ...
分类:
编程语言 时间:
2019-01-31 22:52:36
阅读次数:
237