随笔分类 - 深入理解Java虚拟机(第三版)
摘要:这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用, 线上系统慎用 可以先停掉线上的该节点,然后再执行jmap 参考:https://www.jianshu.com/p/a
阅读全文
摘要:本节常见面试题 如何判断对象是否死亡(两种方法)。 简单的介绍一下强引用、软引用、弱引用、虚引用(虚引用与软引用和弱引用的区别、使用软引用能带来的好处)。 如何判断一个常量是废弃常量 如何判断一个类是无用的类 堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断那些对象已经死亡(即不能再被任
阅读全文
摘要:堆内存常见的分配策略 针对的是Serial 加 Serial Old 客户端默认收集器组合下的内存分配和回收策略 经典的垃圾收集器 CMS 收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的垃圾收集器。从名字可以看出,CMS 是基于标记-清除算法的
阅读全文
摘要:4.1 String 类和常量池 String 对象的两种创建方式: String str1 = "abcd";//先检查字符串常量池中有没有"abcd",如果字符串常量池中没有,则创建一个,然后 str1 指向字符串常量池中的对象,如果有,则直接将 str1 指向"abcd""; String s
阅读全文
摘要:2.3.1 Java 对象的创建过程(五步) 下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么 Step1:类加载检查 虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解
阅读全文
摘要:2.1 概述 对Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要为每个对象的new操作去写配对的delete/free 代码,不容易出现内存泄露和内存溢出的问题。不过,仍然需要Java虚拟机是如何使用内存的,方便我们定位内存泄露和内存溢出的问题: 2.2 运行时数据区域 Java虚拟机
阅读全文
摘要:14. 线程安全与锁优化 1. 什么是线程安全? 当多个线程同时访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替进行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那就称这个对象是线程安全的 2. Java语言中的线程安全 我们将J
阅读全文
摘要:13.Java内存模型与线程 1.Java内存模型 Java 内存模型的主要目的是定义程序中各种变量的访问规则,即关注在虚拟机中把变量值存储到主内存和从内存中取出变量值的底层细节 该变量指的是 实例字段、静态字段、和构成数组对象的元素,不包含线程私有的 局部变量和方法参数 Java线程 -》 工作内
阅读全文