kerdesek

1.) why the compiler is not removing this code?

synchronized(this){}

with other words, what effect it will cause in runtime?

2.) what is the VM ID, and why we need that?

3.) what is strictfp and why we need that?

4.) the System.out is final, how the System.setOut can change it?

5.) what is 'blank final' means?

6.) one thread overwrite the 0 value long with -1, is it possible the other thread read a value from that long which is not 0 and not -1 either?

7.) if you not defined the serialversion in a class, what change on this class will modify the automatically generates serialversion ?

8.)
a native thread raised and attached to the vm
you got control from this thread in your java method
you create (new) some object with non local scope
when will the created object remove ?

9.) is the Double.NaN == Double.NaN ?

10.) what is the maximum size of a String in Java ?

11.) what is the maximum size of a class in Java ?

12.) can you declare more than one top level (not inner) class in one source in Java ?

13.) one of the java thread is stuck in a native operation, how this affect the memory allocation in the VM ?

14.) how the dgc operates ? (distributed garbage collector)

15.) what happens if an object create a new reference to 'this' in its finalize method?
is the finalize will invoke again when this new reference cleared?

16.) why main ? where is the word 'main' bound to the java runtime environment ?
what you have to change to achive the void start( String[] args ) execute first instead of main?

17.) is it possible where a class which has the similar .class file will be different in the same VM ?

Hozzászólások

Érdekes kérdések, de szerintem a jó részük olyan, amivel az ember nem találkozik a munkája során, ha erre alapozol, könnyen felveszel egy olyan embert, akit a gyakorlatban nem tudsz használni, amikor a tranzakció demarkációt kell felderíteni öt-hat EJB és POJO rétegen keresztüli hívás során... :)
--
http://www.javaforum.hu

Hat, az angolsagon csiszolni kene... pl. az utolso kerdes konkretan nem ertheto.

Amugy jok a kerdesek...

abszolut igazad van, nekem meg nyelvvizsgam sincs
angol felsofokuja csak a lanyomnak van
en csak 20 eve dolgozom amerikaba, eddig 'azok' nem panaszkodtak az angolomra jellemzoen inkabb a magyarok, lehet oket szorakoztatja

magyarul:

megjelenik a vm-ben 1 osztaly, pl.: TudokOsszeadniImpl.class
kesobb (ugyanabban a futassi session-ben) megjelenik ujra a:
TudokOsszeadniImpl.class megis ez a masik osztaly nem equals az elozovel
miert?

csiszolok: mindenkitol elnezest szeretnek kerni, hogy nem tudok jol angolul, megis irnom kell..
ha ezzel, vagy a magyarazkodasommal megbantottam barkit: elnezest

viszont a /* kitiltast is megkockaztatva */ lehetne-e, csakugy szakmai modon, siman valaszolni erre kerdesre amit voltam rest leirni magyarul is?

igen/nem

... mint ahogy ennek te is nagyon jo peldajat adod. Nem tudom mit kell hoborogni, hogy szar angollal irta oda. En lassan 10 eve tanulom az angolt, es nem vagyok belole sem perfekt sem profi. Ugyanakkor nemegyszer angolul kommunikalok, es altalaba megertenek.

A konkret mondatrol szolva meg, az magyarul is elofordul, hogy az ember faradt, es kisse osszevissza mondatot ir. Megse szol senki, hogy figyi, deszar mar a magyarod.

Felreertes ne essek, en ezzel nem a topicnyitot vedem, hisz' nem tudhatom, hogy a konkret esetben mi munkalodott, csak peldat szeretnek adni, hogy nem kell mindenkinek bosz felbuzdulassal nekiesni.

--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

write only voltal megint...

nem az volt a bajom, hogy elirta, ez tenyleg megesik mindenkivel. viszont ha mar leirsz valamit, tudod ellenorizni ha nem vagy biztos benne, es vissza is tudod olvasni.

nade a problemam az volt, hogy rogton jott, hogy o 20 eve van amerikaban, etc, etc (onfenyezes), es nem azt irta, hogy "oops, tenyleg, bocsi, javitva".

azt irtam:
"20 eve dolgozom amerikaba"
es nem azt amit olvasol belole
"hogy o 20 eve van amerikaban"

ez azt jelenti, hogy amerikaba dolgoztunk, mondhatjuk amerikaiaknak dolgoztunk

a nagykozsegbol ahol lakom kozben varos lett, de azert nem amerika :)

ez a mentegetozes nem akarja azt jelenteni, hogy jol irok angolul, de azt talan jelenti viszont, hogy te nem eleg figyelmesen olvasol magyarul

Engem pl a válaszok sokkal jobban érdekelnének mint, hogy kinek milyen az angolja/magyarja.
----
"A hibás logikájú emberek több bűnt követtek el akaratukon kívül, mint a rossz emberek szándékosan."
Bárcsak...

oke. :)

1, a synchronized(this) hataskore csak a nem statikus valtozok, mig a syncronized(classname) a statikosokat is fogja. persze ez cska ilyen kozos megegyezeses dolog (marmint a synchronized), ugyhogy nem lehet erre alapozni 100%ig.

2, fogalmam sincs.

3, ezen nincs sokat magyarazni, eleg regi, de ha nem irtal ilyen kodot, meg nem talalkoztal vele

4, fogalmam sincs, meg sosem akartam ilyet csinalni

5, a blank final az egy olyan final tagvaltozo, aminek nem adtal erteket rogton deklaraciokor. ezeknek a konstruktorban _kell_ erteket adnod.

6, szar threadkezelesnel barmi elofordulhat. :)

7, ha jol tudom ezt eleg sokminden befolyasolja, szinte az osszes attributum neve, tipusa, etc, etc, es ez ezekbol egy JVM specifikus hash.

8, ha mar nem hivatkozik ra semmi?

9, az == nem, az equals igen

10, nyelvi limit nincs ra, IMHO. max JVM.

11, 65535 volt 1.5ig, utana valamit varialtak, mostmar talan nincs ra specifikacios limit.

12, hogyne lehetne.

13, fogalmam sincs

14, ez nem eleg konkret szeritnem

15, na, ilyet meg sosem probaltam :)

16, tudtommal igen

17, nem ertem a kerdest.

synchronized(this){}

ez azert jo kerdes szerintem mert sok teruletet erint
amugy errol mar irtam itt a hup-on

elsosorban tudni kell mi a volatile valtozo

volatile a java-ban mast jelent mint c/c++-ban
http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.3…
roviden es feluletesen a volatile valtozok bizonyosan a muveleti sorrendben kerulnek vissza a memoriaba

Pelda:
int i=0,j=0;

i++;
j++;

egy masik thread-nek lehet j>i

ha viszont
volatile int i=0,j=0;

akkor minden pillanatban, konkurrensen is i>=j

de hogy pontosan mikor is kerulnek a memoriaba ?
ezt lehet eroltetni egy synchronized block-ba valo belepessel
vagyis mikor a synchronized vegrehajtodik az osszes volatile valtozo az aktualis ertekevel erheto el egy masik thread-nek

errol szol a masodik bullet a paragrafusban
http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.4.4

mi a virtualis gep azonositoja?

roviden:
http://java.sun.com/j2se/1.5.0/docs/api/java/rmi/dgc/VMID.html

az objektumokat egy vm-en belul azonositani tudjuk a hashcode-javal ami altalaban a memoriacime
ez addig egyertelmu amig az objektumok nem lepnek ki a vm-bol
egy remote object azonossagat az ot tartalmazo vm-en kivul is vizsgalni kell
ehhez az azonossaghoz eloszor a vm-et magat kell azonositani

ez az ertek szabadon hasznalhato alakalmazasi celokra is a megadott kotottsegekkel

mi strictfp method classifier ?

az 1.1 sun java vm az intel platformokon intel fpu muveletekre forditja a lebegopontos muveleteket
ezzel megsertik a nyelvszabvanyt:

http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#…

vagyis az intel platformon leforditott byte-code nem koveti az IEEE 754 szabvanyt

ennek performancia( marketing ) oka volt gondolom
muszakilag ennek ellenere szukseg lehet arra, hogy inhomogen processor kornyezetben is bizonyosan ugyanazt az eredmenyt kapjuk (elosztott szamitasi model, zart rendu szimulacio)

erre az egyik megoldas a BigDecimal hasznalata, aminek persze performanciaban kell megfizetni az arat

a masik megoldas, hogy az erzekeny metodusokat strictfp-nek jeloljuk
ennek az lesz az eredmenye hogy a Compiler nem irja at nativ fpu muveletekre, ha nem IEEE 754 conform kornyezetben fut

fontos megjegyezni, hogy ez a metodus maga, nem a vegrehajtasi szal
egy Math.sin elegendo, hogy megboruljon a hordozhato pontossag
ezert is keszult a
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StrictMath.html
wrapper a Math kore

System.out final-nak van jelolve, megis at lehet irni a System.setOut eljarassal, hogyan?

a System.setOut eljaras nativ
kicsit olyan ez mint az igazi programozo iromanyban a:
mindent meg lehet csinalni fortranban
amit nem lehet megcsinalni fortranban azt meg lehet csinali assembly-ben
amit nem lehet megcsinalni assembly-ben, azt nem lehet megcsinalni

szoval nativ-ban (pl. c-ben) felul lehet irni a final valtozokat is

jo kerdes lehet, hogy peldaul mi ertelme van setOut-nak
vagy azt is kerdezhetnem, hova is ir a java.exe System.out-ja?

mi az a blank final
olyan final-nak deklaralt valtozo amit ertek nelkul deklaralunk.

final int limit;

ennek a valtozonak vagy az inicializer block-ban vagy a konstruktorban erteket kell adnunk:
public class Main
{
final int limit;

{
limit = 2;
}
}
vagy

public class Main
{
final int limit;

Main()
{
limit = 2;
}
}

vagyis egyszer es csakis egyszer inicializalni kell

lehet-e hogy 0 erteku long-ot az egyik thread felulir -1 ertekkel, es ekozben egy masik thread nem 0,-1 erteket lat

igen lehet
a 64bites szamok irasa nem biztosan elemi muvelet, ebbe persze a double is beleertendo
vagyis lehet, hogy a -1 erteknak csak a felso/also 32bitjet irta be az egyik thread mig a masik thread olvassa ezt az erteket

amugy altalaban elemi muvelet, kulonosen 64bites cpu-nal

http://java.sun.com/docs/books/jls/third_edition/html/memory.html#17.7

ha van ra erdeklodes leirom a tobbi valaszt is..