随笔分类 -  JVM

摘要:下载 https://jdk.java.net/jmc/ 使用 https://www.oracle.com/java/technologies/javase/jmc-install.html windows 下编辑 jmc.ini,设置 JDK 路径 -vm D:\PcAPP\jdk-11.0.7 阅读全文
posted @ 2020-07-23 14:13 江湖小小白 阅读(1499) 评论(0) 推荐(0) 编辑
摘要:一、jmx 方式 加上如下启动参数,以 tomcat 为例,修改 bin\catalina 文件,在开始位置添加 JAVA_OPTS JAVA_OPTS="-Djava.rmi.server.hostname=192.168.8.229 -Dcom.sun.management.jmxremote. 阅读全文
posted @ 2020-07-11 01:14 江湖小小白 阅读(15164) 评论(0) 推荐(1) 编辑
摘要:下载源码,安装 Cygwin、JDK 和 VS2010:https://www.cnblogs.com/jhxxb/p/12558970.html 创建 VS 工程 # 打开 CMD cd jdk8u\hotspot\make\windows C:\VS2010\VC\bin\amd64\vcvar 阅读全文
posted @ 2020-03-29 01:33 江湖小小白 阅读(2330) 评论(0) 推荐(0) 编辑
摘要:只是编译,不调试。 一、安装 Cygwin 32 位和 64 位都可以试试。 https://cygwin.com/install.html 把这些装上(https://hg.openjdk.java.net/jdk8u/jdk8u/raw-file/tip/README-builds.html) 阅读全文
posted @ 2020-03-28 21:04 江湖小小白 阅读(2046) 评论(0) 推荐(0) 编辑
摘要:Agent 为 JVMTI 的客户端。 这里记录的是基于Java Instrument 的 Agent 实现,还有直接基于 JVMTI 的 Agent 实现。 在 JDK1.5 以后,我们可以使用 Agent 技术构建一个独立于应用程序的代理程序,用来协助监测、运行甚至替换其他 JVM 上的程序。使 阅读全文
posted @ 2019-10-03 01:49 江湖小小白 阅读(2680) 评论(0) 推荐(1) 编辑
摘要:JPDA:Java 平台调试架构(Java Platform Debugger Architecture) 它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接口。 一、JPDA https://docs.oracle.com/javase/8/docs/technotes/guides/jpd 阅读全文
posted @ 2019-09-23 22:36 江湖小小白 阅读(4500) 评论(0) 推荐(0) 编辑
摘要:Unsafe 是 sun.misc 包下的一个类,可以直接操作堆外内存,可以随意查看及修改 JVM 中运行时的数据,使 Java 语言拥有了类似 C 语言指针一样操作内存空间的能力。 Unsafe 的操作粒度不是类,而是内存地址和所对应的数据,增强了 Java 语言操作底层资源的能力。 一、获得 U 阅读全文
posted @ 2019-09-07 17:32 江湖小小白 阅读(1379) 评论(0) 推荐(0) 编辑
摘要:JVM 运行时内存结构(Run-Time Data Areas) 内存溢出分为两大类:OutOfMemoryError 和 StackOverflowError。 一、HeapOomError (JVM 堆内存溢出) 二、MemoryLeakOomError(JVM 堆内存泄漏) Java 语言中是 阅读全文
posted @ 2019-08-09 00:49 江湖小小白 阅读(1537) 评论(0) 推荐(0) 编辑
摘要:原本想在 Windows 下编译调试,但过程中遇到了诸多错误(老是报路径错误。。。),最后只好放弃。(已成功搭建:https://www.cnblogs.com/jhxxb/p/12589712.html) 此次记录调试的方法为 CentOS7 上编译,Windows 上使用 Clion 远程调试( 阅读全文
posted @ 2019-06-27 21:59 江湖小小白 阅读(7673) 评论(3) 推荐(4) 编辑
摘要:一、概述 栈帧位置 JVM 执行 Java 程序时需要装载各种数据到内存中,不同的数据存放在不同的内存区中(逻辑上),这些数据内存区称作运行时数据区(Run-Time Data Areas)。 其中 JVM Stack(Stack 或虚拟机栈、线程栈、栈)中存放的就是 Stack Frame(Fra 阅读全文
posted @ 2019-06-24 00:36 江湖小小白 阅读(24582) 评论(6) 推荐(9) 编辑
摘要:synchronized 锁的优化过程:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 一、不同锁对象的状态表示(需要了解 Java 对象头) https://wiki.openjdk.java.net/display/HotSpot/Synchronization 二、关于 Lock Reco 阅读全文
posted @ 2019-06-10 16:31 江湖小小白 阅读(5074) 评论(4) 推荐(0) 编辑
摘要:synchronized 的实现方式是用 Monitor 进行加锁,这是一种互斥锁,为了表示它对性能的影响我们称之为重量级锁。 Java 的线程是映射到操作系统原生线程之上的,要阻塞或唤醒一个线程就需要操作系统的协助,让线程从用户态转换到内核态,而状态转换需要耗费 CPU 很多的时间。 锁优化仅在 阅读全文
posted @ 2019-06-06 11:08 江湖小小白 阅读(1113) 评论(0) 推荐(0) 编辑
摘要:synchronized 具有使每个线程依次排队操作共享变量的功能。这种同步机制效率很低,但 synchronized 是其它并发容器实现的基础。 一、锁对象及 synchronized 的使用 synchronized 通过互斥锁(Mutex Lock)来实现,同一时刻,只有获得锁的线程才可以执行 阅读全文
posted @ 2019-06-03 20:09 江湖小小白 阅读(1860) 评论(0) 推荐(1) 编辑
摘要:前提:内存屏障 内存屏障(Memory Barrier)与内存栅栏(Memory Fence)是同一个概念。 用于阻止指令重排序。保证了特定操作的执行顺序和某些变量的内存可见性。 JMM 内存屏障分为四类: Store:将处理器缓存的数据刷新到内存中。 Load:将内存存储的数据拷贝到处理器的缓存中 阅读全文
posted @ 2019-05-29 17:12 江湖小小白 阅读(495) 评论(0) 推荐(0) 编辑
摘要:Java 内存模型(Java Memory Model,JMM)名字看上去和 Java 内存结构(JVM 运行时内存结构)差不多,但这两者并不是一回事。JMM 并不像 JVM 内存结构一样是真实存在的,它只是一个抽象的概念。 Java 的线程间通过共享内存(Java堆和方法区)进行通信,在通信过程中 阅读全文
posted @ 2019-05-29 10:18 江湖小小白 阅读(1455) 评论(0) 推荐(1) 编辑
摘要:垃圾收集器为垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程。 HotSpot 虚拟机采用分代收集(JVM 规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也按照这样区分。不过已有通用垃圾收集器出现。 一、新生代垃圾收集器 Serial 垃圾收集器(单线程) 在垃圾收集过程中停止 阅读全文
posted @ 2019-05-28 14:12 江湖小小白 阅读(1156) 评论(0) 推荐(0) 编辑
摘要:程序计数器、虚拟机栈、本地方法栈随线程而生,随线程而灭。 栈帧随着方法的开始而入栈,随着方法的结束而出栈。 这几个区域的内存分配和回收都具有确定性,在这几个区域内不需要过多考虑回收的问题,因为方法结束或者线程结束时,内存自然就跟随着回收了。 对于 Java 堆和方法区,只有在程序运行期间才能知道会创 阅读全文
posted @ 2019-05-28 09:11 江湖小小白 阅读(1116) 评论(0) 推荐(0) 编辑
摘要:一、sun.misc.Launcher (ExtClassLoader 与 AppClassLoader 的创建) public Launcher() { Launcher.ExtClassLoader var1; try { var1 = Launcher.ExtClassLoader.getEx 阅读全文
posted @ 2019-05-27 15:23 江湖小小白 阅读(1239) 评论(0) 推荐(0) 编辑
摘要:类的生命周期中的第一步,就是要被 JVM 加载进内存,类加载器就是来干这件事。 一、类加载器种类 系统提供了 3 种类加载器: 1.启动类加载器(Bootstrap ClassLoader) 由 C 和 C++ 编写,是在 JVM 启动后初始化的。可在这里查看到源码(OpenJDK):https:/ 阅读全文
posted @ 2019-05-24 15:14 江湖小小白 阅读(474) 评论(0) 推荐(0) 编辑
摘要:类从被加载到虚拟机内存开始,到卸载出内存为止。 解析阶段在某些情况下可以在初始化后再开始,这是为了支持 Java 语言的运行时绑定。 一、类加载时机 JVM 规范没有强制约束类加载过程的第一阶段(加载)什么时候开始,但对于“初始化”阶段,有着严格的规定。 1.1.有且仅有 5 种情况必须立即对类进行 阅读全文
posted @ 2019-05-22 14:33 江湖小小白 阅读(6153) 评论(1) 推荐(1) 编辑