
JVM内存模型
文章平均质量分 66
北海冥鱼未眠
道路在身旁!
展开
-
JAVA排查bug的相关命令
jstat(Java Virtual Machine Statistics Monitoring Tool)是JDK提供的一个可以监控Java虚拟机各种运行状态信息的命令行工具。它可以显示Java虚拟机中的类加载、内存、垃圾收集、即时编译等运行状态的信息。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。用来查看所有的java进程的pid号。...原创 2022-08-10 13:25:36 · 231 阅读 · 0 评论 -
Java中的垃圾回收
如何确定哪些东西是垃圾? ·引用计数法:Java中引用和对象是有关联的,如果我们想要操作一个对象,一定要只有这个对象 的引用,那么这个时候我们就可以根据对象被引用的次数来判断这个对象是否是可回收的对象。 ·缺点:引用计数法有一个缺陷就是无法解决循环引用问题,也就是说当对象 A 引用对象 B, 对象B 又引用者对象 A,那么此时 A,B 对象的引用计数器都不为零,也就造成无法完成垃圾回 收,所以主流的虚拟机都没有采用这种算法。 ·可达性分析法(引用链法):为了解决引用计数法的循环引用.原创 2022-03-19 17:25:36 · 1044 阅读 · 0 评论 -
两个线程调用同一个对象的同一个方法
两个线程调用同一个对象的同一个方法,会怎么样? public static void main(String[] args) { // System.out.println(String.valueOf(null)); Test test = new Test(); new Thread(new Runnable() { @Override public void run() { t原创 2022-03-12 17:49:40 · 1842 阅读 · 0 评论 -
volatile关键字
volatile 要求 掌握线程安全要考虑的三个问题 掌握 volatile 能解决哪些问题 原子性 起因:多线程下,不同线程的指令发生了交错导致的共享变量的读写混乱 解决:用悲观锁或乐观锁解决,volatile 并不能解决原子性 可见性 起因:由于编译器优化、或缓存优化、或 CPU 指令重排序优化导致的对共享变量所做的修改另外的线程看不到,其实这个共享变量也已经同步到主内存了,关于另外一个线程看不到的原因,涉及到JIT的知识,参考文章。 解决:用 volatile 修饰共享变量,能够防止编译器对原创 2022-03-04 12:31:07 · 149 阅读 · 0 评论 -
JVM内存模型、内存调优JProfiles、GC算法
Java的内存管理采用[自动内存管理]机制,因为这个自动管理机制,Java程序员就不需要去写释放内存的 代码,而且不容易出现内存泄漏问题(比C/C++程序员少一些烦恼)。但是由于内存的申请和释放都交给了 Java虚拟机,一旦出现内存泄漏和溢出问题时,在不了解Java虚拟机内存结构和自动管理机制的情况下,就 很难排查问题的所在。所以如果想要成为一个优秀的程序员或者进阶为一个牛逼的架构师,掌握Java虚拟机 的自动内存管理机制那是必须的。 摘自:https://www.cnblogs.com/aflyun/p/原创 2022-02-23 19:16:25 · 183 阅读 · 0 评论