jvm

Java面试题——JVM(3)

荒凉一梦 提交于 2020-01-29 16:02:50
题目:工作中用过的JVM常用基本配置参数有哪些? 文章目录 题目:工作中用过的JVM常用基本配置参数有哪些? -Xms、-Xmx -Xss -Xmn -XX:MetaspaceSize 典型配置案例 XX:+PrintGCDetails 下面一些只需要在面试中会说,在实际不太需要设置 XX:SurvivorRadio XX:NewRadio XX:MaxTenuringThreshold -Xms、-Xmx -Xms(-XX:InitialHeapSize):设置堆的初始空间大小,默认为物理内存的1/64 -Xmx(-XX:MaxHeapSize ):设置堆的最大空间大小,默认为物理内存的1/4 -Xss -Xss(-XX:ThreadStackSize ):设置单个线程栈的大小,一般默认为512k~1024k windows下显示结果如下: 我使用的是mbp,显示出为1024. windows为什么默认为0?代表用的是系统出厂默认值。(下图为官网描述信息) -Xmn -Xmn:设置年轻代大小 -XX:MetaspaceSize 设置元空间大小,使用本地内存,永久代在堆里面,默认情况下,元空间仅受本地内存的限制。 典型配置案例 -Xms128m -Xmx4096m -Xss1024k -XX:MetaspaceSize=512m -XX:+PrintCommandLineFlags

JVM探秘:MAT分析内存溢出

◇◆丶佛笑我妖孽 提交于 2020-01-29 15:13:55
本系列笔记主要基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》,是这本书的读书笔记。 MAT是分析Java堆内存的一个工具,全称是 The Eclipse Memory Analyzer Tool,用来帮助分析内存泄漏和减少内存消耗。使用MAT分析Java堆快照,可以快速计算出对象的保留大小(Retained Sizes),查找到阻止对象被回收的原因,MAT会自动生成一个包含内存泄漏疑点的报告。 MAT可以从Eclipse网站下载: http://www.eclipse.org/mat/ 生成Dump 使用MAT分析的是Heap Dump,也就是堆内存快照,生成快照有以下几种方式: 使用虚拟机参数-XX:+HeapDumpOnOutOfMemoryError,溢出时自动生成快照。 使用jmap命令,jmap -dump:format=b,file=${dir}/jmap.hprof pid 使用MAT导出本地java进程的内存快照,File->Acquire Heap Dump->选择要dump的java进程就可以了。 MAT的使用 生成完dump之后,可以用MAT打开dump出来的快照文件,File -> Open Heap Dump,对dump文件进行分析,生成一个Overview视图: 首先会列出堆内存的大小,有多少个类,有多少个对象,以及多少个类加载器。

Java面试题——JVM(1)

断了今生、忘了曾经 提交于 2020-01-29 11:04:03
题目:JVM垃圾回收的时候如何确定垃圾?是否知道什么是GC Roots 什么是垃圾 简单的说就是内存中以及不再被使用到的空间就是垃圾 要进行垃圾回收,如何判断一个对象是否可以被回收? 引用计数法 给对象中添加一个引用计数器,每当有一个地方引用它,计数器值加1,每当有一个引用失效,计数器值减1. 任何时刻计数器为0的对象就是不可能再被使用的,那这个对象就是可以回收的对象。 为什么主流Java虚拟机都没有选用这种算法? 原因:该算法很难解决对象之间相互循环引用的问题。 枚举根节点做可达性分析(根搜索路径) 所谓的“GC Roots”,就是一组必须活跃的引用。 基本思路就是通过一系列名为“GC Roots“的对象作为起始点,从这个被称为GC Roots的对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用。也即给定一个集合的引用作为根出发,用过引用关系遍历对象图,能被遍历得到的(可到达的)对象被判定为存活;没有被遍历到的就自然判定为死亡。 Java中可以作为GC ROOTS的对象: 1、虚拟机栈(栈帧中的局部变量表)中引用的对象。 2、方法区中的类静态属性引用的对象。 3、方法区中常量引用的对象。 4、本地方法栈中JNI(Native方法)引用的对象。 生存还是死亡 要真正宣告一个对象死亡,至少要经历两次标记过程

一起学习JVM-内存结构-方法区(Method Area)(线程共享的区域)

我怕爱的太早我们不能终老 提交于 2020-01-29 09:53:49
文章目录 方法区(Method Area) 运行时常量池 StringTable(串池) 方法区(Method Area) 定义: 存储了跟类相关的信息,如:成员变量、方法、构造器及常量池等。 逻辑上是堆的一部分,但是具体的实现是不一样的。比如:oracle公司的Hotspot JVM 在1.8之前方法区的实现叫永久代,就是使用堆的一部分作为方法区。 而1.8之后方法区的实现叫元空间,使用的是本地内存也就是系统内存。 特点: 1.所有Java线程共享的区域 2.能发生outOfMemoryErrot(内存溢出) 产生方法区内存溢出的场景: 动态产生class并加载的场景:如, spring利用cglib生成的代理类,mybatis用cglib动态生成mapper接口的实现类等 在JDK1.8之前,spring、mybatis等动态生成的类还是很容易造成永久代的内存溢出。 在1.8之后,因为元空间使用的是系统内存,相对来说充裕了很多,而且垃圾回收也是由自己管理的 演示代码: 1.8 以前会导致永久代内存溢出: 注意:该代码应用于JDK1.6版本 /** * 演示永久代内存溢出 java.lang.OutOfMemoryError: PermGen space * 设置启动参数,永久代最大内存为8M: -XX:MaxPermSize=8m */ public class Demo1_6

什么是JVM?Java虚拟机简介

半世苍凉 提交于 2020-01-29 08:05:01
JVM管理内存,并为基于Java的应用程序提供可移植的执行环境。 Java虚拟机是一个旨在执行其他程序的程序。这是一个简单的想法,也是我们最伟大的编码功夫的例子之一。JVM颠覆了当时的现状,并在今天继续支持编程创新。 JVM的使用和定义 JVM有两个主要功能:允许Java程序在任何设备或操作系统上运行(称为“一次写入,随处运行”原则),以及管理和优化程序内存。当Java在1995年发布时,所有的计算机程序都被写入一个特定的操作系统,程序内存由软件开发人员管理。所以JVM是令人耳目一新的。 Figure 1: High-level view of the JVM 对JVM有一个专业定义是很有用的,而且软件开发人员每天都会考虑这个定义。让我们把这些分解一下: 技术定义:JVM是执行代码并为代码提供运行时环境的软件程序的规范。 日常定义:JVM是我们运行Java程序的方式。我们配置JVM的设置,然后依赖它在执行期间管理程序资源。 当开发人员谈到JVM时,我们通常指的是在机器上运行的进程,特别是服务器,它表示并控制Java应用程序的资源使用。与JVM规范相比,JVM规范描述了构建执行这些任务的程序的需求。 谁开发和维护JVM? JVM被广泛部署、大量使用,并由一些非常聪明的程序员维护,包括公司程序员和开源程序员。OpenJDK项目是Sun微系统决定使用开源Java的产物

JVM指令手册

℡╲_俬逩灬. 提交于 2020-01-29 05:15:46
栈和局部变量操作 将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1压入栈 dconst_0 将double类型常量0压入栈 dconst_1 将double类型常量1压入栈 bipush 将一个8位带符号整数压入栈 sipush 将16位带符号整数压入栈 ldc 把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引) 从栈中的局部变量中装载值的指令 iload 从局部变量中装载int类型值 lload 从局部变量中装载long类型值 fload 从局部变量中装载float类型值 dload 从局部变量中装载double类型值 aload 从局部变量中装载引用类型值(refernce)

How are SoftReferences collected by JVMs in practice?

╄→гoц情女王★ 提交于 2020-01-29 04:24:27
问题 I have two separate caches running in a JVM (one controlled by a third party library) each using soft references. I would prefer for the JVM to clear out my controlled cache before the one controlled by the library. The SoftReference javadoc states: All soft references to softly-reachable objects are guaranteed to have been cleared before the virtual machine throws an OutOfMemoryError. Otherwise no constraints are placed upon the time at which a soft reference will be cleared or the order in

Sandbox JVM to secure server from untrusted sources

血红的双手。 提交于 2020-01-29 03:57:07
问题 How can protecting my server from malicious activity when accepting and executing uploaded, untrusted code? The users should be able to implement my interface and given data, perform some calculations and return data. No I/O operations are required and certainly no thread/process manipulation or other tomfoolery. Using the java.policy file it is possible to deny everything (by granting nothing). $ cat test.policy grant { }; Using this policy file, operations not granted will cause a security

JVM加载class文件的原理机制

萝らか妹 提交于 2020-01-29 03:40:27
Java的编译和平台独立性    首先Java是平台独立性语言(C/C++就不是,java一次编译在各个平台上都能执行),这关键就在它的"字节码"和JVM机制。Java程序编译后不是直接生成硬件平台的可执行代码,而是生成.class的字节码文件,再交由JVM翻译成对应硬件平台可执行的代码。 (也就是说.java文件被javac指令编译为.class的字节码文件,再由JVM执行)。   Java字节码的执行分为:即时编译和解释执行,通常采用解释执行方式。解释执行是指解释器通过每次解释并执行一小段代码来完成.class程序的所有操作。即时编译则是将.class文件翻译成机器码在执行。 类的加载机制   Java语言是一种具有动态性的解释性语言,类(Class)只有被加载到JVM中在能运行。   JVM会将编译生成的.class文件加载到内存中,并组织成为一个完整的Java程序。 这个加载过程则是由类加载器(ClassLoader和它的子类)来完成的,其实质是把类文件从硬盘读到内存中。   类的加载方式分为:     (1)隐式加载:程序使用new等方式创建对象,会隐式的调用类加载器。     (2)显式加载:直接调用class.forName()方法   在Java中类的加载是动态的,它不会一次性记载所有类然后运行,而是先把保证程序能运行的基类先加载到JVM中,其他类则是在需要时再加载

苹果手机那里找115网盘资源

六月ゝ 毕业季﹏ 提交于 2020-01-29 00:25:46
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。 文章目录 一、Java基础 1、Java基础教学视频 2、Java基础博客文章目录 3、Java基础书籍 二、关于JavaWeb基础 1、JavaWeb基础教程视频 2、关于JavaWeb博客文章 三、关于数据库 1、关系型数据库教学视频 2、非关系性数据库Redis视频 四、关于JDK新特性 五、关于并发编程 六、关于NIO 七、关于ssm框架 1、spring框架视频 2、Mybatis 框架视频 3、SpringMVC框架视频 4、SSM框架博客文章 4.1、spring框架 4.2、Mybatis框架 4.3、SpringMVC框架 4.5、SSM框架整合文章 八、关于数据结构与算法 1、数据结构与算法视频 2、数据结构与算法博客文章 3、数据结构与算法书籍 九、关于开发工具idea 十