Java. Henrik Lieng Høgskolen i Oslo og Akershus

Like dokumenter
Litt om Javas class-filer og byte-kode

NOTAT (pensum!) Javas klasse-filer, byte-kode og utførelse

Javas klasse-filer, byte-kode og utførelse (og litt om C# sin CIL-kode)

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Operativsystemer og grensesnitt

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

Introduksjon til programmering og programmeringsspråk

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Generelt om operativsystemer

Tildeling av minne til prosesser

INF1000 : Forelesning 1 (del 2)

Forelesning inf Java 1

INF5110. Oblig 2 presentasjon

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

Minnehåndtering i operativsystemer

Minnehåndtering i operativsystemer

Objekter og referanser

2 Om statiske variable/konstanter og statiske metoder.

Litt Java-historikk. Litt Java-historikk. Ulike varianter for ulike behov. Litt Java-historikk. The Green Team

Kapittel 1: Datamaskiner og programmeringsspråk

2 Om statiske variable/konstanter og statiske metoder.

Forelesning inf Java 1

Threads Threads (tråder) threads vs prosesser threads vs prosesser Definisjoner av

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Forelesning inf Java 1

InfoRed Publisering. - produktbeskrivelse. TalkPool WebServices Postboks Åneby

AlgDat 10. Forelesning 2. Gunnar Misund

Stikkord: Java EE, EJB, JSF, JPA, SWT, klient/tjener, Glassfish server, Application Client.

Velkommen til INF5110 Kompilatorteknikk

Kapittel 1. Datamaskiner og programmeringsspråk. 1.1 Programmering

Læringsmål og pensum. v=nkiu9yen5nc

IN2000. Gjennomgang av tekniske oppgaver på prøveeksamen. Erlend Stenlund og Steffen Almås + innspill fra Gaute Berge

Innhold Forord...3 Begreper og akronymer...4 Systembeskrivelse...5 Generelt...5 Funksjonelle krav...7 Ikke-Funksjonelle krav...9 Prioritering...

Oversikt. Informatikk. INF1000: Grunnkurs i objektorientert programmering. Utenom INF1000 Informasjon & hjelp

Tildeling av minne til prosesser

OPPGAVESETT 7 OBJEKTER OG REFERANSER

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

Velkommen til INF Kompilatorteknikk

Anatomien til en kompilator - I

Del 4 Noen spesielle C-elementer

Fra Python til Java, del 2

Forord. Brukerveiledning

Obligatorisk Innlevering 2

Del 1 En oversikt over C-programmering

Grafiske brukergrensesnitt med Swing og AWT

- reklamebannere mobil og tablet

CORBA Component Model (CCM)

Generelt om operativsystemer

Web fundamentals. Web design. Frontend vs. Backend Webdesign 17. januar Monica Strand

Kapittel 7: Mer om arv

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

Kom i gang med programmering i Java

Kapittel 1: Datamaskiner og programmeringsspråk. Java som første programmeringsspråk

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Innledende Analyse Del 1.2

Data. Dette refereres til som objektets tilstander. Funksjonalitet. Dette refereres til som objektets metoder.

Programmeringsspråket C Del 3

oppgavesett 4 INF1060 H16 Hans Petter Taugbøl Kragset Øystein Dale Christian Resell 27. september 2016 Institutt for informatikk, UiO

Oblig 2 - Simpila. INF Kompilatorteknikk. Våren Typesjekking, sjekking av bruk av navn og blokkstrtuktur i språk.

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

Java RMI (Remote Method Invocation) Gruppe 9: Ivar Steien Rasmussen Tom Anders Dalseng Andreas Petlund

Kapittel 1: Datamaskiner og programmeringsspråk. Java som første programmeringsspråk

Oblig 5 Webutvikling. Av Thomas Gitlevaag

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

Kapittel 1 En oversikt over C-språket

Håndtering av minne i et OS

Viktig. Rettet i koden. Obligatorisk oppgave 2 Litt flere detaljer om semantikksjekk og kodegenerering. Semantikksjekk

Forprosjektrapport gruppe 3

Transkript:

Java Henrik Lieng Høgskolen i Oslo og Akershus

Hvorfor Java? Objekt-orientert (primære stilen i moderne programutvikling) Sikkert (lar ikke programmerer tukle med minne etc.) Enkelt å lære (så lenge du kjenner til objekt-orientert programmering) God støtte (både fra IDEer og på Internett) Støttes av de fleste operativsystemer

Javateknologier Oracle tilbyr, i tillegg til språket Java, teknologier som: Appets Servlets Dynamiske HTML sider med JSP GUI med JavaFX (før Swing) Solid støttebibliotek (Java Class Library) Google: Android SDK

Java og webutvikling: applets Java applets er Java programmer som er innebygd i andre applikasjoner, som i en webside vist i en nettleser.

Java og webutvikling: servlets Backend web-utvikling med Java. Genererer HTML sider og håndterer HTTP requests fra klienter. Java servlets er Java programmer som kjører på servere (tjenere).

Java og webutvikling: JavaServer Pages Generering av dynamiske websider (HTML) og dokumenter (XML). Utvikles sammen med Java servlets, der JSP tar for seg synsdelen av websiden.

Java og systemutvikling: JavaFX GUI programmering i Java. Erstatning av Java Swing biblioteket. Støtte for: 2D og 3D grafikk (inkludert GPU programmering) 3D scenegrafer (for objekter i spill etc.) GUI elementer (knapper, slidere, layouts) Effekter, animasjoner, 2D/3D transformasjoner

Java og systemutvikling: Java Class Library Generelt bibliotek som dekker vanlig funksjonalitet som forventes av et programmeringsspråk. Eksempler: Dynamiske data containere Kalender, Dato, Tid Tekstformatering (mtp. språk/lokalisering) Unntakshåndtering Prosess- og trådhåndtering Nettverk- og databasehåndtering https://docs.oracle.com/javase/8/docs/api/java/util/package-summary.html

Java utgivelser Java er publisert for ulike plattformer: Java Standard Edition (Java SE): for vanlige datamaskiner Java Micro Edition (Java ME): for miljøer med begrensede ressurser Java Enterprise Edition (Jave EE): for store distribuerte miljøer og/eller Internett miljøer Java Card: for smartkort (SIM kort etc.).

Hva kjennetegner Java? Automatisk minnehåndtering Som de fleste moderne, populære, programmeringsspråk, utfører Java (heap) minnehåndtering automatisk

Hva kjennetegner Java? Prosedyrer er alltid innkapslet i klasser Java støtter ikke prosedyrer utenfor klasser. Dette er faktisk ganske 'unormalt' for moderne språk. Alt i Java er klasser pga. hvordan JVM er bygd opp

Klassifisering av Java Java tilbyr forskjellige programmeringsstiler: Imperativt (tilstander kan endres på via instruksjoner) Objekt-orientert programmering (programmet inndeles i objekter) Klasse-basert programmering (objekter defineres fra klasser) Klasser brukes også for å organisere prosedyrer (statiske metoder) Prosedyre-basert programmering (programmet inndeles i prosedyrer) Funksjonell programmering Skal se på Javas støtte av dette i programutvikling Bedre altenativ: Scala

Negative sider ved Java Dårlig ytelse sammenliknet med noen andre språk Garbage collection fører til stopp i programutførelsen Mindre kontroll Ingen manuell minnehåndtering Ingen pekere Ingen prosedyrer utenfor klasser Ikke støtte for operatoroverlasting Ikke direkte tilgang til maskinvare Kan ikke brukes i utvikling av OS, nettverkssystemer, og andre systemer som ikke støtter Java.

Hva er Java?

Vanlige programmer Kode Kompilator Maskinkode Datamaskin (maskinvare)

Java programmer Java kode Javac Java bytecode Java Virtual Machine Maskinkode Datamaskin (maskinvare)

Java Virtual Machine En virtuell maskin som kjører Java programmer. Må støttes på operativsystemet ditt for å kunne kjøre et Java program. Utallige implementasjoner Write code, run anywhere, i motsetning til C/C++ write code, compile anywhere. Ytelse til Java program avhengig av JVM implementasjon. Definert via en spesifikasjon (slik at hvem som helst kan implementere JVM) Håndteres av Oracle: http://docs.oracle.com/javase/specs/jvms/se8/html/ Implementeringsdetaljer utelukket (som algoritme for Garbage Collector)

JVM arkitektur

JVM input:.class filer Definisjon av en Java klasse (en Java klasse -> en.class fil). Format: Java byte code Inneholder, blant annet: Konstante data (final variabler) Aksesseringsflagg (abstract, static etc.) Navn til klassen og til superklassen (default: Object) Interface (hvis noen) Medlemsvariabler Metoder

Eksempel, konvertering til C struct

Java byte code Instruksjonsformatet til JVM. Inndelt i bytes. Den første byten angir opcode (operation code) Hva skal gjøres? Siden lengden er 8 bits, har Java 256 mulige instruksjoner (198 er i bruk) En instruksjon kan inneholde flere bytes for parametere (hvis noen) parametere er kalt operands når vi snakker om instruksjonsformat

Java byte code: noen instruksjoner aload_0 ; last inn referanse 0 på stabelen istore_1 ; lagre verdien på stabelen til variabel 1 dadd ; legg til double verdiene to stabel, og lagre fcmpl ; sammenlikn to float verdier på stabelen i2b ; konverter int til byte new 41 45 ; alloker nytt objekt, av typen i 41->45 swap ; manipuler stack (swap de to øverste verdiene) goto 18 45 ; GOTO instruksjonssekvens 18->45 invokevirtual 85 ; kall Java funksjon (println)

JVM arkitektur

Class loader Load (bytecode) Link (verify, allocate memory, transform) Initialise sett startverdier

JVM og sikkerhet JVM prøver å garantere sikkerhet. Ingen Java program skal få JVM til å krasje! Språket Java tilbyr sikkerhet (som automatisk minnehåndtering, ikke bruk av pekere etc.), men Java bytecode må ikke kompileres fra Java! (kan kompileres fra C for eksempel) Verifiseringssteget påser at: Instruksjonshopp gjøres til gyldige plasseringer Data er alltid initialisert og referanser refererer til korrekt type data Aksessering til private og package private, samt metoder, ikke blir krenket

JVM og bytecode kompilering Problem: når skal vi kompilere til maskinkode? 1. Kompiler all kode i starten (for eksempel, class loader) Kjent som ahead-of-time compilation 2. Kompiler ingenting (eller veldig lite) i starten og kompiler bare når du trenger det (dvs. underveis i kjøringen til programmet) Kjent som just-in-time compilation

Kompilering av bytecode, fordeler/ulemper Ahead-of-time compilation Kjapp utførelse Lang kompileringstid Lang oppstartstid første gang programmet kjøres Bra hvis man kan akseptere lang kompileringstid (oppstart) kan være flere minutter for store programmer Eksempel: Server-side programmer og kompilering ved installasjon Mindre akseptabelt for små programmer (f.eks. Applets) Just-in-time compilation Mye bedre overall time (kompilering+kjøretid) Treg oppstart for hver kjøring (siden startkoden må kompileres) Kan gjøre optimaliseringer, som AOT for noen komponenter Generelt et bra valg for Java Noe tregere utførelse (avhengig av implementasjon/situasjon)

Kompilering av bytecode Kompilering av bytecode er ikke spesifisert i JVM. Designeren av en gitt JVM kan derfor velge metode. Oracle Hotspot JVM: Just-in-time, med optimaliseringer Dalvik (Google Android): Trace-based just-in-time Android Runtime (alternativ til Dalvik): Ahead-of-time compilation

Presis spesifikasjon. Lite rom for optimalisering. Upresis spesifikasjon. Mye rom for optimalisering.

Andre JVM språk (lite utdrag) Scala (funksjonelt språk) Clonjure (funksjonelt språk) Groovy (script språk, liknende Python) JRuby (Ruby, et populært språk, for JVM) Jython (Python for JVM)

JVM escape hatch: JNI Java Native Interface tilbyr kall, fra Java/JVM, til applikasjoner og biblioteker skrevet i andre språk. Selve interfacet tilbys via C. Muliggjør manuell minnebehandling, direkte kommunikasjon med maskinvare (via C), etc. Dvs. muliggjør det som Java ikke direkte tilbyr Kommunikasjon gjøres via delte biblioteker (dvs. at C programmet kompileres som et delt bibliotek, som kan brukes i Java)

Sammendrag Java er populært innen web-utvikling og (Android) app utvikling Java er objekt- og klasse-orientert, sikkert, enkelt å lære, og portabelt For webutvikling, tilbyr Java applets, servlets, og JSP Java passer også til GUI utvikling, og masse mer, via biblioteker Javaprogrammer kjører via JVM JVM er klasse-basert, der klasser er definert ut ifra Java bytecode JVM er implementert i ulike systemer, og kan bruke ulike typer kompilering (AOT eller JIT) JNI tilbyr kall fra applikasjoner og biblioteker skrevet i andre språk