jvm

Java虚拟机

穿精又带淫゛_ 提交于 2020-02-03 12:25:42
jvm的框架结构:jvm在运行时会产生一个运行时数据区,里面包含了方法区,Java堆,虚拟机栈,本地方法栈,程序计数器等5个模块,其中,Java堆主要用来存放Java对象实例(Java虚拟机规范写:class,instances,arrays),另外,Java堆会划分多个线程私有分配缓冲区来进行内存管理。Java堆被垃圾收集器(GC)所管理,就是说Java堆里面的内存会被GC自动管理。 来源: CSDN 作者: 过圣诞节的小马哥 链接: https://blog.csdn.net/qq_40236645/article/details/90237272

深入理解JVM张龙-P15-P20

此生再无相见时 提交于 2020-02-03 12:07:29
数组类的Class对象不是由classloader创建的,是由Java虚拟机在动态运行期间创建的 来自定义类加载器 loadclass方法会调用我们重写的findclass方法。findclass方法一定要重写 package com . kmoonwang . mywenda ; import java . io . ByteArrayOutputStream ; import java . io . File ; import java . io . FileInputStream ; import java . io . InputStream ; import java . util . Random ; import java . util . UUID ; public class JVMlearning extends ClassLoader { private String classLoaderName ; private final String fileExtension = ".class" ; private String path ; //指定从什么地方去加载 public void setPath ( String path ) { this . path = path ; } public JVMlearning ( String

java基础--Java虚拟机

坚强是说给别人听的谎言 提交于 2020-02-03 11:38:23
· JVM (Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境,是Java 最具吸引力的特性之一。我们编写的Java代码,都运行在 JVM 之上。 ·跨平台 :任何软件的运行,都必须要运行在操作系统之上,而我们用Java编写的软件可以运行在任何的操作系统上,这个特性称为Java语言的跨平台特性。该特性是由JVM实现的,我们编写的程序运行在JVM上,而JVM 如图所示,Java的虚拟机本身不具备跨平台功能的,每个操作系统下都有不同版本的虚拟机。 JRE和JDK JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。 JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具。 我们想要运行一个已有的Java程序,那么只需安装 JRE 即可。 我们想要开发一个全新的Java程序,那么必须安装 JDK 。 三者关系: JDK > JRE > JVM 来源: https://www.cnblogs.com/hoganhome/p/11477257.html

Why does Java have much better performance vs other interpreted languages? [closed]

狂风中的少年 提交于 2020-02-03 04:19:06
问题 As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance. Closed 6 years ago . Why does Java have much better performance compared to other interpreted languages like Python? I know this probably has something to

【JVM-沙箱】java 安全沙箱模型详解

旧巷老猫 提交于 2020-02-03 03:01:32
起到第一道安全保障作用的”双亲委派类加载模型” 双亲委派方式的类加载,指的是优先从顶层启动类加载器开始,自顶向下的方式加载类的模型(参见第一条类装载器体系结构)。 这种模型的好处是,底层的类装载器装载的类无法与顶层类装载器装载的类相互调用。 哪怕是同包下的类,只要他们不属于同一类装载器,都是相互隔绝的。这对一些有安全隐患的类起到了安全隔离的作用。使它不能冒充系统类来破坏程序正常运作。 此外,不同的类装载器,也有自己的类装载范围。比如启动类装载器,它只会装在jdk/lib目录下的包/类,因此,系统级的类是相对安全的。 class** 文件校验器,通过四趟扫描,保证了class文件正确** 第一趟是,检查class文件的结构是否正确。比较典型的就是,检查class文件是否以魔数OxCAFEBABE打头。 通过这趟检查,可以过滤掉大部分可能损坏的,或者压根就不是class的文件,来冒充装载。 第二趟是,检查它是否符合java语言特性里的编译规则。比如发现一个类的超类不是Object,就抛出异常。 第三趟是,检查字节码是否能被JVM安全的执行,而不会导致JVM崩溃。这里提到了一个停机的问题。内容是这样的,“即不可能写出一个程序,用它来判定作为其输入而读入的某个程序,是否会停机”。意思是,不可能写一个程序,让它告诉你,另外一个程序会不会中断或崩溃。 第四趟是,符号引用验证。一个类文件

59.Error

早过忘川 提交于 2020-02-03 02:07:48
Error是程序无法处理的错误,表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示代码运行时 JVM(Java 虚拟机)出现的问题。例如,Java虚拟机运行错误(Virtual MachineError),当 JVM 不再有继续执行操作所需的内存资源时,将出现 OutOfMemoryError。这些异常发生时,Java虚拟机(JVM)一般会选择线程终止。 Error表明系统JVM已经处于不可恢复的崩溃状态中。我们不需要管它。 Error与Exception的区别 Exception可以处理 Error无法处理 来源: CSDN 作者: 云疏不知数 链接: https://blog.csdn.net/qq_43808700/article/details/104149652

JVM 面试 详解

百般思念 提交于 2020-02-03 00:44:20
1.ClassLoader相关 1. 什么是类加载器? 读取 Java 字节代码,并转换成java.lang.Class类的一个实例。 2. 类相同的判断? 被相同的类加载加载的类才是相同的类,这里指的“相同”,包括类的Class对象的equals()方法、isAssignableFrom()方法、isInstance()方法、instanceof关键字等判断出来的结果。 3. 类加载器种类? Bootstrap ClassLoader,加载$JAVA_HOME/jre/rt.jar Extension ClassLoader,加载JAVA_HOME/jre/ext/*.jar Application ClassLoader,加载ClassPath的jar 实例代码 public static void main ( String [ ] args ) { // BootStrapClassLoader: Object是rt.jar中的,这个是c实现的,所以是null System . err . println ( Object . class . getClassLoader ( ) ) ; // AppClassLoader: sun.misc.Launcher$AppClassLoader@73d16e93 System . err . println ( MyObject

jvm 垃圾收集器

时光总嘲笑我的痴心妄想 提交于 2020-02-02 13:39:45
如果说收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体实现。 虽然我们对各个收集器进行比较,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器, 我们能做的就是根据具体应用场景选择适合自己的垃圾收集器 。试想一下:如果有一种四海之内、任何场景下都适用的完美收集器存在,那么我们的 HotSpot 虚拟机就不会实现那么多不同的垃圾收集器了。 主要的垃圾收集器有以下几种: 一、Serial收集器 Serial(串行)收集器收集器是最基本、历史最悠久的垃圾收集器了。 大家看名字就知道这个收集器是一个单线程收集器了。它的 “单线程” 的意义不仅仅意味着它只会使用一条垃圾收集线程去完成垃圾收集工作,更重要的是它在进行垃圾收集工作的时候必须暂停其他所有的工作线程( "Stop The World" ),直到它收集结束。 虚拟机的设计者们当然知道 Stop The World 带来的不良用户体验,所以在后续的垃圾收集器设计中停顿时间在不断缩短(仍然还有停顿,寻找最优秀的垃圾收集器的过程仍然在继续)。 但是 Serial 收集器有没有优于其他垃圾收集器的地方呢? 当然有,它 简单而高效(与其他收集器的单线程相比) 。Serial 收集器由于没有线程交互的开销,自然可以获得很高的单线程收集效率。Serial 收集器多用于桌面应用

JVM垃圾收集器

丶灬走出姿态 提交于 2020-02-02 13:39:28
垃圾收集器就是收集算法的具体实现,不同的虚拟机会提供不同的垃圾收集器。并且提供参数供用户根据自己的应用特点和要求组合各个年代所使用的收集器。本文讨 论的收集器基于Sun Hotspot虚拟机1.6版。 下图中展示了jdk1.6中提供的6种作用于不同年代的收集器,两个收集器之间存在连线的话就说明它们可以搭配使用。没有最好的收集器,也没有万能的收集 器,只有最合适的收集器。从Serial收集器到Parallel收集器,再到CMS收集器, G1收集器,用户线程的停顿时间在不断缩短,但是仍然没有办法完全消除。 1. Serial收集器 单 线程收集器,使用复制收集算法,收集时会暂停所有工作线程(我们将这件事情称之为Stop The World),直到收集结束,虚拟机运行在Client模式时的默认新生代收集器。 优点是:简单高效(与其他收集器的单线程相比),对于限定单个CPU的环境来说,Serial收集器没有现成交互的开销。在堆比较小的情况下,一般停顿时 间很短,是可以使用这种收集器的。如下图: 2. ParNew收集器 ParNew 收集器就是Serial的多线程版本,除了使用多条收集线程外,其余行为包括算法、STW、对象分配规则、回收策略等都与Serial收集器一摸一样。 ParNew收集器是许多运行在server模式下的虚拟机中首选的新生代收集器(一个原因是在除了serial收集器外

JVM垃圾收集器

倾然丶 夕夏残阳落幕 提交于 2020-02-02 13:39:07
问题 带着问题去学习,效率更高! 垃圾收集器和垃圾回收算法的关系?分别请你谈谈? 怎么查看服务器的垃圾收集器是哪个?如何配置垃圾收集器?谈谈你对垃圾收集器的理解? 你知道G1垃圾收集器吗? 垃圾收集算法 垃圾收集器和垃圾回收算法的关系? 垃圾算法(引用计数,复制算法,标记清除,标记整理)都是内存回收的方法论,垃圾收集器是这种算法的落地实现。 请移步 JVM中的GC收集算法有哪些 先了解相关概念 垃圾收集器主要发生的区域 主要发生在方法区和堆中,其中方法区在jdk1.8中的实现是元空间(Metaspace) 次收集器 发生在新生代中的GC,被称为Young GC(Scavenge GC,Minor GC), 新生代中的对象大多数生命周期比较短,所以这里的GC发生很频繁。 全收集器 Full GC,指发生在老年代的 GC,出现了 Full GC 一般会伴随着至少一次的 Young GC(老 年代的对象大部分是Young GC 过程中从新生代进入老年代),比如:分配担保失败。Full GC 的速度一般会比 Young GC 慢 10 倍以上。 什么时候触发GC 当 Eden 空间不足以为对象分配内存时,会触发 Young GC。 当老年代内存不足,或者显式调用 System.gc() 会触发Full GC(也会伴随着执行至少一次的Young GC)。 STW(Stop-the-world