JVM 思考与总结
摘要:相关基础知识见: 深入理解 JVM -- 垃圾收集器与内存分配策略 新生代为什么需要两个 Survivor 区? 如果只有一个 Eden 区加一个 Survivor 区,那么 Minor GC 后 Eden 区还存活下来的对象复制到 Survivor 区。而 Survivor 区里的对象在这次 Mi
阅读全文
JVM 例子,理解
摘要:一个线程一个栈,栈为线程私有。图中只有一个 main 线程。某方法返回时,它对应的栈帧也会释放掉。 方法区进行类加载,类的字节码中有代码 code 所有对象都在堆进行分配 main 线程的时间片(内核分配的)用完了, 上下文切换,cpu 执行 t1 ,要把 main 线程的栈帧都保存下来
阅读全文
深入理解 Java 虚拟机 —— Java 内存模型与线程
摘要:处理器的效率和一致性(与 java 内存访问可类比) 计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统的速度差距太大,大量的时间都花费在磁盘I/O、网络通信或者数据库访问上。 如果不希望处理器在大部分时间里都处于等待其他资源的空闲
阅读全文
深入理解 JVM —— 类加载及执行子系统案例
摘要:Tomcat —— 正统的类加载器结构 为一个功能健全的Web服务器,都要解决 如下的这些问题: 部署在同一个服务器上的 两个Web应用程序 所使用的 Java类库可以实现相互隔离。这是最基本的需求,两个不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求每个类库在一个服务器中只能有一份,服
阅读全文
深入理解 JVM -- 类加载
摘要:Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这个过程被称作虚拟机的类加载机制。 与那些在编译时需要进行连接的语言不同,在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成 的 这种策略让Ja
阅读全文
深入理解 JVM --- Class 类文件结构
摘要:C/C++也作为很多初学初学的语言,它们都是直接编译为机器码,所以执行效率会更高,并且都不需要执行环境,用户的使用成本会更低,不像很多语言还需要安装所需的环境。 也因为这些原因,它们的一次编码或编译只适用于一种平台,对于不同操作系统而言,有时需要修改编码再编译,有时直接重新编译即可。 Java是直接
阅读全文
深入理解 JVM ------ 调优案例分析与实战
摘要:1、大内存硬件上的程序部署策略 网站失去响应是由垃圾收集停顿所导致的,在该系统软硬件条件下, HotSpot虚拟机是以服务端模式运行,默认使用的是吞吐量优先收集器,回收12GB的Java堆,一次Full GC的停顿时间就高达14秒(太大会导致回收停顿时间过长。再加上直接进入老年代,Full GC 次
阅读全文
深入理解 JVM---JVM 和 GC 日志 以及 内存分配回收日志
摘要:虚拟机及垃圾收集器日志 1、JDK9 日志 在JDK 9以前,HotSpot并没有提供统一的日志处理框架,虚拟机各个功能模块的日志开关分布在不同的参数上,日志级别、循环 日志大小、输出格式、重定向等设置在不同功能上都要单独解决。 直到JDK 9,这种混乱不堪的局面 才终于消失,HotSpot所有功能
阅读全文
如何查看 JDK 使用的是哪种垃圾收集器
摘要:有关 垃圾收集器选择 的参数有 UseConcMarkSweepGC, UseG1GC, UseParNewGC, UseParallelGC, UseParallelOldGC, UseSerialGC JDK7 默认收集器组合 ParallelGC: 新生代 Parallel Scavenge
阅读全文
深入理解 JVM -- 垃圾收集器与内存分配策略
摘要:程序计数器、虚拟机栈、本地方法栈 3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的(尽管在运行期会由JIT编译器进行一些优化,但在本章基于概念模型的讨论中,大体上可以认为是编译期可知的),因此这
阅读全文
深入理解JVM - JAVA 内存区域与内存溢出
摘要:JRE 和 JDK JDK 是 Java Development Kit 缩写,它是功能齐全的 Java SDK。它拥有 JRE 所拥有的一切(包含了 JRE),还有编译器(javac)和工具(如 javadoc 和 jdb)。它能够创建和编译 Java 程序。 JRE 是 Java 运行时环境。它
阅读全文