网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型,目的很简单,让你读完本文以后,就知道到底Java内存模型是什么,为什么要 ...
分类:
编程语言 时间:
2018-08-21 10:50:40
阅读次数:
142
垃圾回收机制(GC)是java常重要特性之一。它让开发者无需关注内存的创建和释放,而是通过GC自动回收垃圾(无用对象)。 哪些内存需要回收 java堆和方法区是垃圾回收的主要内存区域,程序计数器、虚拟机栈、本地方法栈这几个内存区域是现成私有的,线程结束时内存自然也就回收了。 如何判断对象可回收? 在 ...
分类:
编程语言 时间:
2018-08-17 22:20:01
阅读次数:
177
前几天,发了一篇文章,介绍了一下JVM内存结构、Java内存模型以及Java对象模型之间的区别。有很多小伙伴反馈希望可以深入的讲解下每个知识点。Java内存模型,是这三个知识点当中最晦涩难懂的一个,而且涉及到很多背景知识和相关知识。 网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》 ...
分类:
编程语言 时间:
2018-08-17 16:33:25
阅读次数:
174
java线程有6种状态: 新建线程new,启动线程runnable,阻塞block,限时等待timed_waiting,等待线程waiting,终止线程terminated 1.限时等待timed waiting :处于这种状态的线程不会被分配cpu执行时间。不过无须等待被其他线程显式地唤醒,在一定 ...
分类:
编程语言 时间:
2018-08-15 15:31:19
阅读次数:
169
主要内容如下: JVM启动流程 JVM基本结构 内存模型 编译和解释运行的概念 一、JVM启动流程: JVM启动时,是由java命令/javaw命令来启动的。 二、JVM基本结构: JVM基本结构图: 《深入理解Java虚拟机(第二版)》中的描述是下面这个样子的: Java中的内存分配: Java程 ...
分类:
编程语言 时间:
2018-08-14 21:56:36
阅读次数:
132
引自《深入理解Java虚拟机》 关键词:优先级,大对象,老不死对象 三个策略: 对象优先在Eden区分配 大对象直接进入老年代(大对象举例:很长的String,很长的数组) 长期存活的对象进入老年代 长期存活:从Eden出生,每经历一次Minor GC 年龄加1(出生时为0,年龄为1时已经在Surv ...
分类:
其他好文 时间:
2018-08-13 20:58:14
阅读次数:
135
3.1 概述 垃圾收集器要解决哪些问题? 哪些内存需要回收 什么时候回收 如何回收 哪些内存需要回收 什么时候回收 如何回收 引用计数算法:当有一个地方引用,+1,引用失效,-1。 缺点:对象之间相互循环引用的问题。 可达性分析算法: 思路:通过一系列的成为“Gc Roots"的对象作为起始点,从这 ...
分类:
编程语言 时间:
2018-08-11 15:35:33
阅读次数:
190
要想理解反射的原理,首先要了解什么是类型信息。Java让我们在运行时识别对象和类的信息,主要有2种方式:一种是传统的RTTI,它假定我们在编译时已经知道了所有的类型信息;另一种是反射机制,它允许我们在运行时发现和使用类的信息。 1、Class对象 理解RTTI在Java中的工作原理,首先需要知道类型 ...
分类:
编程语言 时间:
2018-08-10 13:40:25
阅读次数:
185
一.前言 物理机的执行引擎是直接在物理硬件如CPU、操作系统、指令集上运行的,但是对于虚拟机来讲,他的执行引擎由自己实现。 执行引擎有统一的外观(Java虚拟机规范),不同类型的虚拟机都遵循了这一规范,输入字节码文件,解析字节码处理,然后输出结果。 二.运行时栈帧结构 1、栈帧概念栈帧(Stack ...
分类:
编程语言 时间:
2018-08-06 14:31:35
阅读次数:
198
一.程序存储格式 统一的程序存储格式:不同平台的虚拟机于所有平台都统一使用程序存储格式——字节码(ByteCode); Java 虚拟机不关心 Class 文件的来源,而只和“Class文件"这种二进制文件格式关联,也就是说Java虚拟机只认识“Class"文件; Java 编译器可以把 Java ...
分类:
编程语言 时间:
2018-08-06 11:42:12
阅读次数:
176