JVM 虚拟机详解内部原理(小白必看!)

JAVA虚拟机(JVM)底层原理 JVM的详细全解,全面理解JVM的组成及其原理 阅读详情

前言

  • 作为一名Java软件开发程序猿,不了解JVM?那么你就只能干CRUD的工作!
  • 前几天刚学习了JVM,把学习到的经验在这里和大家分享下,有啥意见,欢迎在下方评论交流!

1.什么是JVM?

JVM全称 Java Virtual Machine(Java虚拟机),是Java模拟出来的一个计算机,运行在操作系统之上。

它的作用是什么呢?

  • 跨平台(移植性高)

   学习过Java的同学应该都知道,Java能够跨平台的重要原因就是得益于JVM,为什么这么说呢?因为我们在编写java代码时,想要运行这个程序,首先得从java文件编译成class(字节码)文件。紧接着由我们的JVM装载这个class文件,然后转化成平台能够识别的指令。整个过程中,JVM扮演了一个翻译官的角色。那么,把打包好的java程序比喻为一位需要去美国旅游的人(名为张三),操作系统比喻成美国,JVM就是张三此次在美国旅游的翻译官。因此,想要在不同的操作系统中运行java程序,只需要更换相应的jvm即可,正如jvm诞生初期所说“一次编译,到处运行”。

所以,我们想要运行Java程序,那么就必须得安装相应的JVM。如果,不需要运行Java程序,只需要开发Java程序,只需要安装相应的JDK。

  • 自动内存管理

    在C语言中,需要自己去分配、释放内存。一个操作不当,就有可能造成程序的死机。下面是一个简单的内存、释放内存代码:

//c语言通过malloc()和free()这两个库函数来实现分配、释放内存空间
// 一方面,对已释放的内存、未曾分配的内存做释放,都会造成死机; 
//另一方面,对不再使用的内存不释放,会浪费系统内存,甚至内存枯竭
#include <stdio.h>
int main(int argc,char* argv[] )
{
	int *p; // 定义一个int类型的指针
	p = (int *)malloc(4); //分配4个连续的内存单元给指针p
	free(p); //释放指针p所指向的内存单元
	printf ("Hello World! \n") ;
	return 0 ;
}

     Java中创建对象时会自动为该对象分配相应的内存空间,当该对象没有被引用地址所引用时,就会被JVM中的GC(垃圾回收器)进行回收。使其在开发时,不需要担心和C语言一样在分配内存和释放内存时所造成的困扰,极大的提高了开发效率。

2.JVM内部原理

上述只是简单的描述了JVM的功能,下面我们仔细的来看看JVM的内部原理。

先看看JVM结构图:

   我们主要看运行时数据区的五大组件:方法区、堆、虚拟机栈、本地方法栈、程序计数器。

方法区:主要保存类的信息如类名、属性、方法、常量池,是线程共享的。
在这里插入图片描述

堆:用于存放 java程序在运行时创建的实例对象,也就是开发时 new出来的对象都由堆进行分配内存空间进行存放。堆中没有被引用的对象会由JVM中的GC进行回收(清除),和方法区一样,是线程共享的。
在这里插入图片描述

虚拟机栈:也可以称之为栈( FILO)即先进后出,用于记录方法的调用路径,负责Java程序的运行,在线程创建时创建。当启动 main方法时,会创建一个主线程,此时就会在栈中创建一个 main方法的栈帧(栈中的每一层都称之为栈帧),如果 main方法中又调用了一个 a方法,那么就会在 main方法的后面为 a方法开辟一个栈帧(入栈)。当 a方法调用完后,则会清除该栈帧(也就是出栈),栈是线程私有的,每一个线程都只有一个栈。
在这里插入图片描述

如图所示就是报异常打印的栈信息:从下图可以看出,栈中最底层为main方法,当执行到最顶上一层UnixProcess类时报错。
在这里插入图片描述
  值得注意的是方法中的变量都存储在方法所在的栈帧里,这也就解释了局部变量只能在当前方法中访问。


本地方法栈:用于执行JVM中 C语言的本地方法,JVM底层是使用 C语言及 C++开发出来的,所以,需要一个Native方法来调用这些C语言中的方法。也就是JNI调用等。



程序计数器:用于线程执行到某个方法时被CPU切换的一个计数器。例如:a线程执行到b方法时如果被CPU切换了,也就是把执行权让给了b线程,那么程序计数器(也可以称为寄存器)就会记录a线程执行到的方法路径。



3.类加载器的分工

在这里插入图片描述
引导类加载器:用于加载java中的核心类库,也就是处于jre/lib/rt.jar中的类,Java开头的这些包名。


扩展类加载器:继承于引导类加载器,用于加载jre/lib/ext/目录下的所有jar包。


系统类加载器:用于加载我们自己写的Java类、main方法类。



JAVA它为什么要设计这么多的加载器呢?弄一个加载器加载所有的类它不香吗?

答案就是:提高了整个java程序的安全。假设:有一天有个黑客在你的程序中编写了一个带有病毒的class文件,包名为java.lang.Virus.class。那么大家想想,它能够被加载器成功加载吗?

肯定是不能滴!为什么呢?因为,这些所有的加载器都只会去特定的位置去加载那些jar包或者java类。就算这个病毒类被系统类加载器加载了,它只能破坏到系统类的一些东西。并不能够直接影响到JVM中的数据。

总结

好了,到这里就结束了,技术有限,只能给大家讲解那么多啦!下面简单的总结一下。

 class文件可以说成是我们人类吃的食物,那么类加载器就是我们的嘴巴,只有将class文件被加载器给加载了,才能够进入到JVM中的运行时数据区。也就是我们的肚子。那么执行引擎就是我们的肠胃,对class文件进行消化,转化成平台能够认识的指令。

 虚拟机在执行过程中,会分配相应的内存空间给对象,那么当这些对象无用时,就会清理掉。这时JVM中的GC就会起作用,它会判断哪些对象是无用的。如果是无用的,就会被其回收掉!如果一直不清理,并且一直创建对象,就会造成内存泄漏,直到内存溢出且程序崩溃。就相当于人体内的废物一直得不到排泄,那么总有崩溃的一天。

下篇博客,将会讲解JVM中的GC(垃圾回收机制)的实现原理,有兴趣的小伙伴可以了解下。谢谢大家的阅读!阅后点赞,手留余香!

JVM中的GC实现原理,如何搞挂JVM

JVM详解——什么是JVM、JVM优点 JVM详解——什么是JVM、JVM优点 最近在学习Java,经常在书中看到JVM这三个字母,那到底什么是JVM呢? 并且JVM的知识在Java面试中也是非常受面试官青睐的知识点,那对于JVM我们到底要掌握哪些呢? 1、JVM概念 JVM是Java Virtual Machine(Java虚拟机)的缩写。 1.1、什么是Java虚拟机呢?Java虚拟机的好处是什么呢? 答:虚拟机是一种抽象化的计算... 阅读详情

相关推荐

记JVM学习——尚硅谷宋红康JVM全套教程(详解java虚拟机)

记JVM学习——尚硅谷宋红康JVM全套教程(详解java虚拟机) 看完整套视频之后的感触是,讲的真的很好,很细致。推荐大家去学习。 下面是根据视频整理的笔记 尚硅谷宋红康JVM全套教程详解java虚拟机 JVM上篇:内存与垃圾回收 JVM与java体系结构 类加载器子系统 运行时数据区概述及线程 各部分详解 程序计数器 虚拟机栈 本地方法栈 堆 方法区 相关知识 对象的实例化、内存布局与访问定位 直接内存 String table 垃圾回收 概述 垃圾回收相关算法 垃圾回收相关概念 垃

weixin_43967582的博客 5429

JVM原理-超详细总结

JVM概念 JVM是java的核心和基础在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。java编译器只要面向JVM,生成JVM能理解的代码或字节码文件。Java源文件经编译成字节码程序,通过JVM将每一条指令翻译成不同平台机器码,通过特定平台运行。 JVM的生命周期: JVM的诞生:当启动一个Java程序时,一个JVM实例就产生了,任何一个拥有public static void main(Strin

weixin_45105261的博客 3万+

Java 虚拟机(JVM)方法区详解

Java 虚拟机(JVM)是 Java 程序运行的核心,而方法区(Method Area)是 JVM 内存模型中一个非常重要的组成部分。本文将深入探讨方法区的作用、存储内容、实现方式以及相关的调优和异常处理。

李长渊的博客 1609

深入剖析Java虚拟机(JVM):工作原理、内存管理与优化全解析

一、引言(Java Virtual Machine,简称JVM)是运行Java程序的抽象计算机,是Java语言的运行环境。它提供了Java程序运行所需的内存管理、垃圾收集、类加载等核心功能。理解JVM对于Java开发人员来说至关重要,它有助于我们优化程序性能、解决内存泄漏等问题。

qq_44664868的博客 3645

Cadence Allegro 17.4学习记录开始00

Cadence Allegro 有三个版本,16.6,17.2,17.4。现在主要学习最新的版本17.4.原理图设计:OrCADPCB设计:Allegro主要用到的就下面三个图片软件:PCB Editor 17.4 是用来画PCB和元器件封装的;Padstack Editor 17.4 是用来画元器件焊盘的;Capture CIS 17.4 是用来画原理图和原理图库的。其实Cadence还有很多功能,现在计划先学习以上内容,后面熟悉了这个软件,还可以继续学习放仿真等功能。

qq_31444421的博客 7438

Smali语言基础语法

定义、声明、调用 Smali数据类型 定义:与Java相同,Smali中也有一套数据类型体系,且该体系实质上是同Java一一对照的。 示例1:Smali——Java数据类型对照表 PS:如上图所示,Smali语言中的数据类型的关键词基本上为Java中同名数据类型的首字母大写,需要着重记忆的例外为:1.long类型的关键词为大写J;2.boolean类型的关键词为大写Z;3.数组的关键词为左半边中括号[;4.object类型(各种类)的关键词为大写L加上该类的全类名路径,路径中的层级用/分割。

aketoshknight的博客 1万+

Java 虚拟机(JVM)原理介绍

JVM 简介1、概述2、Java类的加载原理机制2.1 、Java类的加载过程2.2 、Class loader (类加载器)2.2.1 类的生命周期2.2.1.1 加载2.2.1.2 连接2.2.1.3 初始化2.2.1.4 使用2.2.1.5 卸载2.2.1.4 结束生命周期2.2.2 类加载器2.2.2 JVM类加载机制2.3 、Runtime Data Area (运行时数据区)2.3 、Execution Engine (执行引擎)2.3 、Native Interface (本地接口)2.4 、

漏墨小子的博客 3747

从零开始:使用PacBio HiFi和ONT超长读取组装基因组(保姆级教程)

本文提供了一份从零开始的基因组组装保姆级教程,详细讲解了如何融合PacBio HiFi高精度读长与ONT超长读长数据。内容涵盖数据质控、预处理、混合组装策略选择、结果评估及Hi-C支架构建等关键步骤,旨在帮助研究人员获得高质量的完整基因组。

weixin_29266647的博客 202

JVM原理最全、清晰、通俗讲解(包含类加载机制讲解)

1.Java自动管理堆(Heap)和栈,程序员不能直接的设置堆和栈。 2.操作系统的堆和栈 堆(操作系统):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收,分配方式类似于链表。 栈(操作系统):由操作系统自动分配释放,存放函数的参数值,局部变量值等。操作方式与数据结构中的栈相类似。 3.为什么JVM的内存是分布在操作系统的堆中? 因为操作系统的栈是操作系统管理的,它随时会被回收,所以如果JVM放在栈中,那Java的一个null对象就很难确定会被谁回收了,那GC的存在就一点意义都莫有

chenjian723122704的专栏 3092

SpringBoot+Vue实现图片上传

SpringBoot+Vue实现图片上传

叶♥璃 2730

使用python排八字 计算八字的相合相冲五行分值等 ...

简介 八字术是一种古老的算命术。它运用阴阳、五行、干支、八卦等理论,把人的出生年月日时转化为八个字,进而推算人的富贵贫贱、祸福吉凶、穷通寿天、名利地位、家庭六亲等方面的情况 八字源自古代的中国,是一种利用天干和地支来准确记录年、月、日、时的方式,由“年干,年支”、“月干,月支”、“日干,日支”、“时干,时支”,共八个干支所组成(共八个字),年、月、日、时...

weixin_33717298的博客 5309

java虚拟机 JVM详解 内部原理 (小白必看)

揭开 java平台的神秘面纱 导读         一个java程序员的水平高低最终取决于对 JVM (java虚拟机) 的了解程度 .          首先这篇文章带大家对 JVM 进行一个初步的了解 ,从下面两个问题进行解剖 。          1 . 什么

AKALXH的博客 3028

PCL DBSCAN密度聚类【2026最新版】

点云密度聚类的PCL代码实现,与matlab自带的密度聚类算法进行对比验证,结果一致。3万多个点能再2秒左右运行出结果,算法效率尚可。

点云侠的博客 5681

JVM虚拟机详解

不了解JVM的Java程序员无异于蒙上双眼在沼泽地奔跑的犀牛,你永远不知道你会在什么时候会掉进坑里,也永远不会明白为什么会掉进坑里。 那么,今天你是蒙着双眼奔跑的么?

Baldwin_KeepMind 9218

【图像去噪】论文精读:Restormer: Efficient Transformer for High-Resolution Image Restoration

论文题目:Restormer: Efficient Transformer for High-Resolution Image Restoration —— Restormer:用于高分辨率图像恢复的高效变压器高效Transformer模型用于图像恢复!由于卷积神经网络 (CNN) 在从大规模数据中学习可泛化的图像先验方面表现良好,因此这些模型已广泛应用于图像恢复和相关任务。最近,另一类神经架构 Transformer 在自然语言和高级视觉任务中显示出显着的性能提升。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1523

7段数码管驱动电路设计

7段数码管驱动电路设计

好好学习,天天向上 9750

JVM详解(五)虚拟机栈

JVM详解(五)在这里感谢尚硅谷JVM(宋红康),在此记录一下自己详细对学习笔记,希望对你有所帮助。05虚拟机栈栈的存储单位操作数栈代码追踪动态链接动态链接(或指向运行时常量池的方法引用)方法的调用方法的调用:方法重写的本质方法的调用:虚方法表方法返回地址(主要针对于正常退出的情况)一些附加信息栈的相关面试题 在这里感谢尚硅谷JVM(宋红康),在此记录一下自己详细对学习笔记,希望对你有所帮助。 视频地址 代码地址 05虚拟机栈 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架 构不同,

qq_29310729的博客 5523

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【金九银十】JVM虚拟机栈执行原理深入详解

前言: 你好,早上、中午、下午、晚上好。我是Java2B哥(微信搜Java2B)。一名无缘985,日常996工程师。 2B哥今天继续教大家JVM知识。这次章节为: 【金三银四-JVM系列】CMS收集器与GC日志分析定位问题详解 【金三银四】JVM虚拟机CMS和G1收集器详解 什么是JVM 相信很多小伙伴都非常熟悉了,JVM不就是虚拟机吗?那虚拟机又是什么了?不是JVM嘛! 这不废话嘛,其实JVM...

程序员Monkey的专栏 7059

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

JVM—虚拟机详解

JVM——Java虚拟机,它是Java实现平台无关性的基石。Java程序运行的时候,编译器将Java文件编译成平台无关的Java字节码文件(.class),接下来对应平台JVM对字节码文件进行解释,翻译成对应平台匹配的机器指令并运行。同时JVM也是一个跨语言的平台,和语言无关,只和class的文件格式关联,任何语言,只要能翻译成符合规范的字节码文件,都能被JVM运行。内存分配有两种方式,指针碰撞空闲列表。

weijiangbc0的博客 1127

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

深入理解JVM:解析Java虚拟机的内部原理与应用实践

Java堆是各线程共享的内存区域,在JVM启动时创建,这块区域是JVM中最大的, 用于存储应用的对象和数组,也是GC主要的回收区,一个 JVM 实例只存在一个堆内存,堆内存的大小是可以调节的。程序计数器是一块非常小的内存空间,几乎可以忽略不计,每个线程都有一个程序计算器,是线程私有的,可以看作是当前线程所执行的字节码的行号指示器,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令。不过Java字节码是用一种人类可以读懂的语言编写的,而不是用机器可以直接执行的语言。

资料免费分享,点击名片 321

JVM(Java虚拟机)详解

Java虚拟机(JVM)是Java平台的核心组件之一,它负责执行Java字节码。JVM提供了一个与硬件和操作系统无关的运行环境,使得Java程序可以在不同的平台上运行。JVM的主要功能包括加载字节码、解释或编译字节码为机器码、管理内存、执行垃圾回收等。JVM的设计目标是提供一个高效、稳定、安全的运行环境。为了实现这一目标,JVM采用了多种技术,如即时编译(JIT)、垃圾回收(GC)、内存管理等。JVM是Java平台的核心组件,它负责执行Java字节码,并提供了内存管理、垃圾回收、线程管理等功能。

z17826856787的博客 1293

“深入解析JVM:Java虚拟机内部原理揭秘“

摘要:本文将深入探讨Java虚拟机(JVM)的内部原理,包括JVM的架构、运行时数据区域、垃圾回收机制以及即时编译器等重要组成部分。了解JVM的架构、运行时数据区域、垃圾回收机制和即时编译器等重要组成部分,有助于我们编写高效、可靠的Java程序。即时编译器(Just-In-Time Compiler,JIT)是JVM的重要组成部分,它可以将热点代码(经常执行的代码)转化为机器码,提高程序的执行效率。运行时数据区域是JVM用来存储程序运行时数据的区域,包括堆、方法区、虚拟机栈、本地方法栈和程序计数器等。

coder_jh的博客 1085

jvm虚拟机-什么是jvm

最近看了一段时间jdk源码,在看源码的过程中对数据的存储不是很清楚,当时就在想数据到底存在哪里去了?以前只是看博客什么的对jvm有一个大概的了解,但是没有深入研究。经过一段时间的研究<<深入理解java虚拟机后>>,才决定写一些关于jvm的文章,不为别的只为了同为技术的程序员们少走一些弯路,因为这本书第一遍读起来晦涩难懂,我也是查阅了大量的资料才渐渐的理解了什么意思。同时也为了留下自己的脚印,以后几

wenhao_1992的博客 5856

JVM使用配置内部原理详解

Java虚拟机(JVM)中的内存设置详解   在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。 PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Insta

xiaoli 803

Java虚拟机JVM详解

Java虚拟机JVM详解1. JVM基本结构1.1 JVM概念1.2 JVM组成1.3 运行时数据区2.类加载机制2.1 类生命周期2.2 类加载器2.3 类加载机制-- 2个机制3. GC算法和垃圾收集器3.1 如何判断对象被回收3.2 如何判断一个常量是废弃常量3.3 如何判断一个类是无用的类3.4 垃圾回收算法3.5 垃圾收集器3.6 怎么选择垃圾收集器?4. GC调优4.1 JVM调优指标4.2 GC调优步骤4.3 GC调优参数5. JVM调优工具5. JVM相关问题5.1 无意识的锁应用5.2 对

靖节先生的博客 787

二、JVM从入门到精通之虚拟机详解

一、虚拟机 1.1 什么是虚拟机? 所谓虚拟机(Virtual Machine),就是一台虚拟计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。 大名鼎鼎的Visual Box,VMware就属于系统虚拟机,他们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。 程序虚拟机的典型代表就是Java虚拟机,它专门为执行单个计算机程序而设计,在Java虚拟机中执行的指令我们称为Java字节码指令 无论是系统虚拟机还是程序虚拟机,在上面运行的软件

猿小许的博客 2651
上一篇: ES6-Promise对象与async函数
下一篇: JVM之GC(垃圾回收机制),如何搞挂JVM
柳时元
博客等级 码龄7年 13粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值