`
walklen
  • 浏览: 25498 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

说说jvm

 
阅读更多

1.一个jvm的天职就是运行一个java程序,当这个java程序关闭退出,这个jvm也随之消亡。一个jvm从一个java的main方法开始,其内部分两种线程,守护线程和非守护线程,守护线程一般来讲是jvm的后台线程,比如gc线程就是一个守护线程,程序的入口main方法就是java程序的第一个飞守护线程,当所有的非守护线程都结束,jvm的生命周期也就结束了。

2.每个对象都还有一个对象锁,用于协调多个线程访问同一对象(资源)的同步。

2.每个对象都有一个等待集合(wait set),等待集合是为多个线程完成某一目标而协调工作的,当一个线程调用了某个对象的wait方法,该线程就被阻塞,并把它放到该对象的等待集合中,知道另一线程在同一对象中调用notify或者notifuAll进行唤醒。

3:数组,在java中,数组是真正的对象,它的直径超类是Object,每一个具有相同维度和类型的数组都是同一个类的实例,数组类的组成有两部分,每一维用一个“[”表示,用字符或者字符串表示元素类型,如int类型一维数组的类名为:"[i";String的二维数组为“[[java/lang/String”.

4.栈帧,包括:

  (1)局部变量区,参数、局部变量的基本类型和引用

  (2)操作数栈,执行引擎操作过程的中间变量

  (3)帧数据区,存储常量池解析,正常返回或者异常派发等。

5.<clinit>方法是java编译器变量初时化语句静态初始话语句的代码都放到class的<clinit>方法中,jvm在加载初始化时调用该方法,如果有父类,就先调用父class的<clinit>,接口直径调用本身的<linit>.

6.实例化一个对象有四种方法1.new 2.Class或者Constructor的newInstance()反射实例化,3.clone  (),4.ObjectInputStream.getObject()反序列化。

分享到:
评论
3 楼 walklen 2012-07-13  
hougate 写道
在开发,应该这样用,如果一个线程的任务不太重要或线程的生命周期一定与主线程(main入口的线程)保持一致时,我们就可以把这个线程设置成守护线程,把它托管给虚拟机,这样在系统中就不需要管理这个线程的生命了;
不知道这样理解是否有误,请楼主详解!



线程的类别有继承的功能,非守护线程中建立的新线程会就是非守护线程,我们的线程一般都是直接或者间接在main线程建立的新线程,所以默认都是非守护线程。如果一个线程不太重要,而且生命周期很长,甚至有可能比任何其它的用户线程都长,这种情况下是可以用到守护线程的作用。
2 楼 hougate 2012-07-13  
在开发,应该这样用,如果一个线程的任务不太重要或线程的生命周期一定与主线程(main入口的线程)保持一致时,我们就可以把这个线程设置成守护线程,把它托管给虚拟机,这样在系统中就不需要管理这个线程的生命了;
不知道这样理解是否有误,请楼主详解!
1 楼 hougate 2012-07-13  


不错不错,
我对于守护线程和非守护线程,理解比较简单,其实我觉得应该叫守护线程和用户线程更加容易理解,而且守护线程的存在本质上就是为用户线程服务的(在虚拟机运行时应该有两个线程容器(ThreadList),一个是的虚拟机守护线程,一个是虚拟机运行的用户线程,所以在创建前必需先指定线程的类型,因为他会在创建时确定存放的容器),
在Main方法结束时,虚拟机会确定用户线程容器里是否存在用户线程,如果存在,就等待所有线程的结束,才结束虚拟机的生命周期;

说白了:守护线程是由虚拟机来决定是否销毁,用户线程,虚拟机没有权力销毁;

相关推荐

    jvm tools.rar

    再来说说JVM运行状态查看工具。这类工具可以帮助我们实时监控JVM的运行情况,例如内存使用、线程状态、CPU消耗等。常见的如VisualVM、JConsole、JProfiler等,它们能直观地展示JVM的各项指标,便于定位性能瓶颈,...

    java核心面试技术点

    1说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? 编译源代码为本地机器码执行。 内存泄露是一部分内存无法回收。溢出是说内存不够用了。泄露可能在将来会导致溢出 当对象在程序中不会被使用,但却有其他...

    全套JVM面试题!面试必备!

    8. **说说类加载的双亲委派模型?** 类加载时,会先由父类加载器检查是否已加载,如果没有则向下传递。这样可以避免类的重复加载,并保证核心类库的安全。 9. **解释一下JNI(Java Native Interface)?** JNI是...

    JVM面试题分享给需要的同学.zip

    8.说说你知道的几种主要的JVM参数 9.怎么打出线程栈信息 10.强引用、软引用、弱引用、虚引用的区别? 1)强引用 软引用 弱引用 虚引用 11.堆栈的区别是什么? 12 对象的GC年龄最大多少?存储在哪 13 为什么GC分代年

    BAT大厂高频面试题:Redis+JVM+微服务+并发+Spring+MyBatis.docx

    说说 Redis 哈希槽的概念? Redis 集群通过哈希槽来分配数据,共有16384个槽位,每个键值对都会根据哈希值映射到某个槽位上,从而实现数据的分布存储。 ### JVM #### JVM 基础知识 - **JVM 的内存区域划分**:...

    JVM解毒——类加载子系统

    看你简历写得熟悉JVM,那你说说类的加载过程吧? 我们可以自定义一个String类来使用吗? 什么是类加载器,类加载器有哪些? 多线程的情况下,类的加载为什么不会出现重复加载的情况? 什么是双亲委派机制?它有啥...

    java offer收割指南

    13. JVM 中一次完整的 GC 流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的 JVM 参数。 JVM 中的一次完整的 GC 流程是 Mark-Sweep-Compaction。对象晋升到老年代的方式是通过 Serial GC、Parallel GC、...

    v3.0-JavaGuide面试突击版.pdf

    1. 说说 List、Set、Map 三者的区别? 2. Arraylist 与 LinkedList 区别? 3. RandomAccess接⼝ 4. 双向链表和双向循环链表 5. Collections ⼯具类和 Arrays ⼯具类常⻅⽅法总结 三、Java 多线程 1. 简述线程、...

    Java面试八股文十万字总结.docx

    - **平台无关性**:通过JVM实现了跨平台的能力,编写一次,到处运行(Write Once, Run Anywhere)。 - **健壮性**:异常处理机制和垃圾回收机制提高了程序的健壮性和可靠性。 - **安全性**:沙箱安全模型和内存管理...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【*JVM】查看jvm虚拟机里面堆、线程的信息,你用过什么命令? 59 【JVM】垃圾回收算法有哪些? 59 引用计数法(Reference Counting Collector) 59 tracing算法(Tracing Collector) 61 compacting算法(Compacting ...

    大数据笔记整理.zip

    scala3 隐式转换4 类型参数化云發編程朱康1 并发编程基本概念2 课程基础知识复习3 CompletableFuture4 说说Java“锁”事5 LockSupport 与线程中断6 Java 内存模型之JMM7 volatile与Java内存模型8 CAS9 原子操作类之...

    java面试笔试资料包括JAVA基础核心知识点深度学习Spring面试题等资料合集.zip

    Java面试高级篇—说说TCP,UDP和socket,Http之间联系和区别.doc MySQL千万级的大表要怎么优化(读写分离、水平拆分、垂直拆分).doc redis缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级.doc RPC (Remote ...

    JAVA教程 pdf

    标题《JAVA教程 pdf》和描述“觉得不错,我学习Java时候用的,不知道你们认为怎么样,说说你们看法,小弟刚来,多多指教”指向了一本关于Java编程语言的教程,该教程用于帮助学习者掌握Java编程的基础知识和高级应用...

    阿里巴巴面试总结DOC版

    本资源摘要信息主要总结了阿里巴巴面试中的问题和答案,涵盖了 Java 编程语言、设计模式、JVM 内存模型、ClassLoader 结构、UML 模型图、OSGi 框架、Spring 框架、iBatis 框架、Java 序列化、NIO 编程、HTTP 协议、...

    (精品推荐)面试干货IT人必须掌握的面试技巧-素材.docx

    5. 描述JVM堆、栈、方法区的用处及区别 6. 举例说明Java8与Java7的区别 7. 对您使用的GC进行原理性描述 8. 举例说明某个JDK函数或者类的源代码分析 9. 说说您过去的项目经历 10. 画出您最了解的项目的总体设计图 11....

    【后端】 java基础(5.8)java高级基础之线程——synchronized关键字

    我们的java是运行在jvm虚拟机下的程序,我们每多启动一个jvm就是多了启动了一个进程。至于线程,就是每个进程下多开一个和现有的的任务同时执行的任务。 我们一个程序至少包含一个进程,一个进程至少包含一个线程 ...

    Java架构师之路系列教程

    3.高级篇-单点登录,Groovy视频,性能优化,Maven,Mongodb,Redis,Spring Security,Spring 源码,JVM,微信,银行接口等 4.架构篇-Linux视频,Nginx视频,京东海量订单处理视频,大型电商分布式实践,架构实战等 ...

    JDKSourceCode1.8:Jdk1.8源码解析

    专注于共享技术干货,包括Java基础,Java并发,JVM,Nginx,Zookeeper,微服务,消息代码,源码解析,数据库,设计模式,面经等,助您编程之路少走弯路。 有人说说得很好,一个人学习可以走得很快,但一群人学习可以...

Global site tag (gtag.js) - Google Analytics