jvm

JVM常量池

此生再无相见时 提交于 2020-02-17 06:45:52
常量池(constant_pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量和符号引用。运行时常量池是方法区的一部分。 在Class文件结构中,最头的4个字节用于存储魔数Magic Number,用于确定一个文件是否能被JVM接受,再接着4个字节用于存储版本号,前2个字节存储次版本号,后2个存储主版本号,再接着是用于存放常量的常量池,由于常量的数量是不固定的,所以常量池的入口放置一个U2类型的数据(constant_pool_count)存储常量池容量计数值。常量池主要用于存放两大类常量:字面量(Literal)和符号引用量(Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量: 类和接口的全限定名 字段名称和描述符 方法名称和描述符 Java中八种基本类型的包装类的大部分都实现了常量池技术,它们是Byte、Short、Integer、Long、Character、Boolean,另外两种浮点数类型的包装类(Float、Double)则没有实现。另外Byte,Short,Integer,Long,Character这5种整型的包装类也只是在对应值在

深入浅出java常量池

这一生的挚爱 提交于 2020-02-17 06:45:22
理论 jvm虚拟内存分布: 程序计数器 是jvm执行程序的流水线,存放一些跳转指令。 本地方法栈 是jvm调用操作系统方法所使用的栈。 虚拟机栈 是jvm执行java代码所使用的栈。 方法区 存放了一些常量、静态变量、类信息等,可以理解成class文件在内存中的存放位置。 虚拟机堆 是jvm执行java代码所使用的堆。 Java中的常量池,实际上分为两种形态: 静态常量池 和 运行时常量池 。 所谓 静态常量池 ,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。这种常量池主要用于存放两大类常量: 字面量 (Literal)和 符号引用量 (Symbolic References),字面量相当于Java语言层面常量的概念,如文本字符串,声明为final的常量值等,符号引用则属于编译原理方面的概念,包括了如下三种类型的常量: 类和接口的全限定名 字段名称和描述符 方法名称和描述符 而 运行时常量池 ,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在 方法区 中,我们常说的常量池,就是指方法区中的运行时常量池。 运行时常量池相对于CLass文件常量池的另外一个重要特征是 具备动态性 ,Java语言并不要求常量一定只有编译期才能产生

Java--多线程的概述

隐身守侯 提交于 2020-02-17 06:42:17
进程(process) 是程序的一次执行过程,或是正在运行的程序。 线程(thread) 进程可以进一步细化成线程,是一个程序内部的一条执行路径。 多线程作用 让多个代码同时进行。 jvm多线程解剖 cpu执行会在main和垃圾回收以及其他程序之间来回切换 class Person { //重写finalize方法 @Override protected void finalize ( ) throws Throwable { // TODO Auto-generated method stub System . out . println ( "垃圾回收器执行。。。。" ) ; } } public class chapter08 { public static void main ( String [ ] args ) { new Person ( ) ; new Person ( ) ; new Person ( ) ; new Person ( ) ; System . gc ( ) ; //调用垃圾回收器 System . out . println ( "Hello jvm..." ) ; } } 多次执行结果 取两个不同进行比较 由此可见,jvm中是多线程执行方式。 来源: CSDN 作者: roll_(¦3」∠)_back 链接: https://blog.csdn

jvm系列(1):JVM问答

感情迁移 提交于 2020-02-17 06:37:12
一:JVM基础知识 1)Java 是如何实现跨平台的? 注意:跨平台的是 Java 程序,而不是 JVM。JVM 是用 C/C++ 开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的 JVM 答:我们编写的 Java 源码,编译后会生成一种 .class 文件,称为字节码文件。Java 虚拟机(JVM)就是负责将字节码文件翻译成特定平台下的机器码然后运行,也就是说,只要在不同平台上安装对应的 JVM,就可以运行字节码文件,运行我们编写的 Java 程序。 而这个过程,我们编写的 Java 程序没有做任何改变,仅仅是通过 JVM 这一 “中间层” ,就能在不同平台上运行,真正实现了 “一次编译,到处运行” 的目的。 2)什么是 JVM ? 解析:不仅仅是基本概念,还有 JVM 的作用。 答:JVM,即 Java Virtual Machine,Java 虚拟机。它通过模拟一个计算机来达到一个计算机所具有的的计算功能。JVM 能够跨计算机体系结构来执行 Java 字节码,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件或者硬件之间的差异,使得与平台相关的耦合统一由 JVM 提供者来实现。 3)JVM 由哪些部分组成? 解析:这是对 JVM 体系结构的考察 答:JVM 的结构基本上由 4 部分组成: 类加载器,在 JVM 启动时或者类运行时将需要的 class 加载到

JVM垃圾回收详解

有些话、适合烂在心里 提交于 2020-02-16 22:38:54
通常,我们在写java程序的时候,似乎很少关注内存分配和垃圾回收的问题。因为,这部分工作,JVM已经帮我们自动实现了。 这样看起来,好像很美好,但是任何事情都有两面性。虽然JVM会自动的进行垃圾回收,但是,如果遇到有些问题,JVM自己也处理不了呢? 因此,我们需要了解一下JVM垃圾回收是怎样运作的,这样才能在遇到问题的时候,有的放矢。所以,今天就来聊一聊JVM的垃圾回收吧。 首先,思考一下,为什么需要进行垃圾回收? 我们知道,在创建对象的时候,Java会把对象的内容放到堆中。随着时间的推移,堆中的对象肯定会越来越多,但是,堆的大小是有限制的。如果,我们不进行垃圾回收,也就是把无用的对象进行清除和回收,那么JVM将不堪重负,最终导致内存泄漏。 既然我们需要进行垃圾回收,那么,首先得知道什么是垃圾。 在垃圾收集器对堆内存进行回收前,会先判断哪些对象还在“存活”,哪些对象已经“死去”(即不可能再被任何途径使用的对象),这些“死去”的对象,就是我们需要进行回收的垃圾。 那么,通过什么方式去判定是否为垃圾呢?(即判定对象是否存活) 引用计数算法(已淘汰) 引用计数算法,是指给对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加1,当引用失效时,计数器的值就减1。当计数器值为0时,该对象就会被回收。 可以说,引用计数算法的实现非常简单,判定效率也很高。但是,我们忽略了一个问题

what‘s java

泪湿孤枕 提交于 2020-02-16 14:28:04
目录 what‘s java 一、java简介 1.简介 2.版本 3.应用领域 二、java特点 1.跨平台 2.简单 3.安全 4.健壮 5.完全面向对象 三、跨平台 四、java环境变量 1.环境变量的操作 2.配置Java环境变量 3.jdk jre jvm分别是什么以及之间的关系 五、我的第一行代码 what‘s java 一、java简介 1.简介 java 是1995年sun公司推出的面向对象程序设计语言。起初 oak(橡树)。 java是一种跨平台,实现“一次编译,到处执行”。 java适用于网络环境,是internet最受欢迎的编程语言之一。 java程序可在计算机、pad、手机、电视电话等电子设备上运行。 2.版本 javaSE (java stanstard edition )标准版,用于客户端桌面软件编程。 javaME(java micro edition) 微型版,用于嵌入式、pad 手机、电视、电话、编程。 javaEE(java enterprise edition)企业版,用于服务器端分布式网络程序,比如电商,erp系统。 3.应用领域 桌面应用系统开发、嵌入式开发、电子商务应用开发、web应用系统开发、多媒体系统开发、企业级交互式分布式系统开发。 二、java特点 1.跨平台 graph LR A[.java源码]-->|JVM编译器| B[

聊聊java平台哪些事

女生的网名这么多〃 提交于 2020-02-16 14:27:01
如果有人让你聊聊java平台,你会怎么说呢?java平台包括的东西太多了,有java语言,java类库,jvm,还有一些java常用到的框架 ...... ,简直说都说不过来,下面是我的一些见解,算是现阶段对java的一点总结,可以指导我向哪些方面前进。 (1)java语言 java语言是一门面向对象的编程语言,号称 Write once, run anywhere,书写一次,到处运行 。其实java语言本身和其它编程语言没什么区别,关键是jvm让java语言在不同的平台运行的环境而已。JRE是java的运行环境,JDK是JRE的超集,除了包括java的运行环境,还有java的开发环境以及一些诊断工具。我们想要运行java程序,首先就得安装JDK,这就给我们提供了一个统一的编程环境,而不用关心操作系统的差异性,只关注编程技术。 java有三大特性,封装,继承,多态 封装是将类的关键信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 继承是使用已经存在的类来建立新类的技术,新类可以增加新的属性和方法,父类提供共性,子类提供特殊性。 多态是一个引用在不同情况下的多种状态。通过指向父类的指针,来调用不同子类的实现方法。 还有泛型,反射,Lambda ...... (2)java虚拟机(JVM) java语言实现运行的流程:编码->编译->运行

JDK JRE JVM

淺唱寂寞╮ 提交于 2020-02-16 13:08:58
使用java很久,但是一直不清楚JDK,JRE,JVM直接的关系,今天特地梳理一下。 JDK:Java Development ToolKit(Java开发工具包),JDK是整个JAVA的核心,包括Java运行环境(Java Runtime Environment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。 最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了属于自己的JDK,例如国外IBM公司开发了属于自己的JDK,国内淘宝也开发了属于自己的JDK,各个组织开发自己的JDK都是为了在某些方面得到一些提高,以适应自己的需求,比如IBM的JDK据说运行效率就比SUN的JDK高的多。但不管怎么说,我们还是需要先把基础的Sun JDK掌握好。 JDK有以下三种版本: J2SE,standard edition,标准版,是我们通常用的一个版本; J2EE,enterpsise edtion,企业版,使用这种JDK开发J2EE应用程序; J2ME,micro edtion,主要用于移动设备、嵌入式设备上的java应用程序。 我们常常用JDK来代指Java API,Java API是Java的应用程序接口,其实就是前辈们写好的一些java Class,包括一些重要的语言结构以及基本图形

关于 JDK jre jvm

∥☆過路亽.° 提交于 2020-02-16 12:56:23
JDK 全名是 JAVA development kit 是JAVA语言的软件开发工具 包;是整个JAVA开发的核心,没有JDK的话,无法编译Java程序,如果想只运行Java程序,要确保已安装相应的JRE。 JDK包含的基本组件包括: javac – 编译器,将源程序转成字节码; jar – 打包工具,将相关的类文件打包成一个文件; javadoc – 文档生成器,从源码注释中提取文档; jdb – debugger,查错工具; java – 运行编译后的java程序(.class后缀的); java.lang 这个是系统的基础类,比如String等都是这里面的,这个包是唯一一个可以不用引入(import)就可以使用的包。 java.io: 这里面是所有输入输出有关的类,比如文件操作等。 java.nio:为了完善io包中的功能,提高io包中性能而写的一个新包 ,例如NIO非堵塞应用 java.net: 这里面是与网络有关的类,比如URL,URLConnection等。 java.util: 这个是系统辅助类,特别是集合类Collection,List,Map等。java.spl: 这个是数据库操作的类,Connection, Statement,ResultSet等。 javax.servlet:这个是JSP,Servlet等使用到的类。 jre: JRE(Java

jvm 命令使用调优 通过jstat、jmap对java程序进行性能调优

不问归期 提交于 2020-02-16 11:39:58
转载: http://blog.csdn.net/jerry024/article/details/8507589 转载: https://blog.csdn.net/zhaozheng7758/article/details/8623530 通过jstat、jmap对java程序进行性能调优 2013年01月16日 12:54:12 jerry在魔都 阅读数 1207 第一次写技术博客,本文记录了我对服务器cpu占用率100%问题的排查过程和最终结果,算是一篇学习日志。 本人属于学习中的菜鸟码农,如有什么理解上的偏差的,还请各路大神指正。 关键词: jstat , jmap, heap, GC, smartupload, 内存泄漏 1. 背景 硬件供应商多次反映,在tomcat启动一段时间后,经常出现cpu占用率100%,且重启前一直保持在100%的情况。在重启后cpu占用率回落,但是一段时间后再次出现问题。 下图为cpu占用率100%时使用top命令的截图,可以看到java进程的cpu占用率几经几乎达到了400%(服务器为4核cpu) <1> 2.问题定位 2.1问题猜测 对于cpu占用率100%的情况,产生以下两种猜测: a. 程序长时间占用系统IO,导致CPU占用率100% b.程序存在严重内存泄露,导致jvm频繁执行full GC,从而使cpu占用率提高,造成服务器假死